# APNG IDAT/fdAT Chunk, Streaming Deflate Replay and Disposal Method Frame-Timing Analyzer

Upload a PNG or APNG and audit the whole animation structure: PNG signature and per-chunk CRC32 checks, IHDR bit depth / color type / interlace, acTL placement and declared frame counts, every fcTL (region bounds inside the canvas, normalized delay fractions, dispose_op none/background/previous, blend_op source/over), the shared fcTL+fdAT sequence-number contract from 0, per-frame replay of the IDAT/fdAT deflate streams with exact decompressed-size verification, and disposal-semantics audit — first-frame PREVIOUS treated as BACKGROUND, zero-delay frames, loop counts, fps and compression ratios.

> Canonical page: https://elysiatools.com/en/tools/apng-idat-fdat-chunk-streaming-deflate-replay-and-disposal-method-analyzer

- **Category:** Compression

- **Keywords:** APNG, animated PNG, fcTL, fdAT, acTL, dispose op, blend op, PNG chunks, CRC32, deflate replay, frame timing

## Overview

Implements the Mozilla community APNG specification on top of the ISO PNG chunk model: acTL must precede the first IDAT and its num_frames must equal the fcTL count (0 is invalid); the default image joins the animation only when its fcTL precedes the first IDAT and then must cover the full canvas at (0,0); fcTL and fdAT share one sequence space that must run 0,1,2,… without gaps or duplicates, and out-of-order chunks are errors; delay_den = 0 is normalized to 100 (hundredths of a second) while delay_num = 0 means render the next frame as fast as possible. Each frame's compressed stream is the concatenation of its IDAT (or fdAT minus the 4-byte sequence number) chunks; after inflation it must measure exactly height × (1 + ceil(width × bitsPerPixel / 8)) with the filter byte per scanline, so truncated or corrupt zlib streams are caught precisely. The disposal replay flags dispose_op = PREVIOUS on the first frame (spec-required downgrade to BACKGROUND), counts zero-delay frames and reports whether any frame actually needs the previous-buffer copy. Pure TypeScript with node:zlib — files are analyzed locally in bounded memory.

## Inputs

- **PNG / APNG file (≤20MB)** (file): sample-apng-3frame.png
- **Replay and verify IDAT/fdAT deflate streams** (checkbox)

## When to use

- Debugging broken or stuttering APNG animations across different web browsers and image decoders.
- Verifying sequence numbering and chunk CRC32 integrity after generating animated PNG assets via automated build pipelines.
- Auditing frame timing, sub-frame coordinate bounds, blend modes, and disposal methods to optimize compression efficiency.

## How it works

- Parses the PNG signature, IHDR parameters, and standard chunk headers while verifying CRC32 checksums and proper acTL positioning.
- Audits every fcTL frame descriptor for canvas bounds, sequence order starting at 0, normalized delay denominators, and dispose or blend operations.
- Replays the concatenated IDAT and fdAT deflate streams when enabled to verify Adler-32 checksums and scanline byte dimensions against expected bit-depth layouts.

## Use cases

- Validating animated UI stickers and reaction icons before bundling them into mobile application assets.
- Testing APNG export plugins and encoder libraries for strict conformance with chunk ordering and sequence rules.
- Diagnosing render artifacts caused by improper blend_op configurations or mismatched sub-canvas bounding boxes.

## Frequently asked questions

### What happens if delay_den is set to 0 in an fcTL chunk?

According to the APNG specification, a delay_den value of 0 is normalized to 100, treating the delay numerator as hundredths of a second.

### How are sequence numbers validated across fcTL and fdAT chunks?

All fcTL and fdAT chunks share a single sequential counter that must begin at 0 and increment strictly by 1 without gaps or duplicates.

### Why is dispose_op PREVIOUS flagged on the first frame?

The APNG standard specifies that requesting a restore to previous state on frame 0 must be treated as clearing to background because no prior canvas exists.

### What does verifying the deflate streams check?

It inflates the concatenated raw image stream of each frame to confirm zlib integrity and ensure decompressed bytes match expected scanlines and filter bytes.

### Does the default PNG image count as an animation frame?

It is counted as the first animation frame only if an fcTL chunk appears before the first IDAT chunk; otherwise, it serves solely as the fallback image.

## Related tools

- [Image Color Palette Extractor](https://elysiatools.com/en/tools/image-color-palette-extractor): Extract dominant colors from an image, export code-ready tokens, and check contrast ratios
- [NSFW Image Content Detector](https://elysiatools.com/en/tools/nsfw-image-detector): AI content-moderation classifier using NSFWJS to flag uploaded images as safe or potentially inappropriate. Built for moderation and compliance review of your own files — it analyzes uploads only and is not an image search or discovery tool. Supports JPEG/PNG/WEBP/GIF.
- [Image to WEBP Batch Converter](https://elysiatools.com/en/tools/image-to-webp-batch-converter): Convert up to 20 uploaded images, or images inside a ZIP archive, into WebP files packaged as a ZIP
- [Convert JPEG to PNG](https://elysiatools.com/en/tools/jpg-to-png): Convert JPEG images to PNG format with transparency support and lossless compression
- [Convert PNG to 8-bit PNG](https://elysiatools.com/en/tools/png-to-8bit-png): Convert PNG images to 8-bit color depth for smaller file size and better compatibility
- [Convert PNG to AVIF](https://elysiatools.com/en/tools/png-to-avif): Convert PNG images to AVIF format with next-generation compression and superior quality-to-size ratio
- [Convert PNG to Optimized PNG](https://elysiatools.com/en/tools/png-to-optimized-png): Convert PNG images to optimized PNG format with advanced compression settings and quality preservation
- [Convert PNG to TIFF](https://elysiatools.com/en/tools/png-to-tiff): Convert PNG images to TIFF format with compression options and high quality preservation

## Samples

- [Web Image Processing Python Samples](https://elysiatools.com/en/samples/web-image-processing-python): Web Python image processing examples using PIL/Pillow including reading, saving, resizing, and format conversion
- [PNG Samples](https://elysiatools.com/en/samples/png-samples): Sample PNG images in different aspect ratios and resolutions
- [PNG Viewer Samples](https://elysiatools.com/en/samples/png-viewer-samples): Sample PNG, BMP and AVIF images for the in-browser PNG Viewer
- [Web Image Processing Go Samples](https://elysiatools.com/en/samples/web-image-processing-go): Web Go image processing examples including image reading/saving, image resizing, and format conversion
