Skip to content

GIF maker — turn images into an animated GIF

Turn photos or frames into an animated GIF. Reorder them, set per-frame delays, preview it live, and export with no watermark or upload.

  • Runs in your browser
  • Files are never uploaded
  • Free, no account
Drop your images herePNG, JPEG, WebP, BMP — select them all at once, then drag to reorder.PNG, JPG, JPEG, WEBP, BMP, GIF, AVIF · up to 200 MB each
Frames are laid out and timed in this tab, then encoded by FFmpeg compiled to WebAssembly. Nothing is uploaded, there is no frame limit beyond your device’s memory, and the finished GIF carries no watermark.

First use downloads the 10 MB video engine from this site. After that it is cached and works offline. It is WebAssembly served by onthisdevice.com — never a third-party CDN — and your file is still processed entirely on your own device.

How to make a GIF from images

  1. Select every image at once — the file picker keeps them in filename order, which is usually the order you want.
  2. Drag the cards to reorder, or use the arrow buttons under each thumbnail if you are on a phone or working by keyboard.
  3. Set the output width. The height follows the first image’s aspect ratio unless you unlink it.
  4. Set the delay. 100 ms per frame is 10 fps and suits most slideshows; 40 ms is 25 fps and looks like video.
  5. Watch the live preview, then press Create GIF and download.

Frame delay, frame rate and what the format can actually store

GIF does not store a frame rate. It stores a delay per frame, in hundredths of a second, in a Graphic Control Extension block ahead of each image. That has three consequences worth knowing before you pick a number.

  • Timing is quantised to 10 ms. 33 ms — the natural delay for 30 fps — cannot be expressed, so it becomes 30 ms or 40 ms. Delays that divide cleanly into 100 give even playback: 100, 50, 40, 25 and 20 ms.
  • Very short delays are ignored. Every mainstream browser silently treats a delay of 0 or 1 centisecond as 100 ms, a rule inherited from Netscape in the 1990s and never removed. A "60 fps GIF" built with 0 ms delays plays at 10 fps everywhere.
  • Frames can hold for different lengths. Because the delay is per frame, a title card can sit for two seconds while the animation that follows runs at 40 ms. Each card here has its own delay box for exactly that.
Delay Frame rate Feels like
1000 ms1 fpsA slideshow with time to read each slide
500 ms2 fpsBefore-and-after comparisons
200 ms5 fpsStep-by-step instructions, stop motion
100 ms10 fpsThe default — smooth enough, half the frames of video
50 ms20 fpsScreen recordings and UI demos
40 ms25 fpsAs close to video as GIF gets sensibly

Why the palette matters more than anything else

Each GIF frame may reference at most 256 colours. Most tools solve that by mapping your images onto a generic web-safe table, which is why so many GIFs have grey-green skin and striped skies. This tool does it in two passes instead.

  1. palettegen scans every frame you added and builds a 256-entry palette from the colours your pictures actually contain.
  2. paletteuse maps each frame onto that custom palette with error-diffusion dithering, scattering the remaining quantisation error as fine noise rather than hard bands.

Reducing the palette below 256 is the cheapest size saving available, because the LZW compression GIF uses works far better on fewer distinct symbols. Screenshots, line art and flat illustrations often look identical at 64 colours and encode at half the size. Photographs need the full 256.

Choosing an output size

Size scales with area, so the width control is a lever with a squared effect: dropping 640 px to 480 px removes about 44% of the pixels, and dropping to 320 px removes 75%. Combine that with frame count — the other multiplier — and you have the whole size equation:

bytes ≈ width × height × frames × compression factor

A twelve-frame, 480 × 270 animation lands around 700 KB with a rich palette and around 300 KB with 64 colours. If you need it under a specific number, Compress GIF will search for the settings that fit.

Fitting images that are not the same shape

A GIF has one canvas for the entire animation, so mixed portrait and landscape sources have to be reconciled. Fit inside keeps every picture complete and fills the leftover space with the padding colour — the honest choice for product photos and screenshots. Fill the frame scales up until there are no gaps and crops what overflows, which suits faces and textures. Stretch distorts, and is almost never right.

When a GIF is the wrong format

For anything over about ten seconds, an MP4 or WebM will be five to twenty times smaller at better quality, because those codecs describe how a frame differs from the previous one while GIF stores every frame in full. Chat apps, wikis and social networks all play short muted videos inline now. Use GIF where the destination genuinely demands it — email signatures, some documentation systems, old forums, Slack and Discord emoji — and reach for the video converter otherwise.

Everything happens in this tab

Your images are decoded by the browser, drawn onto a canvas at the output size, and handed to FFmpeg compiled to WebAssembly. There is no upload, no queue, no daily export cap and no watermark, and the whole thing keeps working with the network switched off once the engine has been cached. That also means the practical limits are your own: 200 frames per session and whatever memory your device can spare.

Questions

Can each frame have a different delay?

Yes. Every frame card has its own delay box in milliseconds. The GIF format stores delays in hundredths of a second, so values are rounded to the nearest 10 ms and anything under 20 ms is raised — browsers treat sub-20 ms delays as 100 ms anyway.

My images are different sizes. What happens?

A GIF has one canvas size for the whole animation, so every frame is drawn onto the output size you set. Choose "fit inside" to keep each picture whole with padding, "fill the frame" to crop the overflow, or "stretch" to distort it to fit exactly.

Why is my GIF so much bigger than the source photos?

GIF stores every frame as a complete palettised image with no motion prediction, so size scales with width × height × frame count. Ten 1 MB JPEGs can easily become a 12 MB GIF. Halving the width cuts roughly 75% of the size, because area scales with the square.

How many images can I use?

The tool holds 200 frames at a time. That is a UI limit rather than a technical one — beyond a couple of hundred frames a GIF becomes so large that an MP4 is a better answer, and the browser needs to hold every decoded frame at once.

Is there a watermark?

No. There is no watermark, no signup, no export cap and no paid tier. The GIF is assembled by FFmpeg running inside your browser tab, so there is no server that could stamp anything onto it.