APNG (Animated PNG) Detector
Drop in a PNG to find out if it is an animated PNG (APNG). The tool validates the 8-byte PNG signature, reads the dimensions from the header, and looks for the acTL animation chunk to report the frame count and how many times the animation loops. The file is read entirely in your browser and never uploaded.
How to detect an animated PNG
- Drag a .png or .apng file onto the box, or click browse to pick one.
- Read the badge that tells you whether the file is animated or static.
- Check the frame count, loop count, and dimensions shown alongside it.
Examples
An animated sticker
sticker.png (an APNG exported from an animation tool)
Animated, 12 frames, loops forever, 320 x 320
A normal screenshot
screenshot.png (a flat single-frame PNG)
Static PNG, 1 frame, 1920 x 1080
Frequently asked questions
Is my PNG uploaded anywhere?
No. Nothing is uploaded. The file is read and parsed entirely in your browser using JavaScript, so the image never leaves your device.
What is an APNG?
APNG (Animated PNG) is an extension of the PNG format that stores a short animation while staying backward compatible with regular PNG viewers. It adds an acTL control chunk plus fcTL frame chunks and fdAT frame data, so an old decoder simply shows the first image and ignores the rest.
How does the detector know a PNG is animated?
It walks the PNG chunk stream and looks for the acTL (animation control) chunk. A PNG is treated as animated only when that chunk is present. The acTL data also carries the number of frames and the number of times the animation should play.
What does a loop count of zero mean?
The acTL chunk stores num_plays. A value of zero means the animation loops forever, which is why the tool shows 'Loops forever' for zero. Any positive number is the exact count of times the animation plays before stopping.
Why does the frame count sometimes differ from the number of fcTL chunks?
The acTL chunk declares num_frames, while each rendered frame has its own fcTL chunk. They normally match. The tool shows both so you can spot a malformed or truncated file where the declared count and the actual fcTL count disagree.
Is the default image part of the animation?
It depends on chunk order. If the first fcTL comes before the IDAT image data, the default image is the first animation frame. If IDAT comes first, the default image is only a static fallback for non-APNG viewers and is not counted in the loop.
Related tools
PNG Chunk Inspector
Inspect the internal chunks of a PNG file in your browser. See each chunk's type, length, byte offset, and whether it is critical or ancillary. Private.
Image Metadata Viewer
View an image's EXIF and metadata in your browser: camera make and model, dimensions, format, orientation, and whether GPS location is embedded. Private.
GIF Frame Counter
Count the frames in an animated GIF and see its dimensions, total duration, loop count, and per-frame delays. Runs in your browser, nothing is uploaded.
Add Border to Image
Add a colored border or frame around an image, with adjustable width and color. Live preview, runs in your browser, nothing uploaded.
Blur Image
Blur a whole image or drag a box to blur a face, name, or address. Adjustable blur strength, live preview, runs in your browser. Nothing is uploaded.
BMP Header Viewer
Inspect a BMP file's header in your browser: width, height, bit depth, compression, DPI, palette size, and pixel data offset. Nothing is uploaded.