gif
Skill4 starsChanged 2 months agoMITView on GitHub
Make small looping animated GIFs - square 16x16, 32x32, 64x64 or 128x128, transparent or on a solid background, up to 3 seconds. Generates the frames through the delegate skill on plan allowance (free) and assembles them locally, or assembles frames and sprite sheets you already have. Use when the user asks for a GIF, an animated icon, sprite, loader, spinner, emoji, favicon, pixel-art animation, or wants stills turned into a looping animation.
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 44
Not N separate calls: image quota is small and daily, and a model that draws every frame in one picture keeps the subject consistent, while …
- Very specific: line 63
Ask before --paid. The free paths cost nothing.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
GIF
Two steps, and only the first one costs anything: generate frames with delegate.sh image
(Antigravity or Codex plan allowance, free), then assemble them locally with gif.sh, which owns
everything the GIF format constrains — 1-bit alpha, 10ms delay quantum, one shared palette, frame
disposal.
Quick start
gif.sh make "a coin spinning end over end" coin.gif # 32x32, transparent, 1s, loops forever
gif.sh make "a bouncing ball" ball.gif --size 64 --duration 2 --frames 12
gif.sh make "a loading spinner" spin.gif --bg '#111827' # opaque instead of transparent
gif.sh frames out.gif ./my-frames --size 128 # frames you already have (dir or files)
gif.sh sheet sprites.png out.gif --cols 6 # slice an existing sprite sheet
gif.sh probe out.gif # what the file actually contains
gif.sh check # dependenciesDefaults: 32x32, transparent, 1.0s, 8 frames, loops forever. Sizes are restricted to 16 / 32 / 64 / 128 and duration to 3s; both fail loudly rather than silently rounding.
| Flag | Default | |
--size 16|32|64|128 | 32 | square, no other sizes |
--frames N | 8 | one image call either way — they come from one sprite sheet |
--duration SEC | 1 | max 3 |
--loop N | 0 | 0 = forever, N = that many times |
--opaque / --bg COLOR | transparent | --bg implies opaque |
--colors N | 64 | palette size, 2–256 |
--style "..." | pixel art | replaces the style sentence in the prompt |
--keep-frames DIR | — | keep the sheet and cut frames to inspect or re-cut |
--matte COLOR|none, --fuzz PCT | #FF00FF, 18 | backdrop keyed out to transparency |
--no-trim, --filter, --per-frame, --paid | see REFERENCE.md |
How the frames are made
One image call produces a horizontal sprite sheet of all N frames, which gif.sh then cuts up.
Not N separate calls: image quota is small and daily, and a model that draws every frame in one
picture keeps the subject consistent, while one asked for "frame 3 of 8" redraws it from scratch.
--per-frame exists for the rare case where a sheet fails, and is worse at consistency.
The model cannot output transparency, so the prompt asks for a flat magenta #FF00FF backdrop and
gif.sh keys it out. That is why a magenta subject needs --matte changed to another color.
Working with it
Look at the result before reporting it done. gif.sh probe prints size, frame count, real
duration, loop flag and whether transparency survived; that catches a broken file, not a bad
animation. For the animation itself, view the frames — pass --keep-frames and read the PNGs.
The sheet is the part that fails. A model may draw 7 frames instead of 8, or pad the row unevenly,
and the cut then lands mid-subject. gif.sh warns when the sheet aspect ratio is far from what the
frame count implies, but it cannot see misalignment — you can. When it happens: re-cut the kept sheet with
gif.sh sheet sheet.png out.gif --cols <what the sheet actually has> rather than regenerating and
spending quota again.
Ask before --paid. The free paths cost nothing; OpenRouter spends real credit.
Detail on the pipeline, the tiny-size rules and every failure mode is in
REFERENCE.md. Needs python3 + Pillow, and delegate.sh on PATH for generation
(assembling your own frames does not need it).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

