Back to Image
GIF info — visualise frame count / delays / disposal / loop count

GIF info — visualise frame count / delays / disposal / loop count

Parse an animated GIF and surface the frame count, total duration, average FPS, loop count (Netscape Application Extension), per-frame delay (ms) and disposal method, dimensions, local / global colour tables, and GIF version (87a / 89a). Each frame is composited (respecting disposal) into a thumbnail for visual inspection. Handy for GIF optimisation, hunting down bloat (over-fine delays, too many frames), checking 'why doesn't it loop?', and pre-publish sanity checks. Drop multiple files at once. Everything runs in your browser.

How to use

Drop or pick one or more animated GIFs. Each file shows the summary (version, dimensions, frame count, total duration, average FPS, loop count). The frames table lists each frame's thumbnail, delay (ms), disposal method, size, and local-colour-table flag. Use it to find optimisation targets — too many frames, sub-frame delays, oversized colour tables, etc.

In depth

What animated GIFs carry as pixel data

GIF inspection gets triggered when you want to understand a file’s frame structure, optimise its size, or verify the loop behaviour of an animation you created. GIFs that originated as screen recordings are a common case — and those files have the capture’s on-screen contents baked into every frame’s pixel data: app UI, file names, notifications, URL bars.

Even if you’re only reading metadata — frame count, delay values, loop count — the act of uploading the file to an external service transfers all that pixel data to a server you don’t control.

What gets logged when you use an online GIF analyser

Services found under ‘gif info online’ or ‘gif frame analyzer’ process uploads server-side. To retrieve delay values and loop count, the full file is transmitted. The analysis is structurally indistinguishable from any other upload — the server receives the bytes, processes them, and (ideally) discards them later.

Demo animations for unreleased products, screen recordings of internal tools, personal captures — none of these need to leave the browser for structural analysis. GIF parsing is byte-manipulation; it has no inherent network dependency.

gifuct-js parsing the GIF89a structure in the browser

The tool uses gifuct-js (MIT) to parse GIF files locally. gifuct-js decodes the LZW-compressed frame data and unpacks each block — GCE (Graphic Control Extension) for delay and disposal, LCT (Local Color Table) entries, the Netscape 2.0 Application Extension for loop count — into JavaScript objects. Composited thumbnails for each frame are generated on Canvas with putImageData, applying the disposal method to produce the correct rendered state.

The GIF bytes are read by FileReader and fed directly to the parser — nothing leaves browser memory. DevTools Network stays empty after the page loads. Source is public on GitHub.

Reading the analysis to find size-reduction opportunities

Frame count × average delay determines total duration; excess frames with tiny delays (stored value 1 = 10 ms) often represent little actual motion and can be merged. Large LCT counts mean higher per-frame colour overhead. Disposal method 1 (keep previous) allows the decoder to reuse unchanged background areas, while method 2 (restore background) repaints the entire frame. Identifying which disposal pattern dominates tells you where re-encoding or optimisation tools will have the most impact — and all of that analysis runs without sending the file anywhere. When a particular frame from the analysis needs to be saved as a standalone image for reuse, gif-frame-extract emits any selected frame as PNG or JPEG.

The GIF89a binary layout

GIF89a (CompuServe, 1989) lays out bytes in this order. The first 6 bytes hold the magic GIF89a, followed by the 7-byte Logical Screen Descriptor (width, height, GCT (Global Color Table) flag, background color index, and aspect). An optional GCT follows (up to 256 × 3 bytes). After that comes a sequence of blocks, each starting with one of three introducers: Extension (0x21), Image Separator (0x2C), or Trailer (0x3B).

Extensions include the GCE (Graphic Control Extension, ID 0xF9, holding per-frame delay and disposal method), Application Extension (0xFF, used by the Netscape 2.0 loop count), Plain Text, and Comment. An Image Block is the 10-byte Image Descriptor (top-left coordinate, width, height, LCT flag) plus an optional LCT, the LZW Minimum Code Size, and a chain of Data Sub-blocks. LZW (Lempel-Ziv-Welch as adapted for GIF) compresses the indexed-color values into variable-length codes up to 12 bits. gifuct-js parses all of this into structured JavaScript objects.

Delay quirks and cross-browser playback differences

GIF delay values are stored in the GCE as 16-bit values in units of 1/100 second (max 655.35 s). Implementations differ in how they handle very small values: Firefox, Safari, and Chrome all clamp a delay of 0 or 1 (0–10 ms) up to a browser-default of 100 ms. This is legacy behaviour inherited from Internet Explorer 4 for compatibility, and it’s why ffmpeg-converted video-to-GIF often plays slower than expected.

Loop count (in the Netscape 2.0 Application Extension) treats 0 as infinite loop and any value ≥ 1 as “play that many times and stop.” Whether 1 means “loop once = play twice” or “play once and stop” differs between browsers — another common cause of “this GIF won’t loop.” Inspecting Loop count in this tool reveals the mismatch. Practical platform ceilings: Twitter/X caps animated GIFs at 15 MB, Discord at 8 MB (50 MB with Nitro), Slack at around 2 MB. Files larger than these are typically displayed as static images or auto-compressed. When the analysis reveals a file over the limit, converting it with gif-to-mp4 usually delivers the same visual result at roughly one-fifth to one-tenth the size and bypasses GIF-specific ceilings.

FAQ

Which unit is the delay in?
GIF89a stores delays in 1/100 s. We display them in ms (× 10). A stored value of `5` is 50 ms ≈ 20 FPS.
What does disposal method mean?
Tells the decoder how to clean up before drawing the next frame. 0 = unspecified, 1 = keep (no disposal), 2 = restore background (clear), 3 = restore previous (undo). Backgrounds usually use 2; stacked layers usually use 1.
How is loop count read?
From the Netscape 2.0 Application Extension block. 0 = infinite loop; 1–65535 = play N times. Most GIFs loop forever; some platforms publish single-loop GIFs deliberately.
Are the thumbnails just patches?
No — we composite using the disposal method so the thumbnail matches what a real decoder shows. Standalone patches would look wrong because subsequent frames depend on the prior canvas state.
Is anything uploaded?
No. We parse with gifuct-js (MIT) and composite thumbnails on Canvas. Nothing leaves your browser.

How to verify nothing is uploaded

This tool never sends your input outside your browser. The pages below explain how it works, how to audit it, and how the site is run.

Related tools

Image Metadata Viewer

Image Metadata Viewer

Drop an image (JPEG / PNG / WebP / GIF / TIFF / HEIC / AVIF) to see its dimensions, file size, MIME type, aspect ratio, bit depth, color type, and DPI, plus extracted EXIF (capture time, camera make / model, lens, aperture, shutter speed, ISO, focal length, exposure compensation, orientation), GPS coordinates, ICC color profile, IPTC, and XMP. PNG headers (IHDR / pHYs) and JPEG markers (SOF / JFIF) are read by a small built-in parser; EXIF is parsed with exifr (MIT). Read-only — nothing is modified and the image never leaves your browser.

imageEXIFextract
Extract frames from animated GIF / APNG to PNG / JPEG

Extract frames from animated GIF / APNG to PNG / JPEG

Split an animated GIF or APNG into individual frames as PNG or JPEG images. Uses the browser-native ImageDecoder API — no extra library required. Handy when you need a thumbnail of a specific frame or when feeding still-image tools (image-resize, image-crop) that only see frame 1. Output PNG (lossless) or JPEG (with quality control), and grab everything as a ZIP. Files never leave your device — everything runs in the browser.

imageextract
GIF to MP4 converter — H.264 cuts file size to 1/5–1/10

GIF to MP4 converter — H.264 cuts file size to 1/5–1/10

Convert animated GIFs to H.264/AAC MP4 videos. GIFs balloon quickly; MP4 (H.264) typically shrinks the file to 1/5–1/10 the size and plays inline on X (Twitter), Bluesky, Discord and other social platforms. ffmpeg.wasm runs entirely in your browser — GIFs never leave your device. Supports batch processing and a single ZIP download.

videoimageconversion
Video to GIF — palettegen with fps / width / trim range

Video to GIF — palettegen with fps / width / trim range

Convert videos to GIFs in your browser. Uses ffmpeg.wasm's two-pass palettegen + paletteuse for better color fidelity and lets you set fps, width and a trim range. Supports batch processing and a single ZIP download.

videoimageconversion