Get every frame out of an animated GIF

You need one still from an animated GIF — for a thumbnail, an edit, or documentation. Here is how to split it into PNGs correctly.

Tools used in this guide

The job

Animated GIFs store frames as diffs — most frames only paint the pixels that changed. Naïve extraction gives you a ghost of partial pixels, not the picture you saw. Proper splitting composites each frame the way a player does.

Split it

Drop the GIF in and run. The decoder composites each frame with its disposal handling (restore-to-background and keep; restore-to-previous is treated as keep) so every output PNG shows the full composited image — then grab them individually or as a ZIP.

Worked example

A UI walkthrough GIF loops 24 frames over 4 seconds. Splitting gives frame-001.png through frame-024.png at the screen size; frames 8 and 16 are the two screens you want for the docs page. The rest stays in the ZIP for reference.

Limits

Strict parsing — corrupt or truncated GIFs are rejected, no partial output. Up to 25 MiB, 300 frames, 4096 px per side, and a 256 MB decoded-data budget — huge canvases with many frames are refused before they can exhaust memory. PNG export covers up to 20 frames or 128 MiB of output. GIFs with a tiny logical screen and offset frames composite onto that full canvas, which is the correct rendering.