
Video To Gif
Generate a side-by-side set of GIF variants from a clip so you can pick the best size/quality tradeoff for posts, docs, or landing pages without guessing FFmpeg flags.
Overview
Video to GIF is an agent skill for the Launch phase that converts a video into multiple GIF variants with different FPS, width, and color settings so you can compare size versus quality before publishing.
Install
npx skills add https://github.com/zc277584121/marketing-skills --skill video-to-gifWhat is this skill?
- Runs `video_to_gif.py` via uv (Python 3.12) to batch-render variants into an `<input>_gifs/` folder
- Full preset produces ~18 variants: 3 FPS (10/15/20), 3 widths (480/640/800px), 2 palette sizes (128/256 colors)
- Prints a sorted comparison table of file size, FPS, width, and color count per variant
- Supports lighter presets when you want fewer variants instead of the full grid
- Optional gifsicle enables extra lossy-compression variants when installed
- Full preset generates approximately 18 GIF variants
- Default grid uses 3 FPS values, 3 widths, and 2 color counts
Adoption & trust: 833 installs on skills.sh; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have a video clip but do not know which GIF settings will look acceptable without blowing up file size for sharing or embedding.
Who is it for?
Solo builders preparing demo loops, changelog animations, or social snippets from MP4 screen captures.
Skip if: Teams that already have a fixed brand encode preset, automated CDN transcoding, or need long-form video hosting instead of GIF.
When should I use this skill?
The user wants a GIF from a video clip but is not sure about the right parameters for size, smoothness, and color accuracy.
What do I get? / Deliverables
You get a folder of labeled GIF variants plus a comparison table so you can choose one export confidently for distribution.
- Directory of multiple GIF files named by encoding parameters
- Sorted terminal comparison table of size and encoding settings
Recommended Skills
Journey fit
GIF exports are a launch artifact for sharing and embedding across channels once you have source video. Distribution is where optimized animated assets matter for social posts, changelogs, and lightweight embeds.
How it compares
Use for parameterized batch GIF comparison instead of a single manual `ffmpeg` one-liner in chat.
Common Questions / FAQ
Who is video-to-gif for?
Indie builders and marketers who export short motion assets from video and want data-driven size/quality picks without becoming FFmpeg experts.
When should I use video-to-gif?
Use it during Launch when you are preparing embeddable GIFs for posts or docs, or in Grow when refreshing content assets from existing video—especially when you are unsure about FPS, width, or palette.
Is video-to-gif safe to install?
It runs local FFmpeg/uv scripts on your files; review the Security Audits panel on this Prism page and only process video you own or are licensed to use.
SKILL.md
READMESKILL.md - Video To Gif
# Skill: Video to GIF Convert a video file into multiple GIF variants with different parameters, so the user can visually compare and pick the best one. > **Prerequisite**: FFmpeg and uv must be installed. gifsicle is optional (enables lossy compression variants). --- ## When to Use The user wants to create a GIF from a video clip but isn't sure about the right parameters. GIF quality involves tradeoffs between: - **File size** — smaller is better for sharing/embedding - **Color accuracy** — fewer colors = smaller but may cause banding - **Smoothness** — higher FPS = smoother but larger - **Resolution** — wider = sharper detail but larger Rather than guessing, this skill generates multiple variants and lets the user decide. --- ## Default Workflow When the user provides a video file: ```bash uv run --python 3.12 /path/to/skills/video-to-gif/scripts/video_to_gif.py <input.mp4> ``` This generates GIFs in `<input>_gifs/` directory with the **full** preset (18 variants): - 3 FPS options: 10, 15, 20 - 3 widths: 480px, 640px, 800px - 2 color counts: 128, 256 Output includes a sorted comparison table showing file size, FPS, width, and colors for each variant. --- ## Presets | Preset | Variants | Best For | |--------|----------|----------| | `full` | ~18 | General use — broad exploration of the parameter space | | `minimal` | ~4 | Quick comparison — just a few key tradeoff points | | `lossy` | ~12 | Smallest files — includes gifsicle lossy compression levels | | `quality` | ~12 | Best visuals — higher res, includes bayer dithering | ```bash # Quick comparison with fewer variants uv run --python 3.12 .../video_to_gif.py input.mp4 --presets minimal # Include lossy compression (requires gifsicle) uv run --python 3.12 .../video_to_gif.py input.mp4 --presets lossy # Higher quality focus uv run --python 3.12 .../video_to_gif.py input.mp4 --presets quality ``` --- ## Common Options | Flag | Default | Description | |------|---------|-------------| | `-o`, `--output-dir` | `<input>_gifs/` | Output directory for all GIF variants | | `--start` | none | Start time in seconds (trim source) | | `--end` | none | End time in seconds (trim source) | | `--presets` | `full` | Preset config: full, minimal, lossy, quality | | `--fps` | preset | Override FPS values (e.g., `--fps 10 15 20`) | | `--width` | preset | Override width values (e.g., `--width 480 640`) | | `--colors` | preset | Override color counts (e.g., `--colors 128 256`) | | `--lossy` | preset | Gifsicle lossy levels (e.g., `--lossy 0 30 80`) | --- ## Examples ```bash # Convert first 10 seconds of a video uv run --python 3.12 .../video_to_gif.py demo.mp4 --end 10 # Extract a specific segment uv run --python 3.12 .../video_to_gif.py demo.mp4 --start 5 --end 15 # Custom parameter sweep uv run --python 3.12 .../video_to_gif.py demo.mp4 --fps 12 15 --width 480 800 --colors 256 # Lossy compression comparison (needs gifsicle) uv run --python 3.12 .../video_to_gif.py demo.mp4 --lossy 0 30 60 100 ``` --- ## How to Choose After running, open the output directory and compare: 1. **Start with the smallest files** — check if quality is acceptable 2. **Look for color banding** — if visible, try 256 colors or bayer dithering (quality preset) 3. **Check smoothness** — if too choppy, go up to 15 or 20 FPS 4. **Check clarity** — if text is unreadable, go up to 640 or 800px width The sweet spot for most screen recordings is usually around **640px, 15fps, 256 colors**. --- ## Important Notes - Widths larger than the source video resolution are automatically skipped. - The script uses FFmpeg's two-pass palette generation for optimal GIF quality (much better than single-pass). - Lossy compression via gifsicle can reduce file size by 30-70% with minimal visual impact at level 30-60. - For