GIF frame extractor
Locally extract complete composed GIF frames, then download one PNG or all frames and their metadata in a ZIP.
How to use
Choose the file and policy, then select Extract frames. Select a frame number to preview its complete still image and read its raw delay and disposal in the table. Download the selected PNG or the ZIP of every frame. Changing the file or background clears the old result. There is no upload or autosave, and the original file stays unchanged.
If a first frame fills the screen red and the second draws a small green square, the second PNG contains both the red screen and square, not only the patch. Disposal 2 restores the previous frame rectangle to the logical GIF background or transparency according to your choice, so the two policies can differ. Disposal 3 restores the saved previous pixels before drawing the next frame.
Support & limits
Supports a limited GIF87a/89a subset: global/local palettes, interlace, transparency and disposal 0–3. Plain Text, user-input flags, nonzero pixel aspect ratio, unknown extensions, disposal 4–7 and duplicate/dangling graphic controls are rejected; one well-formed NETSCAPE2.0 extension is accepted. Comments are bounded then ignored. metadata.json stores version=1, dimensions, the policy, raw repeatCount, PNG names, raw centisecond delays and disposal. Null means absent, while zero is preserved: delay=0 is not changed to 100 ms, and repeatCount=0 means unlimited NETSCAPE looping without duplicating frame data. There is no animation playback or preservation of every source byte. Filenames are fixed and ZIP uses uncompressed STORE. PNG comes from native Canvas; pixel expectations do not imply identical PNG file bytes across browsers.
Common questions
Why can the session remain busy after cancellation?
FileReader can be aborted and the worker terminated, but native PNG encoding has no force-stop callback. Its late output is discarded and the shared session stays reserved until the canvas is released; another operation cannot overlap that late resource. Retry after it finishes. Browser suspension can delay deadline delivery. Byte, pixel and work limits do not measure or guarantee total browser memory.