User Rating 0.0
Total Usage 0 times

Drop your APNG file here or browse

Animated PNG • Max 50 MB

Is this tool helpful?

Your feedback helps us improve.

About

APNG frame timing is controlled by two 16-bit fields in each fcTL chunk: delay_num and delay_den. The actual delay per frame equals delay_numdelay_den seconds. A denominator of 0 is treated as 100 per the APNG specification. Miscalculating these values produces animations that stutter, freeze, or race through frames. This tool parses the raw binary structure of your APNG file, recalculates every fcTL delay pair using your chosen speed multiplier, recomputes CRC32 checksums for modified chunks, and outputs a valid APNG. No server upload occurs. All processing happens in your browser.

The tool handles edge cases: zero denominators, extremely small delays that underflow to zero (clamped to 1/65535), and files with hundreds of frames. Note: this tool modifies timing metadata only. It does not re-encode pixel data, so output quality is lossless. Files exceeding 50 MB are rejected to prevent browser memory issues.

apng animated png apng speed change animation speed apng editor frame delay apng modifier

Formulas

Each frame in an APNG file contains a fcTL chunk with two timing fields. The actual display duration of a single frame is computed as:

delay = delay_numdelay_den seconds

When delay_den = 0, the specification mandates treating it as 100, making the delay unit centiseconds.

To change speed by a multiplier m, the new delay becomes:

delay_new = delay_originalm

This tool normalizes all delays to a common denominator of 1000 (milliseconds), applies the multiplier, then finds the best-fit integer pair (delay_num, delay_den) within the 16-bit unsigned range (0 - 65535). The minimum effective delay is clamped to 1/65535 seconds to prevent zero-duration frames.

After modifying each fcTL chunk, the CRC32 checksum must be recalculated over the chunk type + chunk data:

CRC = crc32(chunkType + chunkData)

Where CRC uses the polynomial 0xEDB88320 (reversed representation of the ISO 3309 / ITU-T V.42 standard polynomial).

Variable Legend: delay_num = frame delay numerator (16-bit unsigned integer). delay_den = frame delay denominator (16-bit unsigned integer). m = user-selected speed multiplier. CRC = 32-bit cyclic redundancy check value appended to each PNG chunk.

Reference Data

Speed MultiplierEffectOriginal 100ms Delay BecomesUse Case
0.1×10× slower1000 msFrame-by-frame analysis
0.25×4× slower400 msSlow-motion effect
0.5×2× slower200 msGentle slow-down
0.75×Slightly slower133 msSubtle timing tweak
1.0×Original speed100 msNo change (reference)
1.25×Slightly faster80 msSubtle speed-up
1.5×1.5× faster67 msSnappier animations
2.0×2× faster50 msQuick loops, GIF-like feel
3.0×3× faster33 msRapid cycling (~30 fps)
4.0×4× faster25 msNear-realtime playback
5.0×5× faster20 msMaximum speed (50 fps)
APNG Chunk Types Reference
acTLAnimation Control: stores num_frames and num_plays (0 = infinite loop)
fcTLFrame Control: per-frame dimensions, offsets, delay, dispose/blend operations (26 bytes payload)
fdATFrame Data: compressed pixel data for frames 2+. Identical to IDAT with 4-byte sequence prefix
IDATImage Data: compressed pixel data for the default (first) frame
IHDRImage Header: width, height, bit depth, color type (13 bytes payload)
IENDImage End: zero-length terminator chunk
Delay Denominator Special Values
0Treated as 100 per APNG spec (delay in centiseconds)
1000Delay in milliseconds (common convention)
100Delay in centiseconds (default/legacy)

Frequently Asked Questions

Both delay_num and delay_den are 16-bit unsigned integers, capping at 65535. The smallest representable nonzero delay is 1/65535 seconds (~0.015 ms). In practice, most browsers clamp frame delays to approximately 10 ms regardless of the declared value. This tool clamps the computed delay to a minimum of 1/1000 (1 ms) to avoid zero-duration frames, which some renderers interpret as "use default delay" (~100 ms), producing unexpected slowdowns.
No. This tool modifies only the fcTL chunk timing fields (4 bytes per frame) and their associated CRC32 checksums (4 bytes per chunk). Compressed pixel data in IDAT and fdAT chunks remains untouched. The output file size differs from the input by zero bytes since the modified fields occupy the same space as the originals.
Each frame's delay is independently multiplied. If frame 1 has a delay of 100 ms and frame 2 has 200 ms, applying a 2× multiplier produces 50 ms and 100 ms respectively. The relative timing ratio between frames is preserved. This is critical for animations with intentional pauses or easing effects.
Some renderers (notably older browsers and image viewers) do not fully support the APNG specification. Firefox was the first browser to support APNG (2008). Chrome added support in version 59 (2017). Applications that fall back to the static PNG default image will show only the first frame. Additionally, renderers that impose minimum frame delays (typically 10 - 20 ms) will cap extremely fast animations regardless of the declared delay values.
No. This tool operates exclusively on the timing metadata of existing APNG files. It requires a valid APNG input containing an acTL chunk and at least one fcTL chunk. Static PNGs lack these chunks and will be rejected with an error. Frame manipulation (adding, removing, reordering) requires full re-encoding of compressed data, which is a fundamentally different operation.
Every PNG chunk ends with a 4-byte CRC32 checksum computed over the chunk type code and chunk data fields. When fcTL delay bytes are modified, the existing checksum becomes invalid. Renderers that verify checksums (per the PNG specification, verification is recommended but not mandatory) will reject or skip chunks with mismatched CRCs. This tool recalculates CRC32 using the standard polynomial 0xEDB88320 to ensure full compliance.