Every kind of ghost, one determined crew.
AI Watermark Remover#
"AI watermark" means at least five different mechanisms. No single algorithm removes all of them.#
Most tools that call themselves an "AI watermark remover" are actually one narrow tool (usually a metadata stripper or an EXIF cleaner) wearing a broad label. MarkMyAss instead treats each mechanism as what it is — a separate technical signal, with its own detection method, its own removal method, and its own honest limitations.
The five categories#
| Category | What it is | MarkMyAss support |
|---|---|---|
| Hidden Unicode | Invisible characters embedded in text | Detect + remove |
| File metadata | EXIF/XMP/IPTC/PDF fields describing origin/tool | Detect + remove |
| C2PA / Content Credentials | A structured provenance manifest embedded in a file | Partial (structural only) |
| Statistical text watermarks | A bias in how a model samples tokens (Claude, Gemini, GPT) | Not implemented — no public detector exists for any provider |
| Pixel/model-embedded image watermarks | A signal baked into image pixels at generation time (e.g. Google's SynthID) | Not implemented |
Live, per-signal detail (with "last tested" dates) is at /lab — this page is the overview; the Lab is the maintained source of truth.
Why "one-click removal" claims should make you suspicious#
A tool that promises to remove "the AI watermark" in one click is either:
- Scoped to one mechanism (usually visible pixel watermarks or file metadata) and using "AI watermark" as a marketing umbrella term, or
- Claiming to defeat a provider's private statistical watermark with no published, independently reproducible method to back that up.
MarkMyAss takes the first path but says so explicitly, and refuses the
second path entirely. If a provider (Anthropic, Google, OpenAI) ever
publishes a real, reproducible statistical-watermark detector, MarkMyAss
has a defined plug-in interface
(src/ghostmark/detectors/statistical.py)
ready for it — but implementing a fake one now to look more capable
would defeat the entire point of the project.
What MarkMyAss actually removes, and how it's verified#
- Hidden Unicode: byte-level character classification and removal, re-verified deterministically by re-running the same open-source detector. See /hidden-unicode-remover.
- File metadata (EXIF/XMP/IPTC/PDF DocInfo): byte/segment-level stripping with no image re-encoding, independently cross-checked with ExifTool. See /ai-metadata-cleaner.
- C2PA / Content Credentials container: JUMBF structural detection and removal, cross-checked against the official c2patool. See /c2pa-remover and /content-credentials-remover.
What MarkMyAss does not remove#
- Statistical text watermarks (Claude, Gemini, GPT-family): no provider has published a public detection methodology, so there is nothing for MarkMyAss to verify against — see /lab/claude-watermark for the most-documented case.
- Visible/pixel-embedded image watermarks: not implemented in this release. A visible logo baked into pixels, or a model-level pixel watermark like SynthID, is a different engineering problem (image re-synthesis, not metadata editing) and MarkMyAss won't claim to handle it until it actually does.
Reproducible evidence, not a claimed score#
Every "supported" row in the table above is backed by MarkMyAss's public test corpus and regression suite, with real pass/fail numbers published at /benchmarks — generated by actually running the pipeline, not typed in by hand.