mirror of
https://github.com/wiltodelta/remove-ai-watermarks.git
synced 2026-08-06 22:18:36 +02:00
remove_ai_metadata chose its save format (and the lossless-JPEG fast path) from the OUTPUT file extension. On the ~2% of real uploads whose extension lies about their content (a PNG served as .jpg is the common case, ~0.9% of the corpus), the default flow -- which inherits the source's own extension -- re-encoded a lossless PNG/WebP into a real JPEG, silently degrading the pixels and breaking the "work with originals" invariant. Sniff the actual container from magic bytes (_sniff_image_format, reusing the 12-byte head already read for the ISOBMFF check) and route on content: a misnamed lossless source (source-extension format != content) is preserved in its true format, while a correctly-named source still honors a deliberate output-extension conversion (source.png -> output.jpg). The JPEG-lossless gate is likewise content-gated. Found by a new metadata-removal parity audit over the local corpus (scripts/metadata_removal_audit.py): 18170/18173 carriers strip cleanly, and this fix takes the 208 pixel-integrity failures (all misnamed PNGs) to 0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>