| Crates.io | gifmeta |
| lib.rs | gifmeta |
| version | 0.4.1 |
| created_at | 2025-06-13 11:56:16.828394+00 |
| updated_at | 2025-06-25 14:05:07.557851+00 |
| description | A sacred tool for inspecting and editing GIF metadata from the command line. |
| homepage | https://sacred-ai.com/about/gifmeta |
| repository | https://github.com/madspaaskesen/gifmeta |
| max_upload_size | |
| id | 1711366 |
| size | 1,420,629 |
gifmeta is a small, focused tool for inspecting and modifying GIF metadata.
Itβs designed for developers, artists, and anyone needing loop control and timing tweaks β fast and reliably.
β€οΈ Built with Rust. Sacredly simple. Zero bloat.
Because changing loop count or frame delays in GIFs was a pain.
Most tools were too heavy, too raw, or lacked reliable preview/testing.
gifmeta was born to fix that β with precise CLI commands, minimalism, and full test coverage.
--loop-count)--delay)--delays 1=30,4=60)--json)run-visual-preview.shYou can β and should, if you need full encoding pipelines.
But gifmeta wraps just the things most of us need quickly:
gifmeta lives in a small, useful space β metadata tuning and clarity. Nothing more.
GIFs are still everywhere β especially in messaging, memes, and UI loaders. But modifying timing or loop behavior often requires heavy tools.
gifmeta lets you do it instantly, with:
Install via crates.io!:
cargo install gifmeta
Or use directly with:
cargo run -- <command>
Install via GitHub
git clone https://github.com/madspaaskesen/gifmeta.git
cd gifmeta
cargo build --release
./target/release/gifmeta --help
Absolutely. Hereβs a clean and helpful section you can add to your README.md under the Installation section:
Download the binary for your platform from the latest release.
If you see a warning when trying to run gifmeta, macOS may have quarantined the file because it's unsigned.
To allow execution:
xattr -d com.apple.quarantine gifmeta
chmod +x gifmeta
Then run it with:
./gifmeta info yourfile.gif
You only need to do this once per download. After this,
gifmetawill run normally.
Let me know if you want the same clarity for Windows (e.g., SmartScreen warnings) or Linux permissions π
--json: Get output in json formatYou can combine any of the following:
--loop-count <n>: Set loop behavior (0 = infinite, 1 = once, 2 = twiceβ¦)--delay <n>: Set same delay for all frames. Unit is centiseconds (1 = 10ms).--delays <csv>: Override specific frames. Format: 1=15,3=50 (in centiseconds).gifmeta info --input tests/testdata/loop/10frame-rainbow.gif
gifmeta info --input tests/testdata/loop/10frame-rainbow.gif --json
gifmeta mod --input tests/testdata/loop/loop-once.gif --loop-count 10 --output tests/testdata/loop/loop-once-modified.gif
gifmeta mod --input tests/testdata/timing/zero-delay.gif --delay 10 --output tests/testdata/timing/zero-delay-modified.gif
gifmeta mod --input tests/testdata/timing/zero-delay.gif --delays "0=1,1=20" --output tests/testdata/timing/zero-delay-modified2.gif
gifmeta mod --input tests/testdata/timing/zero-delay.gif --delay 15 --delays "0=2,1=20" --output tests/testdata/timing/zero-delay-modified3.gif
gifmeta mod --input tests/testdata/timing/zero-delay.gif --loop-count 0 --delay 15 --delays "0=2,1=20" --output tests/testdata/timing/zero-delay-modified4.gif
You can now extract a specific frame from any GIF and output it as a PNG image β either as a file or directly as base64 for web previews:
gifmeta preview --input path/to/input.gif --frame 0 --output frame0.png
gifmeta preview --input path/to/input.gif --frame 3 --as-base64
If
--frameis omitted, it defaults to the first frame (0). You must specify either--as-base64or--output.
| Command | Description |
|---|---|
info |
Display GIF metadata (dimensions, loop, delays) |
mod |
Apply metadata modifications (loop/delays/output) |
preview |
Extract a single frame as PNG (file or base64) |
You can run:
./run-visual-preview.sh
It will:
tests/visual/report.htmlThis is useful for testing transparency, timing, or human-visible playback changes.
clap v4β οΈ Batch processing and WASM are intentionally skipped.
These are best handled externally with scripting or shell tooling.
Wanna help? Fork, clone, and PRs welcome. You can also suggest Codex tasks or open issues π
MIT β do good things with it.
Built by Mads Paaskesen with Rust and a soft spot for retro formats.