The GIF Maker has two functions, switched with the two buttons at the top. 'Compose images into GIF' combines several images, in order, into a looping animation, with a frame interval, an output width and a few size presets. 'Adjust speed of existing GIF' slows down or speeds up a GIF you already have, from 0.25x to 4x. It cannot capture frames from a video, and it does not crop, add text or compress to a target file size. One point deserves emphasis: composing runs fully on your device, whereas the speed feature has to download a roughly 25-30MB video-processing core from an outside server (unpkg.com) the first time you use it. Details are below.
How to use it: composing a GIF
- Make sure 'Compose images into GIF' is selected. Click 'Click to select multiple images (animated GIFs are split into frames)' and choose at least 2 images. They become frames in the order you select them, and you can add more later; new ones are appended at the end. If you pick an animated GIF it is expanded into one thumbnail per frame (composited with the GIF's own disposal rules, transparency kept), and each frame carries the delay stored in the GIF, shown in its number box; you can still edit it, clear it (to use the global interval) or reorder the frames. There is a limit of 200 frames in total, extra frames are ignored and the page shows 'The 200-frame limit was reached; extra frames were ignored.'; while expanding it shows 'Reading images and expanding GIF frames…'. A GIF with a single frame is treated as an ordinary image.
- The number at the bottom left of each thumbnail is its frame number, and the cross at the top right removes that frame. Below each thumbnail, two small arrow buttons move that frame one place earlier or later, and the number box under them is that frame's own delay in milliseconds; leave it empty to use the global 'Frame interval' (the grey placeholder shows the current global value).
- Optionally click a template to fill in the width and frame interval together: WeChat sticker (width 240, 150 ms), QQ sticker (200, 150), Discord custom emoji (128, 150), Social media GIF (480, 200), Fast comedic loop (320, 100) or Slow-motion demo (480, 500). A template only presets those two numbers; it does not check the file size against any platform's rules.
- Use the 'Background' drop-down to choose 'White' (default; transparent areas are filled with white) or 'Transparent' (keeps transparency). GIF transparency is on/off only: pixels under 50% opacity become transparent and the rest opaque, so soft edges look jagged; transparency is only enabled when the picture really contains transparent pixels.
- You can also drag the 'Frame interval' slider (50 to 2000 ms in steps of 50) and the 'Output width' slider (120 to 720 px in steps of 20). Frames without their own delay use this global value.
- Click 'Generate GIF'. The button shows 'Generating… and a percentage'. When it finishes a preview appears; click 'Download GIF' to save it as animation.gif. With fewer than 2 images you will see 'At least 2 images are needed to generate a GIF'.
How to use it: adjusting speed
- Click 'Adjust speed of existing GIF' at the top. A notice tells you the first use needs to download a core of about 25-30MB.
- Click 'Click to upload a GIF' to choose a GIF file, then drag the 'Playback speed' slider (0.25x to 4x in steps of 0.25; below 1x is slower, above 1x is faster).
- Click 'Adjust speed'. The button shows 'Processing…'. When it is done a preview appears, and 'Download result' saves a file named like speed_2x.gif. If it fails you will see 'Processing failed. Please make sure you uploaded a valid GIF file, or try again.'
A usage scenario
To make a four-step tutorial animation, select the four screenshots in step order, click the 'Slow-motion demo' template (width 480, interval 500 ms) so each step stays on screen for half a second, then generate and check the preview. If the pace feels too slow, drag the 'Frame interval' slider left (frames with their own delay are unaffected) and generate again. For a chat sticker, choose the 'WeChat sticker' template and check that the preview is still legible. No specific file size or compression result is claimed here: the final size depends on your images and the number of frames, so go by the size of the downloaded file.
What it supports and where it stops
- When composing, the output size follows the first image's proportions: the width is your setting and the height is calculated from the first image's aspect ratio. Images with other proportions are scaled to cover the frame and cropped from the centre, so their edges can be cut off.
- Transparent areas are filled with white by default; set 'Background' to 'Transparent' to keep transparency, but GIF only has fully transparent or fully opaque pixels, so soft edges look jagged, and in rare cases a colour very close to the transparency key colour could be mistaken for transparent. Animated GIF inputs are expanded into frames, capped at 200 in total (extra frames are ignored); very large animations use a lot of memory while expanding.
- You can reorder frames with the arrows under each thumbnail and give a frame its own delay (empty means the global interval); drag-and-drop reordering is not supported. The animation loops forever, with no option for a loop count.
- Colours are reduced to a GIF palette with a fixed quality setting, so gradients and photos can show banding or grain. That is a limit of the GIF format itself.
- The speed feature relies on a WebAssembly build of FFmpeg. On first use it downloads roughly 25-30MB from unpkg.com, and it fails if you are offline or the network blocks that host. Your GIF is not uploaded, but that download is a real network request.
- A speed-adjusted GIF is re-encoded by FFmpeg, so its size and colours may differ from the original. At high multipliers, browsers may enforce a minimum delay for very short frames, so playback does not always match the chosen multiplier exactly.
- Many large images take more memory and time. If generation fails you only see 'Generation failed, please try again' with no indication of which image caused it. If one image is in a format your browser can't decode (some HEIC photos, for example), the whole run fails; convert it to JPG or PNG first.
- There is no video-to-GIF, text overlay, target-size compression or cropping.
FAQ: Are my images uploaded when I compose?
No. Composing uses the gif.js library bundled with this site and runs in your browser, so the images are not sent to a server. When adjusting speed, your GIF is also processed locally and not uploaded, but the processing core must first be downloaded from an outside host the first time.
FAQ: Why is part of my picture cropped in the GIF?
The output proportions come from the first image, and any image with a different shape is scaled to fill the frame and cropped around the centre. To avoid cropping, use images with the same aspect ratio, or put the image with the best proportions first.
FAQ: Are the template numbers official platform rules?
No. They are reference values (width plus frame interval) for common uses. Platforms can change their size and file-size limits, and the tool does not check your file against them. Before uploading to a platform, follow that platform's current requirements.
FAQ: What if speed adjustment seems stuck?
The first run downloads a large file, so a slow connection means a long wait. If nothing happens for a long time or you get a failure message, check that your network can reach unpkg.com, reload the page and try again. If the GIF is very large, shrink it before processing.
Privacy and processing
Composing happens entirely in your browser and creates no network requests involving your images. The speed feature downloads FFmpeg's processing core from unpkg.com on first use (a request to an outside server that does not include your file), and then processes your GIF locally. Results exist only in your browser's memory and vanish when you close or reload the page, so download them promptly.