plugins/claude-content/skills/make-gif/SKILL.md
This skill should be used when the user asks to "make a GIF", "convert to GIF", "create a GIF from this video", "export as GIF", "turn this clip into a GIF", "make an animated GIF", or "gif this".
npx skillsauth add gupsammy/claudest make-gifInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.tools
This skill should be used when the user asks to "design a CLI", "help me design command-line flags", "what flags should my tool have", "create a CLI spec", "refactor my CLI interface", "design a CLI my agent can call", or wants to design command-line UX (args/flags/subcommands/help/output/errors/config) before implementation or audit an existing CLI surface for consistency and composability.
testing
Recall, search, continue, or analyze past conversations. Triggers on recall phrases ("what did we discuss", "continue where we left off", "we decided"), retrospective phrases ("do a retro", "post-mortem", "what went well", "lessons learned", "find antipatterns"), and implicit signals (past-tense references, possessives without context, assumptive questions like "do you remember").
data-ai
Persist learnings to memory or maintain existing memories. Triggers on "extract learnings", "save this for next time", "remember this pattern", "consolidate memories", "dream", "clean up memories".
development
Use for any image creation or editing request — logo, sticker, product mockup, nano banana, t2i, i2i, multi-reference compositing via generate.py. Not for HTML/CSS mockups, diagrams, or coded UI.