github guillaumemeyer/watermarks-remover v0.7.0
v0.7.0 — /clean Layer B rewrite, watermark-stealing module, audio/video watermark removal, and benchmark/tooling breadth

2 hours ago

v0.7.0 brings the Layer B statistical-mark rewrite into the /clean service itself, driven by a configurable, benchmark-tuned strategy (paraphrase@0.8,mlm@0.2). Alongside it: a black-box watermark-stealing module, destructive audio and per-frame video watermark removal, a substantially richer rewrite benchmark, and a stack of hardening, security, and tooling fixes.

Layer B rewriting in the service

  • /clean now runs the Layer B rewrite for text after Layer A. The default comes from config/clean_strategy.json; a per-request options.strategy overrides it, and /clean rejects with 400 when the required backend isn't configured (#315). Config precedence: --strategy-config > WATERMARKS_CLEAN_STRATEGY_FILE > config/clean_strategy.json.
  • New mlm rewrite tactic: mask a fraction of content words and infill with roberta-large — a non-autoregressive local edit, so the output mixes the original token stream with masked-LM predictions (#311).
  • The humanize tactic now applies the humanizer-skill pass deterministically (straight quotes, no em/en dashes, filler collapses, utilizeuse) and names the human-writer rules in the prompt (#311). rewrite_text.py gained a --strategy CLI path.
  • Rewrite correctness: Unicode word tokenization in lexical divergence (#305); compare raw margins before rounding and record selection metadata / ranked p-values (#249).

Benchmark

  • SynthID recipe search + robust measurement (#280); renamed rewrite vocabulary, cross-input search, and humanize-last ordering (#302); recommend only strategies that still clear after the humanize polish (#307).
  • Pangram bulk API as a human-likeness backend (#296); hardened minimal-rewrite-level benchmark with a 30-doc corpus (#257); validated weight grid + widened recipe search (#294); Polish benchmark corpus (#295).

Watermark stealing

  • New black-box watermark-stealing module and prompt-corpus downloader (#303); clear stale state on start-over probe failure (#310).

Audio / video / image

  • Destructive audio watermark removal chain for silentcipher/AudioSeal/WavMark (tempo + pitch + EQ + low-bitrate re-encode → M4A) (#266).
  • Per-frame TrustMark video purification that collapses the temporal vote (#265).
  • C2PA content-provenance uuid box recognized on MP4/MOV/AVIF/HEIC (#264).
  • Preserve truncated MP4 tails during stripping (#242); keep the audio re-encode dest distinct from the container-clean dest (#278).
  • Skip discarded exiftool output and redundant SynthID in the post-clean scan (#261); degrade cleanly when exiftool can't process a PDF (#281).
  • Cap decompressed PNG zTXt/iTXt at 1 MiB (#308); strip SVG XML DOCTYPE/ENTITY declarations (#288); keep DOCX binary members byte-safe (#314); preserve OOXML AppVersion (#289).

HTTP service & CLI

  • /clean option to keep exotic spaces, mirroring the CLI (#274); /inspect exposes explicit evidence classes in the suspicious payload (#277); timestamps in HTTP request logs (#256); thread payload bytes into HTTP SynthID scoring and inspect_* to avoid a redundant read-back.
  • clean_file.py gained -q/--quiet/--only-changed (#254).

Skills, plugin & hooks

  • Stylometry scoring and detector levers for clean-user-facing-text (#258); PostToolUse hook launcher made cross-platform (#255); pre-commit hook treats byte-identical clean non-text files as changed (#238).

Audit

  • audit_dir.py scans source, docs, and i18n files the router walked past (#284); scans .ts/.tsx/.jsx/.gd and aligns space confidence across formats (#273); audit_website.py --sarif support (#194); harden in-place backups, clean-file status, SynthID verdict, truncated ID3v2, and zip routing (#201).

Security

  • Remove polynomial ReDoS in data-URI and JSON-LD scans (#306); block HTTP redirects in the SynthID scorer to prevent SSRF (#252).

CI, tooling & docs

  • CI fails when optional backend requirements can't resolve (#301); Docker image reports ffmpeg as usable and installs Ghostscript (#272); dependency bumps (cython #299, scipy #298, ruff #297, docker/setup-buildx-action #237).
  • Docs: Watermark Detectors section, ETH SRI "Probing SynthID" blog reference, Ecosystem policy (drop ClaudeWatermarks; require listed projects to use this repo) (#292).

A big thanks to everyone who filed issues, reviewed PRs, and ran the harnesses — this release is a team effort. 🎉

Full changelog: README

Don't miss a new watermarks-remover release

NewReleases is sending notifications on new releases.