Skip to main content
L
Loopaloo
Buy Us a Coffee
All ToolsImage ProcessingAudio ProcessingVideo ProcessingDocument & TextPDF ToolsCSV & Data AnalysisConverters & EncodersWeb ToolsMath & ScienceGames
Guides & BlogAboutContact
Buy Us a Coffee
L
Loopaloo

Free online tools for developers, designers, and content creators. Your files are processed in your browser and are never uploaded - no accounts required. A few network utilities (like What's My IP and Currency Converter) call public APIs to do their job and say so on their pages.

support@loopaloo.com

Tool Categories

  • Image Tools
  • Audio Tools
  • Video Tools
  • Document & Text
  • PDF Tools
  • CSV & Data
  • Converters
  • Web Tools
  • Math & Science
  • Games

Company

  • About Us
  • Contact
  • Blog
  • FAQ

Legal

  • Privacy Policy
  • Terms of Service
  • Disclaimer

Support

Buy Us a Coffee

© 2026 Loopaloo. All rights reserved. Built with privacy in mind.

Privacy|Terms|Disclaimer
  1. Home
  2. Image Processing
  3. GIF Maker - Create Animated GIFs from Images
Add to favorites

GIF Maker - Create Animated GIFs from Images

Build an animated GIF89a written from the specification and read back before download, so the frame count, the delays, the loop count and the palette size are reported from the finished file rather than from the request.

Edits stay in your browserMore image processingJump to full guide

Related reading

  • Creating GIFs from Videos: Techniques and Best Practices11 min read

Initializing in your browser…

You might also like

Video to GIF Converter - Create Animated GIFs Online

Convert a video clip to an animated GIF with a palette built from your own frames, four dithering modes each labelled with its measured size cost, a loop count that really reaches the file, and frame rates marked for whether a GIF can hold them exactly.

Meme Generator

Caption a picture with text that is measured, wrapped and kept inside the frame. The preview canvas is the exported file, pixel for pixel.

Image Collage Maker

Arrange photos in one of twelve templates whose every cell rectangle, gap, margin and radius is stated in the output's own pixels before anything is drawn.

GIF Maker - Create Animated GIFs from Images: a worked example

Four 120 by 90 images, each asked to show for 100 ms, looping forever.

Input

frame1..4.png · 100 ms each · loop forever
What GIF Maker - Create Animated GIFs from Images produces

What the file actually contains

                     through ffmpeg    written here
frames               5                 4
delays (ms)          120 80 120 80 40  100 100 100 100
loop                 0                 0
64 colours asked     256 in the file   64 in the file
time to produce      never finished    about 1 second

The concat demuxer needs the last file repeated to give it a duration, so four images become five frames, and it resamples the timing onto a constant frame rate, so a run of 100 ms frames is stored as 120, 80, 120, 80 and 40. Driven in a browser, the WebAssembly build did not return at all. A GIF is a container with an exact layout, so writing it directly makes the frame count the frame count and the delays the delays, and every figure above is read back out of the finished bytes.

What is GIF Maker - Create Animated GIFs from Images?

Build an animated GIF from images, with the container written from the GIF89a specification and read back before you download it. The frame count, the delays, the loop count and the palette size are all reported from the finished file, and the colour setting actually reaches the encoder.

How to use

  1. 1Drop in two or more images; they become frames in the order they are added and can be dragged to reorder
  2. 2Set a delay for all frames, or turn on per-frame delays and set them individually
  3. 3Choose a width and how many times it should loop, reading what each loop option writes into the file
  4. 4Pick a colour count; the panel counts the colours in the output so you can see what it cost
  5. 5Under advanced options, choose the palette method, the distance metric, dithering and whether unchanged pixels are skipped
  6. 6Download the GIF

Where this helps

  • A short animation from stills

    Frames in the order you choose, at the timing you choose, with the file confirming both.

  • A screen recording turned into frames

    Skipping unchanged pixels is worth the most here, because most of the screen does not move.

  • A small GIF for a chat or a README

    Drop the width and the colour count and watch the size, which is measured rather than estimated.

  • Checking what a GIF really contains

    The panel reports the frame count, delays, loop count and palette read back out of the finished bytes.

Key features

  • The GIF89a container written directly, so four images are four frames
  • Delays stored exactly where the format allows it, with the rounding named when it does not
  • The loop count labelled by what it does, because the NETSCAPE2.0 block holds ADDITIONAL plays
  • A colour setting that reaches the encoder, with the colours in the output counted afterwards
  • Three palette methods: frequency, Heckbert median cut and k-means in CIE Lab
  • Floyd and Steinberg dithering, with its cost in bytes shown
  • Unchanged pixels left transparent between frames, with the pixel count and the saving reported
  • The whole container read back with a parser that refuses a file it cannot walk
  • No encoder to download and nothing uploaded; a four frame animation takes about a second

Tips & best practices

  • Fewer colours is usually the biggest saving. A photograph at 32 colours is often a third the size of the same one at 256, and on flat graphics the difference is invisible.
  • Leave "skip unchanged pixels" on for anything with a still background. It costs nothing in quality, because the pixels it drops are identical to the ones already on screen.
  • Dither only when you can see banding. It makes files noticeably larger, because it adds exactly the kind of noise that LZW cannot compress.
  • Delays under about 20 ms are ignored by most browsers, which substitute 100 ms. The fastest animation a GIF can exactly express is 100 frames a second, and the fastest most browsers will run is about 50.
  • "Play twice" writes a loop count of 1, because the NETSCAPE block stores the number of ADDITIONAL plays. If you want it to run once and stop, that is loop count 0 with a single frame, or simply a still image.

Examples

  • A four frame animation

    Four images at 100 ms each: the file holds four frames at exactly 100 ms, looping forever, and the page reports all of it read back from the bytes. Through ffmpeg the same four images gave five frames at 120, 80, 120, 80 and 40 ms.

  • Making a photographic GIF smaller

    Drop to 32 colours and leave the unchanged-pixel skip on. The panel reports the palette size, the colours actually in the output, and how many pixels were skipped.

How it works

A GIF is a container with an exact layout, published in "Graphics Interchange Format Version 89a" (CompuServe, 1990), and everything a GIF tool claims is something the file either says or does not: how many frames it holds, the delay before each one, how many times it loops and how many colours are in its palette. This page writes that container directly and then READS IT BACK before handing it over, so all four of those are reported from the finished bytes rather than from the request.

The tool this replaces went through ffmpeg.wasm. Driven on four 120 by 90 frames it never returned at all: the progress bar reached 45 percent, which is the line immediately before the encoder is called, and stayed there for the whole 195 seconds it was watched. The same command run with a native ffmpeg does complete, and even then it does not produce what was asked for. The concat demuxer needs the last file repeated to give it a duration, so FOUR images became FIVE frames. And it resamples the timing onto a constant frame rate, so a run of four 100 ms frames came out of the file as 120, 80, 120, 80 and 40 ms. Writing the container directly means four images are four frames and 100 ms is 100 ms, both confirmed by an independent reader.

The colour setting is now real. In the old tool the number of colours appeared in exactly one place, a size estimate, while the encoder was hardcoded to 256; asking for 64 produced a 256-colour GIF. Here the palette is built from a census of every frame at once, by frequency, Heckbert median cut (SIGGRAPH 1982) or k-means in CIE Lab, and the page COUNTS the colours in its own output afterwards. Asking for 32, 64, 128 and 256 gives four different files, and the count in each is at most what was asked for. A GIF palette is a power of two from 2 to 256, which the page states rather than leaving to be discovered.

The delay is stored in hundredths of a second (section 23, the Graphic Control Extension), so 40, 50, 100, 200, 500 and 1000 ms are exact and 55 ms is not. Ask for 55 and the page says it stored 60 and that the difference is 5 ms, with the reason. The loop count lives in the NETSCAPE2.0 Application Extension and holds the number of ADDITIONAL plays, which is the field tools get backwards: the option that used to be called "Once" wrote a loop count of 1, which makes the animation play TWICE. The options are now labelled by what the file will do.

Two size controls are offered with their cost measured rather than described. Dithering is Floyd and Steinberg (1976), the 7/16, 3/16, 5/16, 1/16 kernel; it hides banding in a gradient and makes the file larger, because noise does not compress, which on a test photograph took 100.7 KB to 151.2 KB. Skipping unchanged pixels leaves anything identical to the frame before transparent so the frame below shows through; on the same pair it skipped 122,552 of 345,600 pixels and took 118.5 KB down to 100.7 KB. How "nearest colour" is measured is also a choice: CIE 1976 is the Euclidean distance in Lab and is what most encoders use, CIEDE2000 is the better model and about ten times slower, and the page names which one produced the file and how long it took.

Everything runs in this browser with no encoder to download, so a four-frame animation is ready in about a second rather than after a twelve megabyte WebAssembly fetch that may never finish.

Frequently asked questions

Why does my four image animation have four frames here and five somewhere else?

Because a video encoder needs the last frame repeated to give it a duration. Tools built on ffmpeg's concat demuxer add that repeat, so four images become five frames. Writing the GIF container directly means the frame count is the number of images, and the page reports what the file actually holds.

Why is my 55 ms delay stored as 60?

Because a GIF stores the delay in hundredths of a second, so it can hold 50 or 60 and nothing in between. The page says what it stored and by how much it differs from what you asked for. Every multiple of ten is exact.

What does the loop count mean?

The number of ADDITIONAL plays, in the NETSCAPE2.0 Application Extension. Zero means forever, which is why it is the usual setting. A loop count of 1 makes the animation play twice, not once, which is why the option here is labelled "Play twice".

Why can a GIF only have 256 colours?

Because the palette index is one byte, and the table size field in the Logical Screen Descriptor is three bits holding log2(size) minus one, so the size is a power of two up to 256. Anything you ask for is rounded up to the next power of two, and the page counts what really ended up in the file.

Should I turn dithering on?

Only if you can see banding in a gradient. It works by scattering the error into neighbouring pixels, which is noise, and noise is exactly what LZW cannot compress: on a test photograph at 64 colours it took the file from 100.7 KB to 151.2 KB.

What does "skip unchanged pixels" do?

A pixel identical to the one in the frame before is written as transparent, so what is already on screen shows through and the encoder has a long run to compress. On a two frame photographic test it skipped 122,552 of 345,600 pixels and took the file from 118.5 KB to 100.7 KB. It never changes what you see.

Related tools and how they differ

  • Image Color Palette Extractor: The same median cut and k-means, for choosing colours out of a single picture.
  • Image Resizer: The same six resampling filters, for one image rather than a set of frames.

Further reading

  • Creating GIFs from Videos: Techniques and Best Practices11 min read

Private by design

Images are decoded, edited, and exported entirely inside this browser tab. No originals, exports, or metadata are uploaded.