Releases: guillaumemeyer/watermarks-remover
Release list
v0.3.1 — stronger Layer B statistical-watermark rewrite
rewrite_text.pydefault paraphrase now performs an explicit word-choice + syntax attack (clause order, connectors, transition words, sentence boundaries, function words) rather than a generic rewrite- New
--strength humanize: zero-shot "write like a human" pass targeting formulaic AI-style phrasing - New
--strength code: rewrites comments, docstrings, and string literals, and renames local identifiers while preserving behavior and public API names - Structural pass now emits "natural, varied human prose" instead of AI-typical "clear professional style"
- New
--temperature(default0.9) for both Ollama and OpenAI-compatible backends - New
--candidates N: generates N rewrites and selects the most lexically diverged (bigram Jaccard distance) with a length-drift guard - Stronger model hygiene: prefer local open-weight models and avoid any known-watermarked vendor, not just the suspected origin
- Residual-risk reporting now distinguishes short/highly predictable text (lower risk) from long, high-entropy prose (higher risk)
- Docs updated in
SKILL.md,removal-matrix.md, andvendor-notes.md; tests cover new prompts, divergence scoring, and candidate selection
v0.3.0 — optional SynthID pixel scoring
What's new
Optional, externally backed pixel-domain SynthID scoring for images — detection only, not removal.
score_synthid.pyadapter for an externalaloshdenny/reverse-SynthIDcheckoutinspect_image.py/clean_image.pysurface the score viaREVERSE_SYNTHID_DIRor--synthid-dirsetup_synthid.shbootstraps the checkout (scorer-only dependencies;--fullinstalls upstream requirements)Dockerfile.synthidplusmake docker-synthid-build/docker-synthid-help- New Makefile targets
smoke-synthidandbootstrap-synthid - Tests for the scorer adapter, CLI unavailable path, JSON parsing, and runtime errors
Notes
The upstream scorer is not bundled; it loads from a local checkout at runtime and remains under its non-commercial Research License. Pixel watermark removal and C2PA soft binding remain out of scope.
Verification: 33 tests pass, CLI smoke passes.
v0.2.0 — c2patool false-positive fix
watermarks-remover v0.2.0
Bug-fix release: has_manifest no longer reports a clean asset as carrying a C2PA manifest.
Fixed
image_meta.py: parenthesised the positivehas_manifestsubstring matches so the negative markers (no claim,no jumbf) veto all of them.c2patoolreports a missing manifest asError: No claim found, which contains the substringclaimand previously matched the first positive alternative — flagging every clean PNG, JPEG, PDF, SVG and DOCX as carrying C2PA. See #3.- Added
tests/test_c2patool_report.py— 4 cases:No claim found,No JUMBF data found, a genuine manifest, andc2patoolabsent.
Docs
- Fixed broken
c2patoollinks (repo moved tocontentauth/c2pa-rs). - Added a disclaimer on the quality cost of text-watermark removal.
Install
git clone https://github.com/guillaumemeyer/watermarks-remover.git
cd watermarks-remover
mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marksFull changelog: see README
v0.1.0 — packaging polish + provenance honesty
watermarks-remover v0.1.0
Minor release after v0.0.1: packaging polish and clearer honesty around the industry two-layer provenance model (C2PA + soft binding / SynthID-class media).
What's new
Packaging
Makefilewithtest,smoke, andinstall-skillpytest.ini- Fixture samples: Markdown, HTML, SVG
- PDF degraded-clean test path
Docs / honesty
- Two-layer model: hard-bound C2PA (in scope) vs soft binding / pixel-audio-video watermarks (out of scope)
- README Residual risk after a clean table + external verify links (Content Credentials, SynthID)
- Institute of AI PM C2PA & SynthID guide in references
- Skill report template, ethics, and removal matrix updated so metadata strip is not oversold
Unchanged (still from v0.0.1)
- Layer A Unicode scrub, Layer B rewrite hook, multi-format container cleaners
- Multi-vendor framing (Claude / Gemini / OpenAI / open-LLM)
Install
git clone https://github.com/guillaumemeyer/watermarks-remover.git
cd watermarks-remover
git checkout v0.1.0
make install-skill
make testFull changelog: README
v0.0.1 — initial multi-vendor release
watermarks-remover v0.0.1
First public release: agent skill + stdlib Python scripts to strip multi-vendor AI provenance marks from text and files (privacy / hygiene on content you own).
What's included
Skill
skills/remove-ai-marks/(replaces Claude-onlyremove-claude-marks)- Multi-vendor framing: Claude, Gemini/SynthID-class, OpenAI provenance, open-LLM sampling marks
- Ethics-first docs: own content only; no “undetectable human” claims
Layer A — Unicode / edit-based text
- Strip invisible controls, bidi marks, tag characters, space homoglyphs
inspect_text.py/clean_text.pywith finer inspect kinds (bidi,tag_chars,zwj_family, …)
Layer B — statistical (token-sampling) text
- Agent multi-pass rewrite recipe (paraphrase → back-translate → structural)
- Optional
rewrite_text.pyhook:print-prompt(default), Ollama, OpenAI-compatible - Best-effort only — no vendor detector / secret-key claims
Files — C2PA / AI metadata
- PNG, JPEG (existing)
- SVG, PDF (exiftool preferred), DOCX, ODT, HTML, Markdown frontmatter
- Unified
inspect_file.py/clean_file.py
Docs & tests
vendor-notes.md,mark-classes.md, expanded removal matrix- Pytest suite (20 tests)
Optional tools
Install
git clone https://github.com/guillaumemeyer/watermarks-remover.git
cd watermarks-remover
mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marksOut of scope (this release)
- Pixel-domain image watermarks (e.g. SynthID-image)
- Official SynthID-Text / secret-key detectors
- Training-time / backdoor model marks
Full changelog: see README