This page's code did not start.

Opening index.html directly from a folder blocks JavaScript modules, so nothing will happen when you choose a GIF. Serve the folder over http instead:

powershell -ExecutionPolicy Bypass -File serve.ps1

Then open http://localhost:8080/.

GIF Analyzer — what is actually inside a GIF

Frames, delays, palettes, and where every byte went.

Language: English
View source
Your GIFs are processed in your browser. No processing upload.

The file is opened and taken apart by your own browser: the block structure, the LZW decompression and every frame drawn on this page are done on this machine. There is no server on the other end of this page to send a file to even if anything here wanted to.

Live check: checking…

Offline: checking…

Don't take our word for it: open DevTools, watch the Network tab, and analyze a GIF. Not one request carries an image, a thumbnail, or a filename. Or unplug from the internet and analyze one anyway.

Choose a GIF

View as Markdown

How to analyze a GIF

  1. Choose a GIF. Drop it onto the picker, or select it by hand. It is read straight off your disk by the browser; nothing is sent anywhere while you do it.
  2. Read the summary first. The canvas size, the frame count, how long the animation says it runs and how long it actually plays. Those last two differ more often than people expect, and the reason is in the next section.
  3. Look at what stands out. Every line there is measured from your file: delays no browser will honour, a missing loop block, colour tables nothing refers to, metadata that is bigger than some of the frames. Nothing is a guess about what you meant to make.
  4. See where the bytes went. Every byte of the file is in exactly one row, and the rows add up to the file. If most of it is not in "compressed pixels", the rest of the table says where it is instead.
  5. Go through the frames. Each one shows its delay, its rectangle, its disposal method and its size. Switch between "the canvas after each frame" and "only what each frame stores" — the second is how you see whether the file is optimised, because a well-made GIF stores tiny rectangles and a badly made one stores the whole picture every time.
  6. Take the report if you need it. The whole analysis as plain text, to paste into a message or keep beside the file. It is built in the page from what is already on your screen.

The longer version

What is actually inside a GIF Frames, delays, disposal methods and colour tables explained, why browsers refuse the fastest delays, and how to work out where a GIF's file size really went.

Questions

Is my GIF uploaded anywhere?

No. The file is read, decompressed and drawn by your own browser on your own hardware. There is no server side to this tool, and the page's Content-Security-Policy names every address it may contact — none of them belongs to this site. Unplug from the network and it still analyses GIFs.

Why does my GIF play slower than the delays say?

Because every browser refuses to honour a delay under two hundredths of a second and holds the frame for a tenth instead. The rule was written into Netscape in 1996, for the spinning globes and under-construction signs of the time, and has been copied into every browser since; nothing has ever removed it.

So a GIF whose frames all say 0.01s does not play at 100 frames a second. It plays at 10, which is five to ten times slower than whatever made it intended. This page shows both numbers — what the file says and what it will actually do — and marks the frames it affects. The fix, in whatever made the file, is to write 0.02 rather than 0.01.

What does “disposal” mean?

What to leave on the screen when a frame's time is up, and it is the field that decides whether an animation looks right or smears.

Leave it in place means the next frame paints over this one, which is what you want when frames are opaque and cover each other. Clear back to the background wipes the frame's rectangle first, which is what transparency needs — without it the see-through parts of the next frame show the previous one underneath. Restore what was underneath puts back whatever was there before this frame drew, which is how a small moving object over a still background is stored. And unspecified means the file did not say, and every viewer treats it as "leave it in place".

Why is my GIF so large?

The "Where the bytes went" table answers that for your particular file rather than in general, and there are only a few possible answers.

If nearly all of it is compressed pixels, the file is simply a lot of picture: GIF stores every frame as whole pixels, with no motion compensation and no quality dial, so the size is roughly the area times the frame count. Fewer frames, a smaller size or fewer colours are the only levers.

If a large slice is colour tables, the file is writing a palette per frame at 768 bytes each. If a large slice is metadata, an editor left an XMP packet behind and it can be removed without touching the picture. And if the frames all cover the whole canvas, the encoder never worked out which part actually changed — which on anything filmed or recorded is most of the file.

What is the difference between the two frame views?

The canvas after each frame is what a viewer shows at that moment: this frame drawn on top of whatever the frames before it left behind. Only what each frame stores is the rectangle the file actually holds for that frame, on its own, with nothing underneath.

The second is the interesting one. A GIF may store a frame as only the part of the picture that changed, which is why a screen recording of a mostly-still window can be small. If every frame in your file is the full canvas, nothing did that work — and you cannot tell by watching the animation, only by looking at what is stored.

It says my file has a comment or XMP in it. What is that?

Text that rides along with the picture and that no viewer draws. A comment block is usually the name of whatever wrote the file. An XMP packet is the XML an image editor writes to record what it did, and it can carry the edit history, the software version and sometimes the author's name.

This page prints both out in full, because the interesting question about metadata is what it says rather than that it exists. It is shown to you and to nobody else: nothing in this repository reads any of it out to anyone.

Can it open a broken GIF?

It tries, and it tells you where it gave up. A file that ends mid-block, has a byte where a block marker should be, or carries a frame whose compressed data runs out early will still show everything that was readable before that point, with the problem named at the top. That is the case an analyzer is most wanted for, so throwing the whole file away over one bad byte would be the wrong behaviour.

Does it change my file?

No. This tool only reads. There is no output file, no re-encode and no button here that writes a GIF — the only thing you can download is a plain-text copy of the analysis. Your original is untouched on your disk, which is also the honest answer to what happens if you close the tab.

Is it free, and do I need an account?

It is free, with no account, sign-in or trial. Reading a file still depends on your machine’s memory. Drawing stops at 300 million decoded pixels or an estimated 512 MiB of buffers owned by this page; this estimate is not a total browser-memory limit. After drawing stops or you cancel it, headers, byte accounting and timing remain available, undrawn frames are described from headers, and complete pixel-use totals and the native animation preview are unavailable. The initial parse and native memory/canvas operations cannot be interrupted mid-call. The site carries advertising; the ads receive no information about your file.

Does it work offline?

Yes. Load the page once, then disconnect from the internet and it keeps working. That is also the simplest way to prove nothing is being uploaded: a tool that sent your GIF away to be analysed would stop the moment you unplugged.