User Rating 0.0 โ˜…โ˜…โ˜…โ˜…โ˜…
Total Usage 0 times

Drop a PNG file here or click to browse

Supports PNG & APNG files up to 200 MB

Is this tool helpful?

Your feedback helps us improve.

โ˜… โ˜… โ˜… โ˜… โ˜…

About

Not every PNG that claims to be animated actually is. The APNG format extends the standard PNG specification by embedding an Animation Control chunk (acTL) and Frame Control chunks (fcTL) alongside traditional IDAT data. A missing or malformed acTL chunk means the file will render as a static image in every browser, even if frame data exists. Misidentifying a static PNG as animated (or vice versa) causes rendering failures in web applications, broken CSS sprite sheets, and inflated file sizes with no visual payoff.

This tool performs byte-level binary inspection of the uploaded file. It validates the 8-byte PNG signature, iterates every chunk in the file, and checks for the presence and structural validity of acTL, fcTL, and fdAT chunks per the APNG specification. It reports frame count, loop count, per-frame delay (delay_numdelay_den), dispose and blend operations, and flags any structural anomalies. No data leaves your browser. The file is parsed entirely client-side using the ArrayBuffer API.

apng png animated png apng checker apng detector png animation image analysis file inspector

Formulas

A valid PNG file starts with an 8-byte magic signature that must match exactly:

Signature = 89 50 4E 47 0D 0A 1A 0Ahex

Each chunk in a PNG file follows a fixed binary structure:

Chunk = Length4 bytes + Type4 bytes + DataLength bytes + CRC4 bytes

where Length is a big-endian unsigned 32-bit integer representing only the data field size (excluding type and CRC). The CRC is computed over Type + Data using the CRC-32 polynomial:

P(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

APNG detection requires locating an acTL chunk (Animation Control) positioned before the first IDAT chunk. The acTL contains:

acTL = num_framesuint32 + num_playsuint32

where num_plays = 0 means infinite looping. Each frame's timing is defined in its fcTL chunk:

delay = delay_numdelay_den seconds

where if delay_den = 0, it is treated as 100 (i.e., delay is in hundredths of a second). The dispose_op field controls how the frame buffer is cleared: 0 = none, 1 = background, 2 = previous. The blend_op controls compositing: 0 = source, 1 = over.

Reference Data

Chunk TypeRequiredPurposeLength (bytes)Position Rule
IHDRYes (PNG)Image header: width, height, bit depth, color type13Must be first chunk
acTLYes (APNG)Animation Control: frame count, play count8Before first IDAT
fcTLYes (APNG)Frame Control: dimensions, offsets, delay, dispose/blend ops26Before corresponding IDAT or fdAT
fdATYes (APNG)Frame Data: compressed image data for non-default framesVariableAfter its fcTL
IDATYes (PNG)Image data (default frame in APNG)VariableAfter IHDR
IENDYes (PNG)Image trailer, marks end of file0Must be last chunk
PLTEConditionalPalette for indexed-color imagesVariableBefore IDAT
tRNSNoTransparency dataVariableAfter PLTE
gAMANoGamma correction value4Before IDAT
cHRMNoChromaticity coordinates32Before PLTE
sRGBNoStandard RGB color space intent1Before PLTE
iCCPNoICC color profileVariableBefore PLTE
tEXtNoText metadata (uncompressed)VariableAnywhere
zTXtNoCompressed text metadataVariableAnywhere
iTXtNoInternational text (UTF-8)VariableAnywhere
pHYsNoPhysical pixel dimensions (DPI)9Before IDAT
sBITNoSignificant bits per channelVariableBefore PLTE
bKGDNoDefault background colorVariableAfter PLTE, before IDAT
hISTNoPalette histogramVariableAfter PLTE
tIMENoLast modification time7Anywhere

Frequently Asked Questions

The only structural difference is the presence of an acTL (Animation Control) chunk positioned before the first IDAT chunk, plus one or more fcTL/fdAT chunk pairs for additional frames. A standard PNG viewer that does not recognize these chunks will ignore them and render only the default IDAT image, which is by design - APNG is backwards-compatible with PNG.
If the acTL chunk appears after the first IDAT, the file violates the APNG specification and compliant decoders will treat it as static PNG. Additionally, some older browsers (notably Internet Explorer and early Edge versions) never implemented APNG support. Verify with this tool that acTL precedes all IDAT chunks.
Each frame's fcTL chunk contains delay_num and delay_den fields. The delay between frames is delay_num รท delay_den seconds. If delay_den is 0, it defaults to 100. A delay_num of 1 with delay_den of 30 yields approximately 33.3 ms per frame (~30 fps).
Yes. The CRC-32 checksum covers the chunk type and data fields. A mismatch means the bytes were altered after encoding - either by data corruption during transfer, incomplete download, or deliberate modification. This tool validates CRC for every chunk and flags mismatches. A file with CRC errors may still render in tolerant decoders but is technically non-conformant.
This is a specification violation. Compliant APNG decoders should reject the animation and fall back to rendering the default image. Some lenient decoders will animate as many frames as they find. This tool counts both the declared num_frames value and the actual fcTL chunks present, and reports any discrepancy.
No. GIF and PNG/APNG are entirely different binary formats. A renamed GIF will fail the PNG signature check (the first 8 bytes will not match). This tool immediately detects and reports an invalid PNG signature.