You have a few images โ screenshots, drawings, frames exported from a video or a design tool โ and want one animated GIF. GIFmeta turns them into a GIF in a few clicks or one command, on your own computer.
Before you start: all images must have the same width and height (for example 800 ร 600). PNG, JPEG and WebP all work, and you can mix them.
With the desktop app
- Open GIFmeta and click ๐ฌ New from images โ or simply drop the image files onto the window.
- The images appear in the frame list in the order you picked them. Drag the โ ฟ handle (or press Alt + โ/โ) to put them in the right order.
- Set the speed: each frame shows for 10 cs (100 ms) by default. Change one frame in the viewer, or all frames at once under โ๏ธ Settings โ Delay for all frames.
- Press โถ Play to preview the animation.
- Under Settings โ Loop, keep Loop forever or choose how many times it plays.
- Click ๐พ Create GIF, pick a file name, and click again to save. The new GIF opens right away so you can keep editing it โ insert more frames, duplicate one, or fine-tune timing.
With the command line
gifmeta create frame1.png frame2.png frame3.jpg -o animation.gif
The images become frames in the order you list them. Useful options:
# 200 ms per frame, but show the last frame for 2 seconds
gifmeta create intro.png step-*.png outro.png -o tutorial.gif --delay 20 --delays 5=200
# play three times instead of forever
gifmeta create a.png b.png -o once-more.gif --loop-count 3
Delays are in centiseconds (1 cs = 10 ms), so --delay 20 means 200 ms per frame.
Good to know
- Colours: a GIF frame can hold 256 colours. Images with โค 256 colours are stored exactly; photos and gradients are colour-reduced per frame (GIFmeta tells you which frames).
- Transparency: fully transparent pixels stay transparent, and each frame shows only its own image โ nothing from the previous frame shines through. Semi-transparent pixels are drawn opaque, because GIF has no partial transparency.
- Different sizes? Resize the images to the same size first. GIFmeta tells you exactly which files differ.
In Rust
use gifmeta::{create_gif, CreateOptions};
create_gif(&["a.png".into(), "b.png".into()], CreateOptions {
output: Some("out.gif".into()),
delay: Some(20),
..Default::default()
})?;