Install
$ agentstack add skill-agricidaniel-claude-gif-claude-gif-optimize ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
claude-gif-optimize -- GIF Size Optimization
Multi-strategy GIF optimizer that iteratively reduces file size while preserving visual quality. Targets specific platform size limits or custom byte budgets.
Pipeline Overview
Analyze GIF --> Choose Strategy --> Apply --> Check Size --> Iterate if Needed --> Report
Step-by-Step Procedure
1. Read Reference
Before optimizing:
Read ~/.claude/skills/claude-gif/references/gif-optimization.md
Read ~/.claude/skills/claude-gif/references/platform-specs.md
2. Analyze Current GIF
# File size
stat -c%s INPUT.gif
# Frame count, dimensions, duration
ffprobe -v error -show_entries stream=width,height,nb_frames,r_frame_rate,duration \
-show_entries format=duration,size -of json INPUT.gif
# Detailed frame info
gifsicle --info INPUT.gif | head -20
Record baseline: file size, dimensions (WxH), frame count, duration, FPS.
3. Determine Target
Platform auto-detection (from user's words):
| User Says | Target Size | Preset | |-----------|------------|--------| | "for Discord", "Discord" | 256 KB | discord | | "Discord Nitro" | 50 MB | (custom) | | "for Slack" | 500 KB | slack | | "for Twitter", "for X" | 15 MB | twitter | | "for Reddit" | 20 MB | (custom) | | "for GitHub", "README gif" | 10 MB | (custom) | | "for email" | 1 MB | (custom) | | "for web", "website" | 2 MB | web | | "small as possible" | minimize | aggressive | | Specific number (e.g., "under 1MB") | parse number | custom |
4. Optimization Chain
Apply strategies in order from least to most destructive. Stop when target size is reached.
Strategy 1: Gifsicle Lossless Optimization
gifsicle -O3 --no-comments --no-names INPUT.gif -o OPTIMIZED.gif
Typical savings: 5-15%. Always apply first.
Strategy 2: Gifsicle Lossy Compression
gifsicle -O3 --lossy=30 INPUT.gif -o OPTIMIZED.gif # Light (barely visible)
gifsicle -O3 --lossy=80 INPUT.gif -o OPTIMIZED.gif # Medium (some artifacts)
gifsicle -O3 --lossy=150 INPUT.gif -o OPTIMIZED.gif # Heavy (visible artifacts)
gifsicle -O3 --lossy=200 INPUT.gif -o OPTIMIZED.gif # Maximum (significant artifacts)
Start with --lossy=30, increase by 30 until target is met. Typical savings: 10-40% depending on level.
Strategy 3: Color Reduction
gifsicle --colors 192 -O3 INPUT.gif -o OPTIMIZED.gif # Slight reduction
gifsicle --colors 128 -O3 INPUT.gif -o OPTIMIZED.gif # Moderate
gifsicle --colors 64 -O3 INPUT.gif -o OPTIMIZED.gif # Significant
gifsicle --colors 32 -O3 INPUT.gif -o OPTIMIZED.gif # Heavy (posterization)
Typical savings: 10-30%. Works best on GIFs with many similar colors.
Strategy 4: Dimension Reduction
Re-encode at smaller dimensions via FFmpeg two-pass:
bash ~/.claude/skills/claude-gif/scripts/gif_convert.sh \
--input INPUT.gif \
--width NEW_WIDTH \
--fps ORIGINAL_FPS \
--output OPTIMIZED.gif \
-y
Dimension scaling guide:
- Current 640px --> 480px (43% fewer pixels)
- Current 480px --> 320px (56% fewer pixels)
- Current 320px --> 240px (44% fewer pixels)
- Each step roughly halves file size.
Strategy 5: Frame Rate Reduction
Re-encode with lower FPS:
bash ~/.claude/skills/claude-gif/scripts/gif_convert.sh \
--input INPUT.gif \
--fps NEW_FPS \
--width CURRENT_WIDTH \
--output OPTIMIZED.gif \
-y
Frame rate reduction guide:
- 20fps --> 15fps (25% fewer frames)
- 15fps --> 10fps (33% fewer frames)
- 10fps --> 8fps (20% fewer frames)
- Below 8fps looks noticeably choppy.
Strategy 6: Frame Dropping (gifsicle)
Remove every Nth frame:
# Keep only even-numbered frames (drops 50%)
gifsicle INPUT.gif --unoptimize $(seq -f '#%g' 0 2 $(gifsicle --info INPUT.gif | grep -oP '\d+ images' | grep -oP '\d+')) -O3 -o OPTIMIZED.gif
Use sparingly -- creates uneven timing.
Strategy 7: Dither Change (Re-encode)
Switch dithering algorithm for smaller output:
bash ~/.claude/skills/claude-gif/scripts/gif_convert.sh \
--input INPUT.gif \
--dither "bayer:bayer_scale=3" \
--stats-mode diff \
--width CURRENT_WIDTH \
--fps CURRENT_FPS \
--output OPTIMIZED.gif \
-y
bayer + diff mode often produces smaller files than floyd_steinberg + full.
5. Automated Optimization Script
For automated multi-strategy optimization:
~/.video-skill/bin/python3 ~/.claude/skills/claude-gif/scripts/gif_optimize.py \
--input INPUT.gif \
--target-size 256 \
--output ~/Documents/gif_output/optimized.gif
The script applies strategies in order, checking size after each step.
6. Before/After Report
Always report results:
Optimization Report
-------------------
Original: 1,245 KB (640x360, 60 frames, 20fps, 3.0s)
Optimized: 248 KB (320x180, 40 frames, 13fps, 3.0s)
Reduction: 80.1%
Applied strategies:
1. Gifsicle -O3 --lossy=30 --> 1,058 KB (-15%)
2. Colors 128 --> 892 KB (-16%)
3. Dimensions 640->320 --> 312 KB (-65%)
4. Gifsicle --lossy=80 --> 248 KB (-21%)
Target: Discord (256 KB) -- PASS
Platform Auto-Fit Algorithm
When targeting a specific platform:
1. Apply gifsicle -O3 --lossy=30
2. If still over target:
a. Reduce colors to 128
3. If still over target:
b. Reduce width by one step (640->480->320->240)
4. If still over target:
c. Increase lossy to 80
5. If still over target:
d. Reduce FPS by one step (20->15->10->8)
6. If still over target:
e. Increase lossy to 150, colors to 64
7. If still over target:
f. Reduce width by another step
8. If still over target after all steps:
Report failure, suggest shorter duration or different content
Quality Floor
Never go below these minimums (the GIF becomes unusable):
- Width: 160px
- FPS: 6
- Colors: 16
- Lossy: 200
If the target cannot be reached without going below quality floor, inform the user and suggest trimming the duration or splitting into multiple GIFs.
Error Handling
| Error | Cause | Fix | |-------|-------|-----| | gifsicle: no such file | gifsicle not installed | sudo apt install gifsicle | | Output larger than input | Re-encoding added overhead | Use gifsicle-only optimization (no FFmpeg) | | Visible banding | Too few colors | Increase colors, switch to floyd_steinberg dither | | Flickering frames | lossy too aggressive | Reduce lossy value | | Still too large | Content inherently complex | Suggest shorter duration, smaller dimensions, or video format instead |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: AgriciDaniel
- Source: AgriciDaniel/claude-gif
- License: MIT
- Homepage: https://agricidaniel.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.