v0.15.0
Fixes
- Metadata strip parity across every marker placement — IPTC
digitalSourceTypein XMP, the Samsung post-EOI trailer, the China TC260 AIGC block in EXIFUserComment, a bareAIGC{…}block in a non-standard APP segment, and the ISOBMFF EXIF path (AIGC + xAI) are all now stripped. Anything a scanner flags, the strip reaches. - Samsung
genAITypeis now detected when its trailer sits past the 512 KB scan window (large phone photos). - Crash fixes on edge inputs: the Gemini detector on images with a short side < 16 px,
footprint_maskon a zero-size array, the humanizer onchromatic_shift ≥ width, and the CLI on unreadable/corrupt/empty input (clean error instead of a traceback). - WebP is now written losslessly (it was lossy at quality 100).
- IPTC
algorithmicMedia(procedural — an algorithm not trained on sampled data) is no longer flagged as AI-generated, so clean procedural content is not scrubbed. - C2PA source-type:
compositeWithTrainedAlgorithmicMediais resolved before the barealgorithmicMediatoken.
Detection
- Integrity-clash detection now normalizes ByteDance / Canva / ElevenLabs / Black Forest Labs, so a transplanted manifest next to an independent conflicting stamp is caught. The generic China TC260 AIGC label is attributed to a co-present TC260 vendor, so a legitimate Doubao image (its own C2PA plus its own TC260 label) does not clash. Corpus-validated: 0 new clashes on 5000 carriers.
CLI
batchnow exits non-zero (with a warning) when any image errors or a GPU-missing SynthID scrub is skipped, and copies the input through so the output directory stays complete — it used to always exit 0 and could silently drop the files that most needed processing.
Performance
GeminiEngineis reused as a process-wide singleton with a precomputed template ladder: about 24% faster on theidentifysparkle path, with byte-identical detection.
Full changelog: v0.14.1...v0.15.0