On-device AI — professional-grade, fully private.

Split GIF into Frames

Split a GIF into frames — every frame as its own image.

  • No upload
  • PNG, JPG, WebP or GIF
  • Range or every Nth
  • Timings kept

Drop a GIF here

GIF, animated WebP or APNG

Frame format
Frame format
PNG size

Compact writes the PNG itself and comes out about two and a half times smaller for the same pixels.

PNG keeps every pixel exactly as the animation had it.

Which frames
Which frames

The count updates before anything runs.

Frame size
100%

Frames can be made smaller, never larger.

Sprite sheet

One image with the selected frames on a grid, alongside the separate files.

How to split a GIF into frames

Turn an animated GIF into a set of separate images, one per frame, in the order the animation plays.

  1. 1

    Add your animation

    Drag an animated GIF onto the drop area, or click to browse. Animated WebP and APNG work too. The file is read on your device and never uploaded.

  2. 2

    Choose a format and which frames you want

    PNG keeps every pixel exactly as it was and is the default. Then take all frames, a range, every Nth frame, or type a list like 1, 3, 5-9 — the count updates before anything runs.

  3. 3

    Extract

    Every selected frame appears on screen as its own picture, numbered by its position in the source animation and labelled with its own delay.

  4. 4

    Save one frame or all of them

    Each frame has its own download, or take the whole set as one ZIP. The archive also carries a small timing file listing each frame's delay, so the animation can be rebuilt exactly.

Why split a GIF into frames

An animation is a stack of pictures pretending to be one file, and quite often the picture you actually need is inside it. You want the one frame where the expression lands, to use as a thumbnail. You want to see whether the third frame really is the one with the artefact in it. You want the sprite sheet back out of a GIF somebody sent you instead of the source files. Or you want to edit the animation frame by frame, which means having the frames.

Take all the frames, a range, every Nth, or a list you type — as PNG, JPG, WebP or GIF, with a sprite sheet in the same run.

Reads GIF, animated WebP and APNG. Writes one still image per frame, numbered by its place in the source animation, plus an optional sprite sheet and a timing file in the archive.

What a set of frames gets you

  • The good frame. One picture out of the animation, at full quality, to use as a poster, a thumbnail or a still. Scrubbing a GIF in a browser and screenshotting it gives you a resampled, recompressed approximation of that frame; extracting gives you the frame.
  • Something you can edit. Every image editor works on still images. Splitting, editing and reassembling is how most GIF edits are actually done, and the first step is the one most people get stuck on.
  • A sprite sheet. Game engines and CSS animation want one image with the frames laid out on a grid. Rebuilding one by hand from an animation is tedious; it is the same operation as extracting, arranged differently.
  • Evidence. Frame counts, per-frame delays and exact pixel content are what you need when an animation looks wrong and you are trying to work out why.

What a frame actually is inside a GIF

This is the part that separates a frame extractor that works from one that produces a folder of confusing fragments. A GIF frame is not required to be the whole picture. The format allows each frame to be a rectangle of any size, placed at any offset, with its own palette, its own transparent colour and its own instruction about what to do with the canvas afterwards. A twenty-frame animation of a face where only the eyes blink may store frame one as the whole 400 by 300 picture and frames two to twenty as 60 by 20 patches. Handing those raw frames to an image encoder produces one usable picture and nineteen tiny crops of an eye, which is not what anybody meant by splitting a GIF.

What happens to each frame here

  • Composite. Every frame is drawn onto a canvas of the animation's full logical size, honouring its offset, its transparency and the disposal method of the frame before it. What gets exported is the picture a viewer would actually have seen at that moment.
  • Select. The frames you asked for are picked by index, with no decoding of the ones you did not. Selection is pure arithmetic — nothing is resampled and nothing loses quality.
  • Scale, if you asked. One draw per frame at the smaller size, on your graphics hardware where it is available. The scale control cannot enlarge; extracting frames bigger than the animation would be inventing pixels it never had.
  • Encode. One file per frame, written directly rather than through a screenshot of a canvas. For PNG that is lossless, so the exported frame and the decoded frame are the same pixels.

What a splitter must not change

Three things have to survive, and all three are checked on every run rather than assumed. The ORDER: frame three of the animation has to be file three of the output, which is asserted pixel by pixel against the source using a separate image library. The CANVAS: every frame comes out at the animation's full size, so a sub-rectangle frame is composited rather than cropped. And the TIMING: each frame's own delay travels with it into the archive's timing file, because a GIF's delays are per-frame and irregular far more often than people expect. A tool that loses any of the three still produces a folder full of plausible images, which is exactly why each one is measured.

PNG, JPG, WebP or GIF — and which to pick

A GIF frame is a palette image: at most 256 colours, with one of them optionally transparent. That fact decides everything about which output format is right, and it is why the default is PNG rather than the JPG most tools lead with.

By format

  • PNG — the default, and lossless. Stores the frame's colours exactly and keeps transparency. Because a GIF frame has so few distinct colours, PNG usually compresses it well too, so lossless costs less than you would expect. Choose anything else only for a specific reason.
  • JPG — small, for photographic footage. Good for video-derived frames where the picture is already noisy and you are extracting a lot of them. It has no transparency, so a background colour is painted underneath; and it adds ringing around hard edges, which is the wrong trade for text, screenshots and line art.
  • WebP — between the two. Smaller than PNG at a similar look, and unlike JPG it keeps transparency. The catch is that not every browser can WRITE one, so the control shows you whether yours can rather than guessing on your behalf.
  • GIF — a frame that is still a palette image. Each frame written back out as its own single-frame GIF, with its palette intact. This is the format to pick when the frames are going back into another animation tool that expects them.

The black-box problem

If you have ever extracted frames from a sticker or a logo animation and got a folder of pictures sitting in black rectangles, this is why: JPG has no alpha channel, and a transparent pixel drawn onto an untouched canvas is black, so an extractor that writes JPG without thinking about it produces exactly that. Here a background colour is painted under every frame before an opaque format is written, and it defaults to white because white is what people almost always want. Black is offered for the cases where it is not. The control is checked in both directions — a background choice that produced the same picture either way would be a label rather than a setting.

  • GIF to PNG converter — one picture in, one picture out. Use it when you have a still GIF you want as a PNG; for an animation it gives you the first frame, not the set.
  • GIF to JPG converter — the same, for JPG, and with the same background handling for transparency. Use it for one picture; use this page when you want what is inside an animation.

Choosing which frames to extract

Extracting all of them is right surprisingly rarely. A three-second screen recording at 30 frames per second is ninety files, most of which differ from their neighbour by a cursor moving four pixels. Picking a subset is usually both faster and more useful, and the count of what you have selected is shown before anything runs, so there is no guessing.

The four ways to select

  • All frames. The default. Right when the animation is short, or when you genuinely need every one.
  • A range. Two numbers, inclusive. The natural choice when the part you care about is a section of a longer clip. Both boxes are bounded by the animation's real frame count, so it is not possible to ask for a frame that does not exist.
  • Every Nth frame. One in every two, three, four and so on. This is how you turn a long recording into a contact sheet of a dozen representative stills without picking them by hand.
  • A typed list. Individual numbers and ranges together, like 1, 3, 5-9. Ranges typed backwards are read as the frames between them, duplicates collapse, and the output always comes out in playback order however you typed it. Anything unreadable is named rather than silently ignored.

Why the free limit is on the OUTPUT

Most tools with a free tier cap the file you can open. That is the wrong axis for this one: it would refuse a 300-frame screen recording outright, including from someone who only wanted five frames out of the middle of it. The cap here is on how many frames you EXTRACT at once — sixty on the free plan — so any animation is welcome and the limit is something your own selection can satisfy. When a selection is over the line the tool says so before it starts, names the actual number, and offers a button that narrows the selection to fit. Pro removes the cap and takes up to twenty animations in one go.

Sprite sheets, in the same run

A sprite sheet is the same frames arranged on one image instead of many, and it is what a game engine, a CSS animation or a documentation figure usually wants. Turning it on produces the sheet ALONGSIDE the individual frames rather than instead of them, because the two are wanted together often enough that choosing between them is an annoyance.

Laying it out

  • Automatic columns. Leave the column count at zero and the frames are arranged in a roughly square grid — nine frames become three by three, ten become four by three. The last row being short is normal.
  • A strip. One column gives a vertical strip and a column count equal to the frame count gives a single horizontal row. Both are common in CSS sprite animation, where the background position moves along one axis.
  • Spacing. A gap between cells, in pixels, for engines that sample slightly outside a cell and would otherwise pick up the neighbouring frame's edge. The gap is added between cells only, never around the outside, so the arithmetic for finding a cell stays simple.
  • It follows the selection. The sheet holds the frames you selected, not the whole animation — so every third frame of eight gives a three-cell sheet, and a range gives a sheet of that range.

Putting the animation back together

Splitting is usually half of a job. The other half is reassembling, and that is where nearly every frame extractor quietly fails you: it hands over a folder of pictures and throws away the one thing that made them an animation. A GIF stores a delay for every frame independently, and real animations use that — a held pose for a second, then six frames at 40 milliseconds each. Reassembling from frames alone means guessing one frame rate for the whole thing, which cannot reproduce that.

The timing file

Every archive from this tool carries a small comma-separated file next to the frames listing each frame's number, its filename, its own delay in milliseconds, and its start time within the animation. It is a few hundred bytes and it is the difference between a folder of pictures and an animation you can rebuild. Feed the frames and those delays back into the GIF Maker and the result plays exactly as the original did. The delays are read from the source and carried through untouched — the same numbers the animation was authored with, not an average and not a rounded frame rate.

Measured results

Every number below is produced by this tool's own test pack on the reference device and is reproducible by running it. Where a claim is about correctness rather than speed, it is checked against a separate image library that shares no code with this tool, so the comparison is not our output judged against our previous output.

The numbers

  • Throughput A 100-frame 480 by 270 animation becomes 100 PNG files in 512 ms, or 100 JPGs in 155 ms. A typical eight-frame reaction GIF takes 2 ms.
  • File size Those 100 PNG frames total 3.0 MB. The same frames through the browser's own PNG encoder total 7.7 MB — 2.59 times larger, for pixels verified identical.
  • Frame identity Every extracted file is compared against the source frame it claims to be, pixel by pixel, by an independent decoder. The comparison is equality, not a tolerance: a PNG export of a decoded frame is lossless on both sides, so there is nothing to allow for.
  • Sprite sheet A 100-cell sheet at 4800 by 2700 is built and written in 926 ms, in the same run as the individual frames.
  • Selection Choosing which frames to keep costs nothing at all — it is index arithmetic, so the frames you did not ask for are never encoded.

What goes in, and what comes out

The input list is closed and it is enforced at the file dialog rather than at the engine, so a file this tool cannot open is refused in milliseconds with a route to the tool that can — instead of being accepted and failing later behind a spinner.

  • GIF in. Animated or single-frame, interlaced or not, with a global palette or a different local palette on every frame. Sub-rectangle frames at an offset are composited onto the full canvas before anything is written.
  • Animated WebP and APNG in. Both are read by our own demuxers on every browser rather than by a native decoder, so frame counts and timings are identical everywhere rather than depending on which browser you happen to use.
  • Still images out. PNG, JPG, WebP or single-frame GIF, one file per frame, plus an optional sprite sheet and a timing file in the archive.
  • Anything else is refused with a route. A video is sent to Video to GIF; a still photograph to the GIF Maker. The refusal names what the file is, what this tool takes, and where to go.

How the animation is read

GIF is decoded natively where the browser has a decoder for it and by our own reader everywhere else, so an animation opens the same way in every browser rather than arriving as its first frame with no error — which is what happens on several browsers without that fallback. Animated WebP and APNG always take our own reader, which is what keeps frame counts and timings identical across engines. The tool reports which reader ran, so a difference between browsers would show up as a fact rather than as a mystery.

Plan limits

  • Free. One animation up to 50 MB, and up to 60 frames extracted per run. Full quality — the free plan is not a reduced-quality extraction, it is a smaller batch. Any length of animation is accepted; the cap is on the selection, and the selection controls exist to satisfy it.
  • Pro. Up to 20 animations at a time and no frame cap, downloaded together as one archive. Batch is what Pro buys here, because extracting frames from a folder of clips one at a time is the actual chore.
  • The limit both plans share. Every frame is expanded to full colour while it is being worked on, so a memory budget bounds the job before it starts rather than letting the tab stop responding while the progress ring keeps turning.

What happens on your device

Nothing is uploaded. The animation is decoded frame by frame on your own machine, each frame is composited onto the full canvas, the frames you selected are encoded, and an archive is built — all in a background thread, so the page keeps painting while the work happens. The tool works with the network disconnected once the page has loaded, and our own tests record every network request made during a run and require the list to be empty.

Why the same animation splits identically every time

  • No randomness anywhere. Nothing in the path uses a randomised algorithm, so the same animation with the same settings always produces byte-identical files. That is what makes it possible to test the output at all.
  • The encoder reports itself. The result records which decoder read the animation and which of the two PNG writers produced the bytes, so a silent fallback shows up as a stated fact instead of an unexplained change in file size.
  • Checked against another implementation. Frame identity, frame counts, sizes and timings are all verified with libvips, a completely separate image library, rather than against our own previous output.

Frames are composited and scaled on your graphics hardware where your device supports it, and the whole job runs in a background thread so the page stays responsive. Measured on the reference device: a 100-frame 480 by 270 animation becomes 100 PNG files in 512 ms, totalling 3.0 MB against the 7.7 MB the browser's own encoder produces for the same pixels. It all runs on your device, not our servers.

Frequently asked questions

What format should I extract GIF frames to?

PNG unless you have a reason not to. A GIF frame is a palette image of at most 256 colours, and PNG stores those colours exactly — the extracted frame is pixel for pixel what the animation showed, with transparency intact. JPG is the right choice only when you are extracting many frames of photographic footage and file size matters more than fidelity, because JPG cannot store transparency and adds compression artefacts around every hard edge. WebP sits between the two. GIF output exists for the case where you want each frame to stay a palette image you can drop straight back into another animation.

Will the frames come out in the right order?

Yes, and the numbering makes it verifiable. Each file is named with its position in the SOURCE animation, not its position in your selection — so taking every third frame of an eight-frame GIF gives you files numbered 001, 004 and 007 rather than 001, 002 and 003. The numbers are zero-padded so a file manager sorts them correctly without a natural sort, and the padding grows for animations over 999 frames.

Can I extract only some of the frames?

Four ways. All frames is the default. A range takes everything between two frame numbers. Every Nth takes one frame in every two, three, four and so on — useful for turning a long screen recording into a handful of representative stills. And a typed list accepts individual numbers and ranges together, so 1, 3, 5-9 gives you seven specific frames. The count of what you have selected is shown before you run anything.

Why do my transparent areas turn black in other tools?

Because JPG has no transparency at all, and a transparent pixel drawn onto an untouched canvas is black. Most frame extractors export straight to JPG without doing anything about it, so a sticker or a logo with a transparent background comes out sitting in a black box. This tool paints a background colour underneath every frame before a JPG or any other opaque format is written, and the default is white. You can choose black instead if that is what you want.

How do I put the frames back into an animation afterwards?

The archive carries a timing file alongside the frames, listing each frame's number, its filename, its own delay in milliseconds and its start time in the animation. That is the piece every other frame extractor throws away — and without it the only way to reassemble an animation is to guess a single frame rate, which is wrong for any GIF with irregular delays, and most real ones have them. Feed the frames and their delays to the GIF Maker and you get the original animation back.

Can I make a sprite sheet instead of separate files?

You can have both, in the same run. Turn on the sprite sheet and the selected frames are laid out on one image alongside the individual files. Leave the column count at automatic for a roughly square grid, or set it — one column gives a vertical strip, and setting it to the frame count gives a single horizontal row. There is a spacing control for the gap between cells, which some game engines want and some do not.

How many frames can I extract at once?

The free plan exports 60 frames in one go, which covers a reaction GIF or two seconds of a 30 fps recording whole. The cap is on what you EXTRACT, not on what you open — so a 300-frame screen recording is perfectly welcome on the free plan, and you take it 60 frames at a time, or take every fifth frame, or narrow to the section you actually need. If the selection is too big the tool says so before it starts, with a button that narrows the selection for you. Pro removes the cap and takes up to 20 animations at a time.

Are the extracted frames the same quality as the original?

With PNG output, they are identical. Nothing is resampled, requantised or recompressed: the frame is decoded, composited onto the animation's full canvas, and written out losslessly. We check this rather than assert it — every extracted file is compared pixel by pixel against the source frame it claims to be, using a separate image library that shares no code with this tool. JPG and WebP are lossy by nature and have a quality control; the scale control is the only other thing that changes a pixel, and it can only make frames smaller, never larger.

Why are my PNG frames smaller here than from other tools?

Because most tools hand the frame to the browser's own PNG encoder, which is configured for speed and does no line filtering at all. This one writes the PNG itself and chooses a filtering strategy for each animation by encoding the first frame both ways and keeping the smaller result. Measured on a 100-frame 480 by 270 animation, that is 3.0 MB against 7.7 MB — the same pixels, verified identical, in less than half the download.

What is the difference between this and the GIF to PNG converter?

The GIF to PNG converter turns a picture into a picture: one file in, one file out, and for an animation it gives you the first frame. This tool is for the animation itself — every frame separately, numbered, timed, and selectable. Use the converter when you have a still GIF you want as a PNG; use this when you want to see, edit or reuse what is inside an animation. The GIF to JPG converter is the same relationship for JPG.

Can I split a GIF into several shorter GIFs instead?

That is a different job and it lives on the GIF cutter, not here. This tool's output is still images — one frame, one file — and its whole shape follows from that: the frame cap, the format list, the sprite sheet, the timing file. Cutting an animation into shorter animations is a range selection applied more than once, which is exactly what a cutter already does, and mixing the two would double the format matrix for a feature neither audience is asking the other tool for.

Does anything get uploaded?

No. The animation is decoded and every frame is encoded on your own device, in a background thread so the page stays responsive while it works. Nothing is sent anywhere, nothing is stored, and the tool works with the network disconnected once the page has loaded. This is checked in our own tests by recording every network request made during a run and requiring the list to be empty.