Changes since v0.12.0
Performance:
- perf(invisible): fp16 weight variant --
InvisibleEnginenow loads the fp16 weightvarianton float16 (CUDA/XPU), reading the half-precision weight files (~3.5 GB) instead of the full fp32 files (~7 GB) and downcasting. Roughly halves the cold-start weight read and host-to-device transfer; falls back to the default weights when a checkpoint ships no fp16 variant. fp32 (cpu/mps) and bf16 (qwen) are unaffected.
Detection and removal:
- feat(identify): NovelAI / Reve / Aphrodite generator stamps -- new
AI_GENERATOR_TOKENSentries surfaced through the existingexif_generatorsignal. NovelAI stamps in PNGtEXtchunks (Software/Source/Title), soexif_generatornow reads PNG text chunks in addition to EXIF/XMP; Reve writesreve.com(full token to avoid false-firing on "forever"/"reverie"), Aphrodite writesAphrodite AI. Detection and removal stay in parity.
Fidelity:
- feat(invisible): skip the diffusion scrub when no invisible watermark is detectable (P0#5) -- regenerating pixels degrades a clean image, so
invisible/all/batchnow skip the scrub by default whenidentify.has_invisible_target()finds no locally-detectable invisible AI signal (--forceoverrides). A skip never claims the image is clean and fails safe (a detector error runs the removal). Newidentify.has_invisible_target(path)+ProvenanceReport.ai_from_metadatafor callers (e.g. the raiw.cc worker) to reuse the gate.
No breaking changes (all additive).