GIF Splitter

Take an animated GIF apart into a numbered set of PNG stills, one per frame.

Runs on your deviceMoreWorkingNo account needed

What this tool does

GIF Splitter reads the file with a GIF decoder written for this page — LZW compression, interlaced rows, local colour tables, transparent indices and the frame disposal rules — and writes the frames you ask for as PNG images. Decoding, compositing and PNG encoding all happen in this browser tab, so the animation is not transmitted anywhere and a tab that has already loaded keeps working with the network switched off.

Export what you see (frames composited) is on by default, and it decides what a frame even means. Most GIFs are optimised: after the first one, each frame stores only the rectangle that changed, at its own offset, leaving the rest of the picture to whatever was already on screen. Ticked, every PNG is the full canvas as a viewer would show it at that instant, with disposal applied, and all the files share the GIF's dimensions. Unticked, each PNG is the stored patch alone — often a small partial rectangle, transparent wherever that frame contributed nothing — which is what you want when you are examining how the file was built rather than reproducing what it looks like.

Two numbers decide how many files come out. Export every Nth frame samples the sequence, from 1 for a complete set up to 50, and Maximum frames to export caps the set at that many PNGs, at 200 by default and up to 2000. Sampling does not shorten the work: a frame in an optimised GIF only makes sense stacked on the ones before it, so every frame is decoded and composited in order regardless, and the settings only choose which of them get encoded. Names follow the source, numbered by position in the original animation and zero-padded to the width of the total, so walk-frame-007.png is the seventh frame of walk.gif whether or not the sixth was exported.

The edges are worth knowing before you start. PNG is the only output — no format choice, no resizing, no cropping — and PNG has no delay field, so a set exported here is a pile of stills rather than something that plays. Only GIF is read: an APNG or an animated WebP is refused at the header, with the signature it found quoted back instead of GIF87a or GIF89a. Decoding stops at 2000 frames or 300 million frame pixels across the file, whichever comes first, and a file past either ceiling is refused outright, naming the number of frames it had reached rather than handing back a partial set. A GIF cut short mid-download decodes as far as its data goes, and every pixel it never reached is left at palette index 0 — the first colour in that frame's table, or nothing at all when that index is the transparent one.

How to use it

  1. Add an animated GIF. One GIF is taken apart per run. Add several and each is decoded separately and produces its own numbered set. A single-frame GIF is accepted and returns one PNG.
  2. Decide whether to sample. Export every Nth frame runs from 1 to 50. Leave it at 1 for the complete sequence, or raise it to thin a long animation down to a strip you can actually look through.
  3. Set the ceiling on files. Maximum frames to export is a stop rather than a spacing: exporting ends once that many PNGs have been written, whatever remains of the animation.
  4. Choose composited or raw frames. Leave Export what you see ticked for full-canvas stills. Untick it to get each frame's own stored rectangle, at its own size and offset.
  5. Run it, then save the set. The summary gives the frame count, the canvas size and the animation's length in seconds, and the badges beside it add the loop setting and the GIF version. Add several GIFs and every PNG is kept, but those figures describe the last file decoded. Each PNG saves on its own, or the whole set downloads as one ZIP.

Processing & privacy

Runs on your device. Your file is processed directly in this browser.

Common use cases

Fixing one frame of an animation

Split the GIF, correct the frame that is wrong in an image editor, then rebuild the loop with GIF Maker. That tool applies one delay to every frame, so an animation with uneven timing will not come back exactly as it went in.

Finding the still you actually want

A reaction GIF usually contains one good picture. Browsing a folder of PNGs beats scrubbing a looping animation to catch a single moment by hand.

Checking how a GIF was assembled

With compositing switched off the export shows the stored patches, so you can see how much of the canvas each frame really touches — which is what governs the file size.

Recovering artwork from an old file

Sprite strips, banners and forum avatars often survive only as GIFs. Frame PNGs hand back editable stills without another round of colour quantisation.

Questions

Is my GIF uploaded?
No. The decoder, the compositing and the PNG writing all run in this browser tab, so the file is not transmitted and no copy is kept. GIF to MP4 next door genuinely needs the processing service and says so on its own page.
Can I get the gif frames as JPG or WebP?
No. PNG is the only output, chosen because it is lossless and preserves the transparency a GIF frame can carry. Run the results through Convert Image when another format is needed.
Why are some frames tiny or mostly transparent?
Because Export what you see is unticked, so each PNG is the raw rectangle the GIF stores for that frame — frequently a small part of the canvas. Tick the box to get full-size stills instead.
How many frames will it handle?
Decoding stops at 2000 frames, or at 300 million frame pixels across the whole file, whichever it hits first — a ceiling that keeps a browser tab from running out of memory. Beyond it the job is refused and reports how many frames it read.
Do the PNGs keep the timing?
Not in the files themselves; PNG has nowhere to record a delay. What comes back is the animation's total running time, shown with the frame count, canvas size, loop setting and GIF version. Per-frame delays are read to work that total out — a delay of 0 or 1 hundredth of a second counts as 100 ms, the way browsers play them — but they are not printed frame by frame.
How is this different from Extract Frames?
Extract Frames samples a video by seeking a decoder to timestamps, so what returns is approximate and capped at 600 images. GIF Splitter reads the frames a GIF actually contains, in order, so the twelfth file is the twelfth frame.
Will it open an APNG or an animated WebP?
No. It reads GIF87a and GIF89a and nothing else, and refuses anything else at the header, quoting back the six characters it found there. APNG Converter is the tool for those formats.

Related tools

  • Video to GIF — Turn a short clip into an animated GIF.
  • QR Code Generator — Create a QR code for a link, text, Wi-Fi or vCard.
  • GIF Maker — Build an animated GIF from images or a clip.
  • GIF Compressor — Reduce GIF file size by trimming frames and colours.
  • GIF to MP4 — Convert a GIF to a much smaller MP4 video.
  • GIF Resizer — Resize an animated GIF without losing the animation.