From scry
Converts webm/mp4 videos to optimized GIFs using ffmpeg with quality presets like palette generation and dithering. For demo animations from recordings.
npx claudepluginhub athola/claude-night-market --plugin scryThis skill uses the workspace's default tool permissions.
- [Overview](#overview)
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Post-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.
This skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.
- Validate input video file exists
- Check ffmpeg installation
- Execute GIF conversion
- Verify output and report results
Verification: Run the command with --help flag to verify availability.
Confirm the source video file exists and is a supported format:
# Check file exists and get info
if [[ -f "$INPUT_FILE" ]]; then
file "$INPUT_FILE"
ffprobe -v quiet -show_format -show_streams "$INPUT_FILE" 2>/dev/null | head -20
else
echo "Error: Input file not found: $INPUT_FILE"
exit 1
fi
Verification: Run the command with --help flag to verify availability.
Supported input formats: .webm, .mp4, .mov, .avi
Verify ffmpeg is available:
if ! command -v ffmpeg &> /dev/null; then
echo "Error: ffmpeg is not installed"
echo "Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)"
exit 1
fi
ffmpeg -version | head -1
Verification: Run the command with --help flag to verify availability.
Choose the appropriate conversion command based on quality requirements:
ffmpeg -i input.webm -vf "fps=10,scale=800:-1" output.gif
Verification: Run the command with --help flag to verify availability.
ffmpeg -i input.webm -vf "fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif
Verification: Run the command with --help flag to verify availability.
ffmpeg -i input.webm -vf "fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5" output.gif
Verification: Run the command with --help flag to verify availability.
| Option | Description | Recommended Value |
|---|---|---|
fps | Frames per second | 10-15 for smooth, 5-8 for smaller files |
scale | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |
flags=lanczos | High-quality scaling algorithm | Always use for best quality |
palettegen | Generate optimized color palette | Use for quality-critical output |
dither | Dithering algorithm | bayer for patterns, floyd_steinberg for smooth |
# Thumbnail (small, fast loading)
ffmpeg -i input.webm -vf "fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" thumbnail.gif
# Documentation (balanced)
ffmpeg -i input.webm -vf "fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" docs.gif
# High-fidelity demo
ffmpeg -i input.webm -vf "fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse" demo.gif
Verification: Run the command with --help flag to verify availability.
Confirm successful conversion and report metrics:
if [[ -f "$OUTPUT_FILE" ]]; then
echo "GIF generated successfully: $OUTPUT_FILE"
# Report file size
SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
echo "File size: $SIZE"
# Get dimensions and frame count
ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 "$OUTPUT_FILE"
else
echo "Error: GIF generation failed"
exit 1
fi
Verification: Run the command with --help flag to verify availability.
Reduce quality settings:
# Lower fps and resolution
ffmpeg -i input.webm -vf "fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" smaller.gif
Verification: Run the command with --help flag to verify availability.
Use dithering:
ffmpeg -i input.webm -vf "fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg" smooth.gif
Verification: Run the command with --help flag to verify availability.
Use basic conversion without palette generation for speed:
ffmpeg -i input.webm -vf "fps=10,scale=800:-1" quick.gif
Verification: Run the command with --help flag to verify availability.