GIF maker
Turn a set of images into an animated GIF: natural filename ordering, custom frame delay and loop count, output edge scaling and palette size, all encoded locally with a from-scratch GIF89a writer.
Runs in your browserEvery computation happens in your browser — your data never leaves this device.
Images are turned into a GIF locally in your browser and never uploaded
Pick at least two images as animation frames — you can select several at once
Create GIF
Result
What this tool does
- Turn a burst of photos or a render sequence into an animated GIF: select several images, let natural filename ordering handle the rest (frame2.png before frame10.png).
- Control the pacing for demos and tutorials: frame delay in milliseconds, loop count 0 for endless playback, or a fixed number of repeats.
- Shrink the file before posting it to a chat or forum: cap the longest edge and lower the palette size to cut the output noticeably.
- Keep your assets off third-party servers — pixels are read through Canvas and the GIF89a file is encoded locally with a hand-written LZW writer.
Example
Input
3 solid-colour 8×8 images, 120 ms frame delay, loop 0 (forever), 4-colour palette
Output
Frames 3; canvas 8 × 8; palette 4 colours; output 126 B; file name animation-3f.gif
Reading image pixels needs the browser Canvas decoder, so these dimensions and sizes come from the encoder itself (GIF89a byte stream plus LZW). The palette is produced by median-cut quantization: fewer colours mean a smaller file and more visible banding.
Frequently asked questions
How is the frame order decided?
By natural filename order, so frame2.png comes before frame10.png instead of losing to lexicographic ordering. You can still move frames up and down in the list afterwards — just make sure the first frame is where the animation should start.
Why does the exported GIF show colour banding?
GIF allows at most 256 colours, and the tool quantizes every frame down to the palette size you pick using median cut. Photos and gradients band badly at low colour counts; raising it to 256 helps but grows the file, while flat illustrations hardly change at all.
Why does the playback speed not match my delay setting?
The GIF spec stores delays in hundredths of a second, so your value is rounded to a multiple of 10 ms. On top of that many browsers treat delays under 20 ms as 100 ms, which is why the tool clamps the range to 20–2000 ms.
Why was one of my images not recognised?
The tool reads pixels with the browser decoder, so only formats the browser itself supports (PNG, JPEG, WebP, GIF and friends) work. Files that cannot be decoded are skipped with a message instead of aborting the whole job.
Are my images uploaded, and where is the result stored?
Nothing is uploaded. Images are decoded, scaled, quantized and encoded inside your browser, and the resulting GIF is a local Blob that is only saved when you click download.
Keywords:gif 制作动图合成 gif帧动画gif makeranimated gifimage to gifframe animationlzwquantize