GIF Maker – Build an Animated GIF from Images in Your Browser
This GIF maker turns a set of still images, such as screenshots, photos, sprite frames or slides, into an animated GIF. Put the frames in order, choose how long each one stays on screen, preview the real timing, and download the file. Decoding, colour reduction and encoding all run in your browser, so your images never leave your device.
How an animated GIF is built
A GIF file is a short header followed by a list of images. Each image can carry a few extra details that turn a picture into an animation:
- Colour tables. Every pixel is an index into a palette of at most 256 colours. A global table can be shared by every frame, or each frame can bring its own local table, which costs up to 768 bytes per frame.
- Frame delay. The Graphic Control Extension stores how long a frame stays on screen, in hundredths of a second. A 125 ms request is stored as
13and plays as 130 ms. - Disposal method. This tells the viewer what to do with a frame before drawing the next one: leave it in place (
1) or clear it to the background (2). Leaving it in place lets later frames store only the pixels that changed. - The NETSCAPE2.0 loop block. This optional block holds the loop count.
0means loop forever. Leaving the block out means the GIF plays once.
Frame rate, delays and the 50 fps ceiling
Because delays are stored in hundredths of a second, the shortest useful delay is 20 ms, or 50 frames per second. Chrome, Firefox and Safari all play a delay of 10 ms or less as 100 ms, so a GIF set to "as fast as possible" often plays slower than a 20 ms one. Common video rates do not divide evenly: 24 fps (41.7 ms) is stored as 40 ms and plays at 25 fps. The timeline under the preview shows each frame as wide as its played delay, so a frame held for two seconds is easy to spot.
Colours, dithering and file size
When every frame uses 256 colours or fewer, such as pixel art, UI screenshots or flat graphics, the tool keeps the colours exactly and the GIF is lossless. Photos have far more colours, so a palette is built from a sample of every frame and each pixel is matched to the nearest entry. Ordered dithering adds a fixed fine pattern that hides banding and stays still from frame to frame. Floyd–Steinberg spreads each pixel's rounding error to its neighbours. It looks smoother on a single frame, but the noise moves between frames, so backgrounds shimmer and files grow.
GIF compresses each frame with LZW and has no motion compression, so size grows with the square of the width and with the number of frames. Halving the width cuts the pixel count by about 75%. Storing only changed pixels helps a lot with screen recordings, where most of the frame stays still. The bytes-per-frame chart shows which frames cost the most.
GIF compared with MP4 and animated WebP
For long or full-colour clips, MP4 and animated WebP are often five to ten times smaller than a GIF of the same content. Many social platforms quietly convert uploaded GIFs to video for this reason. GIF is still the format that plays everywhere without a video player: in email, chat apps, README files, issue trackers and older software. That makes it a good fit for short loops, reaction images and product demos.
Accessibility: flashing, motion and alt text
WCAG 2.3.1 asks that content not flash more than three times in any one-second period, because fast flashing can trigger seizures in people with photosensitive epilepsy. The tool runs a rough brightness check on the preview and warns when a sequence looks risky. It is a heuristic, not a compliance test, and it does not detect red flashes. The preview starts paused when your system asks for reduced motion. When you publish a GIF, give it alt text that describes what happens in it, for example alt="Dragging a file onto the upload area", not just "animation".
Credits
Encoding uses gifenc by Matt DesLauriers (MIT licence), loaded the first time you create a GIF. Palette matching, dithering and frame differencing are this site's own code and also run in your browser.