APNG Creator
Create animated PNG (APNG) files from multiple images. Set frame delays, loop count, and export production-quality APNG animations directly in your browser.
Drop images here or click to browse
PNG, JPG, WebP, GIF, BMP, SVG • Max 50 MB total
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.
Formulas
The APNG format extends PNG by inserting animation-specific chunks. The binary structure follows this sequence:
Each PNG chunk follows a fixed structure of 4 bytes length, 4 bytes type, variable data, and 4 bytes CRC32 checksum:
Frame delay is expressed as a rational number in seconds:
The CRC32 checksum is computed over the chunk type and data bytes using a 256-entry lookup table with polynomial 0xEDB88320:
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
| Format | Colors | Alpha | Animation | Compression | Avg File Size (100 frames, 256×256) | Browser Support |
|---|---|---|---|---|---|---|
| APNG | 16.7M (24-bit) | Full 8-bit | Yes | Lossless (Deflate) | ~2 - 8 MB | Chrome, Firefox, Safari, Edge |
| GIF | 256 indexed | 1-bit (on/off) | Yes | Lossless (LZW) | ~1 - 4 MB | Universal |
| WebP | 16.7M | Full 8-bit | Yes | Lossy/Lossless (VP8) | ~0.5 - 3 MB | Chrome, Firefox, Edge (no Safari <14) |
| AVIF | 16.7M+ | Full | Yes (AVIFS) | Lossy/Lossless (AV1) | ~0.3 - 2 MB | Chrome, Firefox (partial Safari) |
| MNG | 16.7M | Full 8-bit | Yes | Lossless (Deflate) | ~3 - 10 MB | None (deprecated) |
| FLIF | 16.7M+ | Full 16-bit | Yes | Lossless (MANIAC) | ~1 - 5 MB | None (experimental) |
| APNG Chunk Structure | ||||||
| Chunk Type | Purpose | Required | ||||
| IHDR | Image header (width, height, bit depth) | Yes (once) | ||||
| acTL | Animation control (num_frames, num_plays) | Yes (once, before IDAT) | ||||
| fcTL | Frame control (dimensions, offsets, delay, dispose/blend) | Yes (per frame) | ||||
| IDAT | Image data for first frame | Yes (first frame) | ||||
| fdAT | Frame data for subsequent frames | Yes (frames 2 - N) | ||||
| IEND | Image trailer (end marker) | Yes (once) | ||||
| Common Frame Delays | ||||||
| Animation Speed | Delay | FPS Equivalent | delay_num | delay_den | ||
| Very Fast | 33 ms | 30 fps | 1 | 30 | ||
| Fast | 50 ms | 20 fps | 1 | 20 | ||
| Standard | 100 ms | 10 fps | 1 | 10 | ||
| Slow | 200 ms | 5 fps | 1 | 5 | ||
| Very Slow | 500 ms | 2 fps | 1 | 2 | ||
| Slideshow | 1000 ms | 1 fps | 1 | 1 | ||