mirror of
https://github.com/wiltodelta/remove-ai-watermarks.git
synced 2026-07-12 02:56:32 +02:00
178fed69a7
Resolve 10 code-review findings on the v0.14.0 localize->fill path, several release-blocking: - gemini: build the removal mask from the decision's provenance-aware region instead of a strict internal re-detect. A relaxed/assume_ai sparkle was re-demoted by the FP gate into a None mask and reported removed while left in the image; this also drops the redundant double-detect. - registry: report a mark removed only when a fill actually happened (remove() returns a None region for an empty mask), so a no-op is never claimed. - api/cli: add write_noop so the CLI `visible` no-mark path writes nothing and cannot clobber a pre-existing -o file (was write-then-unlink -> data loss); create output.parent; skip the same-file copy (SameFileError on in-place). - cli: catch the missing migan/lama backend RuntimeError on the visible/all paths (matches `erase`); route the single-mark relaxation through the shared resolve_relax instead of an inline copy. - metadata: keep_standard=False no longer takes the AI-only lossless JPEG short-circuit (it left standard metadata); defer a malformed-marker JPEG to the PIL fallback instead of reporting a partial strip as complete. - invisible: register the HEIF opener before Image.open (HEIC --force) and RGB-convert before the PNG temp (CMYK JPEG). - pill: normalize via to_bgr so a 4-channel BGRA array cannot crash cvtColor. Regression tests for each; docs synced (resolve_relax, write_noop, best_auto_mark -> detect_marks). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>