Neatbo.

Extract GIF display frames

Recover every composited GIF frame as full-grid PNG, with explicit background policy, raw delay/disposal and complete original/JSON/CSV ZIP.

Browser-local processingInputOne local GIF87a/89a originalOutputEvery full-grid PNG with original and complete JSON/CSV ZIPUp to 10 MiB per file · File limit: 1
  1. 1Add input
  2. 2Adjust settings
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop it here

Files stay on this device. Your originals stay unchanged.

Up to 10 MiB per file · File limit: 1

    Options

    Complete the required options first. You can keep the defaults for the rest.

    Preparing the tool…

    Before you start

    Select one existing GIF, choose a canvas background and recover every fully composited display frame. Keep original delays and disposal declarations beside the PNGs in a complete ZIP.

    How to use this tool

    1. Select one original GIF and keep a backup.
    2. Choose transparent canvas or GIF background color.
    3. Run and inspect every patch, disposal and raw delay row.
    4. Download the ZIP and open full-grid PNGs; audit all records and hashes in JSON/CSV.

    Supported inputs and limits

    One GIF87a/89a up to 10 MiB; at most 500 frames, logical width/height 2048 and 16777216 summed full-display pixels. Every frame is charged at the full logical size, including a tiny stored patch.

    Global/local color tables, ordinary/four-pass interlaced images, complete LZW, disposal0/1/2/3 and one NETSCAPE2.0 loop declaration are supported. Raw comments remain hexadecimal bytes in the full JSON.

    Transparent canvas begins transparent and clears disposal2 patch regions to transparent. GIF background uses the opaque global background color when a global table exists, otherwise transparent. This choice can change pixels outside stored patches.

    Transparent patch pixels do not replace existing pixels. Disposal0 and1 retain;2 clears the patch rectangle;3 restores the previous canvas. Disposal0 retain differs from readers that inherit the last nonzero disposal.

    Each PNG contains the complete logical screen as RGBA8, without Canvas resizing or color transforms. Alpha0 hidden RGB is canonical zero. Raw delays stay in hundredths, including zero; no player minimum delay, page background or all-viewer RGBA is inferred.

    Plain Text, unknown extensions/applications, user-input/reserved flags, disposal4–7, illegal palette indices, malformed LZW, truncation and trailing garbage refuse the whole file. No partial archive is offered.

    Download original.gif, every frames/frame-NNNN.png, gif-frames.json and formula-safe gif-frames.csv in one ZIP. Combined JSON/CSV allows 4 MiB. The 100 MiB ZIP guard is dominated by stricter source, pixel and report limits, not an independently reachable output promise.

    Files are processed locally without upload, URL fetching or user-content execution. Preserve the original: this is image recovery, not metadata cleaning, animation editing or universal GIF validation.

    Worked example

    Example input

    One 8505-byte real Pillow dictionary GIF at 61×47.
    Example options
    Transparent canvas.

    Example output

    8 PNG display frames, 22936 summed pixels, 28 raw hundredths, loop declaration2 and 11 ZIP members.

    When something does not work

    A malformed, unsupported or over-budget input creates no download. Cancellation discards unfinished output. Correct the input or choose a supported original, then rerun; the same selected file can be reused.

    Frequently asked questions

    Why can exported pixels differ from my GIF viewer?

    The selected background policy and explicit disposal0 retain choice determine the canvas. Some readers inherit a prior nonzero disposal; players may clamp delay or use an external page background. Those behaviors are not claimed.

    Does the loop value or raw time reproduce playback?

    No. Missing NETSCAPE2.0 is null in the full report; zero is its unlimited-loop declaration. Raw hundredths and their sum describe source metadata, not browser clock time or a guaranteed player repeat count.

    Documentation & further reading

    Related tools