What This Tool Does
Stitch any number of still images into a single animated GIF. Choose the frame order, frame delay (in milliseconds), output size, looping behavior, and quality. Builds in your browser using the open-source gif.js library — your photos are never uploaded.
Animated GIF Maker
Combine images into an animated GIF — drag to reorder, click × to remove.
Drop images here, or click to choose
Add as many as you like. JPG, PNG, WebP supported.
Inputs Explained
- Frame delay: milliseconds each frame stays on screen. 100 ms = 10 fps.
- Width / Height: output canvas size. Set one to 0 to keep aspect ratio.
- Quality: 1 is best (slowest), 10 is balanced, 30 is fastest with more dithering.
- Loop: Forever (default), once, or a fixed number of cycles.
How It Works
Each input image is drawn onto a canvas at the chosen output size, then handed to the gif.js encoder running inside a Web Worker. The worker quantizes each frame to the GIF 256-color palette using the NeuQuant algorithm and assembles them into a single LZW-compressed GIF89a file.
Step-by-Step Example
- Drop 5 photos onto the dropzone.
- Drag thumbnails to reorder them.
- Set delay 250 ms, width 480, quality 10, loop Forever.
- Click Build GIF → preview appears with a Download link.
Use Cases
- Social media: turn a burst of photos into a shareable animation.
- Documentation: create simple step-by-step screen recordings without video.
- Presentations: animate logos, charts, or product photos.
- Memes: assemble reaction GIFs from frames you already have.
Assumptions and Limitations
- GIF supports a 256-color palette per frame, so photographic content may show banding.
- Encoding 50+ high-resolution frames can take 20-60 seconds on slower machines.
- Only static input images are accepted — for video-to-GIF use a desktop tool such as ffmpeg.
Frequently Asked Questions
How do I create a GIF from images online?
Four steps and it's done. Open the GIF Maker, drop in your images - JPG, PNG or WebP all work. Drag them into the order you want, since the file picker doesn't always keep your sequence. Set frame delay (try 100ms for smooth motion) and pick output dimensions, usually 480px or 600px wide so the file stays reasonable. Hit Build, wait a couple of seconds while the browser stitches everything together using a JavaScript GIF encoder, then download. No server upload involved - the whole thing runs locally in your tab.
What frame delay should I use for a smooth GIF?
Frame delay is just the inverse of frame rate. 100ms per frame gives you 10 fps, which feels reasonably smooth for most short loops - quick UI demos, expression changes, that kind of thing. Drop to 50ms for 20 fps if you need really fluid motion, but file size jumps fast. 200ms per frame is 5 fps, acceptable for slideshows and step-by-step product images. Anything slower than 300ms starts feeling like a stutter. Test it with a 5-frame sample first before committing to a 50-frame export at the wrong speed.
Why is my GIF file size so large?
Three things drive GIF size. First, the format is locked to a 256-color palette per frame, but it stores each frame essentially as a near-full image, not the compact codec you get with MP4. Second, dimensions multiply costs fast: a 1080px GIF can be ten times the size of a 480px version. Third, frame count - 60 frames is six times heavier than 10. Cut dimensions to 480 or 600 wide, drop frame rate to 8-10 fps, trim unnecessary frames, and you'll often land at a fraction of the original. For real motion, MP4 is just better.
Can I make an animated GIF without uploading images?
Yes, and that's exactly how the tool works. Everything runs through the browser's Canvas API and a JavaScript GIF encoder library. The images you drop in are read into memory, drawn onto a canvas, and stitched into the GIF locally. Nothing gets POSTed to any server, nothing hits a log file. You can verify by opening DevTools Network tab while you build - no outgoing image traffic. That's the privacy-friendly part, and it also means the tool keeps working offline once the page is cached.
What image formats can be used to make a GIF?
JPG, PNG and WebP work cleanly across every modern browser - the canvas can decode all three, so they slot into the encoder without any pre-conversion. HEIC is the awkward one. Safari handles it natively because Apple built decoder support in, but Chrome and Firefox usually can't read it without extra libraries. If your team is on iPhones, ask them to either change their camera setting to Most Compatible so it shoots JPEG, or convert HEIC to JPG first. Mixing formats in one GIF is fine as long as each file decodes.
How many frames should a GIF have?
Keep it lean. For a UI loop or a quick reaction, 10-20 frames at 10fps gives you a solid one to two second loop and a manageable file size. Go above 50 frames and the size starts climbing into multi-megabyte territory fast. Browsers can stutter, mobile users get frustrated. If you genuinely need 60+ frames at smooth motion, you're really asking for a video. Use MP4 or WebM instead, embed it with autoplay loop muted, and you'll get smoother playback at maybe a tenth of the file size.
How do I loop a GIF forever?
The GIF format has a Netscape extension block that controls loop count. Set it to 0 - that means infinite loop, which sounds backwards but it's the spec. Most online makers expose this as a dropdown: Forever, Once, or a fixed count like 3 or 5. Pick Forever for hero animations, social posts and reaction GIFs - that's what people expect. Pick Once for tutorials where you don't want it spinning forever in the background. Fixed counts are rare in practice. Once exported, every browser and image viewer respects the loop setting.
Can I turn a photo sequence into a GIF?
Absolutely - that's the textbook use case. Drop the sequence in, make sure the order is right (drag-reorder if the picker scrambles things, or rename files 01, 02, 03 before upload). Set every photo to the same output dimensions, otherwise the encoder either crops or letterboxes and your loop looks jittery. Pick a frame delay that matches the original capture interval - if you shot one photo per second, 1000ms keeps the timing real. For burst-mode shots, 100-150ms feels natural. Build, preview, tweak the delay if it's off, and export.
Sources and References
- GIF89a Specification — official format spec
- gif.js — MIT-licensed encoder library used here