mrkeyoor.com_
Tue 01 Sept 17:45 UTC
AI Toolsevaluationupdated 27 Aug 2026

watermark-remover review

watermark-remover is a Python service and agent-skill bundle for inspecting or removing hidden Unicode marks, document metadata, and some AI watermark schemes from content you own. It handles text and many file containers, while heavier statistical or pixel-level detection depends on optional external tools.

+46stars / 7d
Verdict

Our watermark-remover build passed in 7 seconds, but the 80-second test run failed across installer paths because install_skill.py was missing from the tested checkout. The core inspection idea is useful for authorized privacy cleanup, and 0 known dependency vulnerabilities is a good lab result. Do not adopt this fork from its README alone: resolve the cross-owner links, prove the installer and container source exist, and remember that removal does not certify that a vendor detector will miss the file.

We ran it

Lab card: what happened when we ran watermark-removerScreenshot of watermark-remover (github.com/ShadowAqueduct/watermark-remover)
Install✓ · 28s55 packages · 77 MB
Build✓ · 7s
Tests✗ · 80sran, no count parsed
Known vulns0(pip-audit)
Repo166 files~29,766 lines of source · 3.7 MB · 3 CI workflows · tests dir

Answers from our run

Does watermark-remover build from source?

Dependencies installed in 28 seconds (55 packages), and the build succeeded in 7 seconds. We cloned commit c625344 into a clean Debian container with 3 CPUs and no project-specific setup.

Do watermark-remover's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does watermark-remover have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use watermark-remover?

Anyone seeking proof that a vendor detector will fail: the README explicitly says the tool cannot certify that outcome.

What are the alternatives to watermark-remover?

MAT2, ExifTool, MarkLLM. Our watermark-remover build passed in 7 seconds, but the 80-second test run failed across installer paths because `install_skill.

Setup2/5Small install, but documented installer tests failed on a missing file
Docs3/5Detailed methods, weakened by cross-owner install and release links
Community2/5809 stars; current open activity is dependency update PRs
Maturity2/5Broad format claims, failed installer tests, and no owner release

Who it’s for

Developers cleaning authorized documents before publication or archival.
Privacy teams that want one local HTTP interface for text, image, office-document, PDF, and media metadata handling.
Claude Code or Cursor users who want a skill or post-write check around files created by an agent.
Researchers comparing watermark detectors with the exact keys, models, or configurations required by those detectors.

Who it’s NOT for

Anyone seeking proof that a vendor detector will fail: the README explicitly says the tool cannot certify that outcome.
Users trying to disguise authorship, commit academic fraud, or process content without permission: the project limits its stated use to owned or authorized material.
Teams expecting the current checkout's documented installer to work: our test log repeatedly says /work/repo/install_skill.py could not be opened.
Operators expecting every advertised cleaner in a small stdlib service: real PDF stripping needs qpdf, embedded-image work needs Ghostscript, and pixel or statistical backends are optional external systems.
Buyers who need a clean release trail under this repository owner: GitHub returned no latest release, while the README links v0.5.0 under another account.

Setup reality

Our sandbox installed 55 Python packages in 28 seconds and used 77 MB. The build succeeded in 7 seconds. Tests failed after 80 seconds; the log tail lists installer and bundle tests failing because /work/repo/install_skill.py could not be opened, plus exit-code assertions receiving 2 instead of 1. Pip-audit found 0 known vulnerabilities.

Basic scripts require Python 3.10 or newer. The service binds to loopback on port 8765 and can require a bearer key. qpdf, ExifTool, c2patool, and Ghostscript expand file cleaning, while MarkLLM, CtrlRegen, reverse-SynthID, and MarkDiffusion require separate setup or checkouts.

The 3.7 MB checkout had 166 files, about 29,766 source lines, 3 CI workflows, a Compose file, and a tests directory, but no Dockerfile. Several README links point to guillaumemeyer/watermarks-remover, not the reviewed ShadowAqueduct/watermark-remover, so verify install and release URLs before using them.

The core path removes metadata and invisible text carriers

watermark-remover divides its work into distinct layers. Layer A strips invisible Unicode characters, exotic spaces, bidirectional controls, and tag characters through deterministic Python. File cleaners target C2PA, EXIF, XMP, office-document properties, HTML metadata, and container-specific fields. Layer B rewrites text to disturb statistical marks, while optional systems attempt detection or pixel-level image changes. That separation matters because metadata deletion and statistical watermark removal are very different claims.

The format list is broad: common images, SVG, PDF, DOCX, XLSX, PPTX, EPUB, ODT, HTML, Markdown, several video containers, WAV, MP3, and FLAC. Unrecognized formats are left alone, and text commands refuse binary input. The service exposes inspection and cleaning endpoints plus batches capped at 50 files. It binds to 127.0.0.1:8765 by default and can enforce a bearer API key.

Optional tools decide how much a clean operation really does

Core scripts need Python 3.10 or newer, but file depth changes with installed software. The README says PDF cleaning needs qpdf for a real structural strip because ExifTool alone leaves recoverable incremental bytes. Ghostscript is used for metadata inside embedded PDF images. c2patool and ExifTool add other format handling. A report should therefore include detected capabilities, not just a successful HTTP response.

The heavier paths are separate projects or local builds. reverse-SynthID scores images, CtrlRegen attempts pixel-domain removal, MarkLLM checks supported text schemes, and MarkDiffusion provides an image watermark harness. Some work only with the same generation configuration or key. The README calls them detection aids rather than vendor oracles, which is the correct limit. A missing backend fails softly, so automation must read the report rather than equating exit success with full coverage.

What happened when we ran it

Our sandbox installed 55 packages in 28 seconds and used 77 MB on disk. The build succeeded in 7 seconds. The checkout at commit c625344 contained 166 files, about 29,766 source lines, and 3 CI workflow files. Pip-audit found 0 known vulnerabilities in the installed Python dependencies. On size and build time alone, the repository looks easy to inspect.

Tests changed that assessment. The suite ran for 80 seconds and exited 1. The tail lists failures in tests/test_install_skill.py and tests/test_lightweight_skill.py. Several subprocess errors say Python could not open /work/repo/install_skill.py because the file did not exist. Other assertions expected exit code 1 and received 2, which is consistent with the visible command error without proving every failure had the same cause.

The failing names cover personal and linked skill installs, Cowork bundle layout, reproducibility, overwrite refusal, executable scripts, skill listing, unknown-skill handling, and Cursor placement. These are central to the documented agent integration, not an obscure optional model backend. The repository has a tests directory and Compose file, but our scan found no Dockerfile even though the README documents a core image build. Buyers should locate the intended artifact source before trusting either installation route.

The README points to another owner's releases and plugin paths

The reviewed repository is ShadowAqueduct/watermark-remover, yet its badges, release link, Claude Code marketplace commands, and pre-commit example refer to guillaumemeyer/watermarks-remover. GitHub's latest-release endpoint returned Not Found for the reviewed repository. The README nonetheless labels v0.5.0 from the other account as the latest release. That may reflect copied upstream material, but the available evidence does not define the relationship.

This mismatch has practical consequences. A user can clone one owner, install a plugin from another, and pin a pre-commit hook to the second repository without noticing. Our missing install_skill.py failure makes that risk concrete. Confirm which repository is authoritative, compare the exact revision, and inspect marketplace or image publishers before granting a hook permission to examine every file written by an agent.

Automatic clean mode changes files after agent edits

The plugin registers a post-tool hook for write and edit operations. Its default check mode reports marks and leaves files untouched. clean mode strips marks in place after a matching tool call. That can be convenient for a controlled publishing directory, but it is a mutating step attached to broad editor actions. Keep check mode until diff review proves the cleaner preserves the formats and content your team uses.

Text Layer B deserves extra caution. Rewriting may change style and voice, and the project recommends skipping it when quality matters more than watermark hygiene. Use deterministic Layer A and container cleaning first, retain originals, and compare output. No clean result proves that every detector will fail, particularly when the detector uses a secret key, a different model, or a method outside the configured backends.

Authorized privacy work is the defensible use case

The ethics section limits use to content the user owns or is authorized to process. It rejects academic fraud and false claims of human authorship. That boundary should also shape deployment: keep the service local, authenticate it if exposed beyond loopback, log who requested a mutation, and preserve the original where provenance has legal, editorial, or archival value. Removing C2PA may discard useful origin evidence along with unwanted metadata.

GitHub recorded the last push on August 23, 2026, with 6 combined issues and pull requests. The returned open activity consisted of automated dependency upgrades, including large jumps for Transformers and Diffusers. There were no releases under the reviewed owner. The project contains interesting cleaning code, but failed installer tests and unclear repository identity make a read-only inspection trial safer than immediate workflow integration.

Alternatives

ProjectWhat it isPick it when
MAT2A metadata anonymization toolkit for common document and media formats.pick this instead when conventional metadata removal is the job and AI watermark detection is unnecessary.
ExifToolA long-running command-line and Perl library for reading and writing file metadata.pick this instead when you need precise, format-specific metadata inspection and edits.
MarkLLMA research toolkit for implementing and evaluating language-model watermark methods.pick this instead when your goal is controlled watermark research with known algorithm settings.

What people are saying

  1. [velocity-scout] ShadowAqueduct/watermark-remover

Sources

  1. watermark-remover README
  2. Open dependency update pull requests
  3. README-linked v0.5.0 release under another owner
  4. MarkLLM
  5. C2PA Rust tools

More ai tools reviews

claudian · SkillSpector · robin · mjlab · MoGe · awesome-design-md · the whole board →