Neatbo.

GIF patches need a background policy

A GIF can store small patches instead of full pictures. Understand transparency, background and disposal before exporting assets.

A stored rectangle may not be the display frame

Animated GIFs can update a small rectangle while retaining earlier pixels elsewhere. Exporting that rectangle alone loses the full edit-ready display image. A screenshot of a player adds its own background and clock behavior.

Recovering all source display frames is separate from choosing one video still or arranging thumbnails in a contact sheet. Frame count, loop and background remain parameters of one recovery task.

Make transparency a visible choice

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 indices leave existing pixels alone. They do not erase the canvas. Exported transparent pixels have hidden RGB zero, so asset comparisons should use the documented RGBA convention.

Keep disposal0 and player timing separate

Disposal0 leaves behavior unspecified by the GIF format; this export chooses retain. Pillow may instead inherit a previous nonzero method. The difference is preserved in a mixed-disposal specimen and explicit policy, rather than concealed by a matching screenshot.

Delay0 is kept as0. Raw hundredths, cumulative starts and NETSCAPE loop fields remain provenance; they do not predict player minimum delay, loop interpretation or wall-clock playback.

Declared disposal policy
Raw methodExport action
0 / 1Retain the completed display canvas
2Clear the stored patch rectangle to the selected background
3Restore the exact canvas from before this patch

Audit whole outputs before editing

The original GIF, all full-grid PNGs and complete JSON/CSV share one ZIP. PNG hashes and every raw declaration remain available after the paginated screen preview. No generated PNG is a resized thumbnail or a claim that the source comments were removed.

The supported GIF subset is finite. Unsupported extensions or any first budget excess refuse the whole file; cancellation discards unfinished outputs. Local extraction is not universal GIF conformance or a guarantee about every source file.

  • Keep original.gif before changing timing or cleaning metadata.
  • Compare every numbered PNG using the same canvas policy.
  • Use the complete JSON/CSV for raw declarations beyond the screen preview.

References

  • Tim / original GIF frame request

    Complete question, answers and both comment types reviewed. Corey separately describes using a web frame splitter. No author GIF, region, market size or playback timing evidence.

  • GIF89a specification

    Correctness source for color tables, LZW, graphics control, interlace and disposal. Transparent canvas and disposal0 retain are explicit export choices, not universal viewer behavior.

Tools in this category

Expand a tool to see its steps, options and supported formats, then open its workspace.

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

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.

Steps

  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.

Available options

Canvas background for export
Transparent canvas · GIF background color

Capabilities 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.
Open Extract GIF display frames →