From claude-content
Converts video clips to high-quality GIFs using ffmpeg 2-pass palette workflow with palettegen and paletteuse for optimal colors and dithering. Gathers start time, duration, width, FPS.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-content:make-gifThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Convert a video clip to a high-quality GIF using the mandatory 2-pass palette workflow.
Convert a video clip to a high-quality GIF using the mandatory 2-pass palette workflow.
Single-pass GIF always produces banding and color artifacts. The palettegen → paletteuse pipeline analyzes the actual clip to build an optimal 256-color palette, then renders with it. Never skip this.
Ask for any not already provided in the request:
0480px; height auto-calculated to preserve aspect ratio15; higher = smoother + larger fileIf the user asks about aspect ratio or the source has unusual dimensions, probe first:
ffprobe -v quiet -print_format json -show_streams "$INPUT" | \
python3 -c "import json,sys; s=[s for s in json.load(sys.stdin)['streams'] if s['codec_type']=='video'][0]; print(s['width'], 'x', s['height'])"
Pass 1 — generate optimized palette:
ffmpeg -ss $START -t $DURATION -i "$INPUT" \
-vf "fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen=stats_mode=full" \
/tmp/palette_$$.png -y
Pass 2 — render GIF using palette:
ffmpeg -ss $START -t $DURATION -i "$INPUT" -i /tmp/palette_$$.png \
-lavfi "fps=$FPS,scale=$WIDTH:-1:flags=lanczos [x]; [x][1:v] paletteuse=dither=bayer:bayer_scale=5" \
"$OUTPUT" -y
Use $$ (shell PID) in the palette temp path to avoid collisions with concurrent runs.
Show the full 2-pass command and estimated output path. Add a size warning if duration × fps is large (rough heuristic: >20s at 15fps at 480px → likely >10MB).
rm -f /tmp/palette_$$.png
Report output path and file size.
stats_mode=full on palettegen analyzes the entire clip — not just the first frame — for better palette coverage across motion.dither=bayer:bayer_scale=5 is the sweet spot for photographic content. Use dither=none for flat-color content (illustrations, slides, screen recordings with solid backgrounds).-ss placed before -i uses container-level fast seek. Apply to both passes for consistent start points and dramatically faster seeks on long source files.flags=lanczos on scale gives sharper downsampling than the default bilinear.-loop $N to pass 2: 0 = infinite, 1 = play once, 2 = play twice.npx claudepluginhub gupsammy/claudest --plugin claude-contentConverts webm/mp4 videos to optimized GIFs using ffmpeg with quality presets like palette generation and dithering. For demo animations from recordings.
Converts image sequence folders or sprite sheets to GIF animations with custom FPS, grid layouts (e.g., 4x4), looping, and auto-compression to size limits like 950KB for WeChat stickers.
Converts AI-generated videos into image frame sequences for scroll-based web animations. Recommends EZGif workflow and provides frame settings by use case.