Conversation
The ZopfliPNG pass re-encodes the default image, possibly with a new color type or bit depth (e.g. RGBA -> palette), and then copies the remaining chunks back unchanged. For an APNG those include the fdAT frames, which are still encoded in the original color type, so every frame after the first decodes to garbage. With -strip the animation chunks are not copied back and the APNG becomes a still image. OptiPNG already avoids reductions for APNGs, so skip the ZopfliPNG pass for files with an acTL chunk before IDAT. Other PNGs are unchanged (byte-identical output). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ECT breaks animated PNGs. The ZopfliPNG pass may reduce the default image (e.g. RGBA to palette) and then copies the
fdATchunks back unchanged, so every frame after the first decodes to garbage. With-stripthe animation is dropped instead.OptiPNG already skips reductions for APNGs, so this makes
Zopflipng()skip files with anacTLchunk. APNGs now keep all frames in every mode; above-1they are otherwise left as they are. Regular PNGs give byte-identical output to master.Tested with a 3-frame APNG in
-1,-3,-5 --strict,-9,--allfiltersand with-strip, and with truncated files in a hardened libc++ build.🤖 Generated with Claude Code