User Rating 0.0
Total Usage 0 times

Drop images here or click to browse

PNG, JPG, WebP, GIF, BMP, SVG • Max 50 MB total

Is this tool helpful?

Your feedback helps us improve.

About

APNG (Animated Portable Network Graphics) supports full 24-bit color depth with an 8-bit alpha channel, unlike GIF which is constrained to 256 indexed colors. Choosing GIF for assets with gradients or semi-transparency introduces visible banding and hard-edged matte artifacts. This tool performs real binary-level APNG assembly: each input frame is encoded as a PNG, its compressed image data (IDAT) is extracted, and the chunks are repackaged with animation control headers (acTL, fcTL, fdAT) per the APNG specification. No server-side processing occurs. All encoding happens in your browser via ArrayBuffer manipulation.

Frame timing is specified as a rational fraction delay_numdelay_den in seconds, giving sub-millisecond precision. The tool approximates this from your millisecond input. Note: browsers that do not support APNG (older IE/Edge Legacy) will display only the first frame as a static PNG, which is the correct fallback behavior defined by the spec. Maximum practical frame count depends on available browser memory. Expect reliable results up to approximately 200 frames at 1920×1080 resolution.

apng animated-png png-animation image-editor apng-maker frame-animation image-to-apng

Formulas

The APNG format extends PNG by inserting animation-specific chunks. The binary structure follows this sequence:

PNG Signature IHDR acTL fcTL0 IDAT0 fcTL1 fdAT1 fcTLN fdATN IEND

Each PNG chunk follows a fixed structure of 4 bytes length, 4 bytes type, variable data, and 4 bytes CRC32 checksum:

chunk = uint32(length) + ascii(type) + data[0..length] + CRC32(type + data)

Frame delay is expressed as a rational number in seconds:

delay = delay_numdelay_den seconds

The CRC32 checksum is computed over the chunk type and data bytes using a 256-entry lookup table with polynomial 0xEDB88320:

CRC32(buf) = NOT(n1i=0 table[(crc &xor; buf[i]) 0xFF] &xor; (crc >>> 8))

Where delay_num is the numerator of the delay fraction, delay_den is the denominator (if 0, treated as 100), crc is the running checksum initialized to 0xFFFFFFFF, and buf is the byte sequence over which the CRC is computed.

Reference Data

FormatColorsAlphaAnimationCompressionAvg File Size (100 frames, 256×256)Browser Support
APNG16.7M (24-bit)Full 8-bitYesLossless (Deflate)~2 - 8 MBChrome, Firefox, Safari, Edge
GIF256 indexed1-bit (on/off)YesLossless (LZW)~1 - 4 MBUniversal
WebP16.7MFull 8-bitYesLossy/Lossless (VP8)~0.5 - 3 MBChrome, Firefox, Edge (no Safari <14)
AVIF16.7M+FullYes (AVIFS)Lossy/Lossless (AV1)~0.3 - 2 MBChrome, Firefox (partial Safari)
MNG16.7MFull 8-bitYesLossless (Deflate)~3 - 10 MBNone (deprecated)
FLIF16.7M+Full 16-bitYesLossless (MANIAC)~1 - 5 MBNone (experimental)
APNG Chunk Structure
Chunk TypePurposeRequired
IHDRImage header (width, height, bit depth)Yes (once)
acTLAnimation control (num_frames, num_plays)Yes (once, before IDAT)
fcTLFrame control (dimensions, offsets, delay, dispose/blend)Yes (per frame)
IDATImage data for first frameYes (first frame)
fdATFrame data for subsequent framesYes (frames 2 - N)
IENDImage trailer (end marker)Yes (once)
Common Frame Delays
Animation SpeedDelayFPS Equivalentdelay_numdelay_den
Very Fast33 ms30 fps130
Fast50 ms20 fps120
Standard100 ms10 fps110
Slow200 ms5 fps15
Very Slow500 ms2 fps12
Slideshow1000 ms1 fps11

Frequently Asked Questions

Non-supporting browsers (Internet Explorer, Edge Legacy before Chromium) display only the first frame as a standard static PNG. This is by design in the APNG specification: the animation chunks (acTL, fcTL, fdAT) are classified as ancillary and are silently ignored by decoders that do not recognize them. The first frame's IDAT data renders as normal. All modern browsers (Chrome 59+, Firefox 3+, Safari 8+, Edge 79+) fully support APNG playback.
APNG uses lossless Deflate compression on full RGBA pixel data (32 bits per pixel), while GIF quantizes to a maximum 256-color palette (8 bits per pixel). For a 256×256 frame, APNG stores up to 262,144 bytes of raw pixel data per frame versus GIF's ~65,536 bytes. The tradeoff is image quality: APNG preserves gradients and semi-transparent pixels perfectly. To reduce APNG file size, resize frames to smaller dimensions or reduce the total frame count.
The dispose_op field in each fcTL chunk controls what happens to the canvas region after the frame is displayed. Value 0 (APNG_DISPOSE_OP_NONE) leaves the frame in place. Value 1 (APNG_DISPOSE_OP_BACKGROUND) clears the region to transparent black. Value 2 (APNG_DISPOSE_OP_PREVIOUS) restores the region to the state before the frame was drawn. This tool uses APNG_DISPOSE_OP_NONE by default, which works correctly for full-frame animations where each frame replaces the entire canvas.
The practical limit is browser memory. Each frame is held as an Image object and rendered to an offscreen Canvas for PNG export. A single 1920×1080 RGBA frame consumes approximately 8.3 MB of uncompressed memory. With 100 frames, that is ~830 MB. Most browsers allocate 1-4 GB to a tab. For reliable operation, stay below 200 frames at 1080p or 500 frames at 512×512. The tool will display an error if a Canvas toBlob operation fails due to memory pressure.
Yes. Each frame in the APNG specification has its own fcTL chunk with independent delay_num and delay_den values. This tool exposes per-frame delay controls. Click any frame thumbnail to edit its individual delay in milliseconds. The global delay setting applies to all frames initially, but per-frame overrides take precedence. This allows effects like a slow pause on one keyframe while the rest animate at 30 fps.
A loop count (num_plays in acTL) of 0 means infinite looping, per the APNG specification. A value of 1 means play once and stop. A value of 3 means play 3 times total. This matches the behavior of GIF's Netscape Application Extension where 0 also means infinite. The tool defaults to 0 (infinite) which is the expected behavior for most animated images used on the web.