Remove AI Marks
Strips AI provenance marks, watermarks and C2PA metadata from files.
Install
npx skills add guillaumemeyer/watermarks-remover --skill remove-ai-marks -g -a claude-code -y- Repository
- guillaumemeyer/watermarks-remover25.9k
- Category
- Security
- Updated
- 3d ago
- License
- MIT
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
Remove multi-vendor AI provenance marks: invisible Unicode (Layer A), statistical text watermarks via rewrite (Layer B, always offer), and C2PA/EXIF/XMP/container metadata on PNG/JPEG/WebP/SVG/PDF/DOCX/ODT/HTML/MD/TEX. Covers Claude, Gemini/SynthID-class, OpenAI provenance, and open-LLM sampling marks. Use when the user asks to strip watermarks, remove C2PA/Content Credentials, clean AI metadata, remove invisible Unicode, anti-detect clean AI output, or runs /remove-ai-marks (aliases: /remove-claude-marks).
Remove AI marks
Multi-vendor anti-detection hygiene for text (Unicode + statistical rewrite) and files (C2PA / AI metadata across common containers).
Read if needed:
references/mark-classes.md, Unicode / sampling / C2PA / containersreferences/vendor-notes.md, Claude, Gemini/SynthID, OpenAI, open-LLMreferences/removal-matrix.md, which layer whenreferences/ethics.md, intended usereferences/how-claude-marks.md, Anthropic-specific detailreferences/markdiffusion.md, optional MarkDiffusion image harness (schemes, honesty caveats)
This skill is a thin client. All deterministic cleaning machinery runs in a
separate HTTP service (this repo's service/), so the agent host needs no
Python, venvs, or cleaning tools. Call the service with curl; never run
cleaning scripts directly.
Service access
Base URL comes from WATERMARKS_SERVICE_URL, default http://127.0.0.1:8765:
WM="${WATERMARKS_SERVICE_URL:-http://127.0.0.1:8765}"
The service is started either by the operator (docker compose up -d, or a
published GHCR image) or locally (make serve). Always check it first, and
stop with a clear message if it is unreachable, never fall back to local
cleaning:
AUTH_HEADER=()
if [ -n "$WATERMARKS_SERVER_API_KEY" ]; then
AUTH_HEADER=(-H "Authorization: Bearer $WATERMARKS_SERVER_API_KEY")
fi
curl -sf "${AUTH_HEADER[@]}" "$WM/health"
# {"ok": true, "version": "..."}
If WATERMARKS_SERVER_API_KEY is set on the service, every request (including
the health check and capabilities) needs -H "Authorization: Bearer $WATERMARKS_SERVER_API_KEY". The default URL is
loopback; when the service runs on another host, set WATERMARKS_SERVICE_URL
to an https:// URL so the token is not sent in cleartext, and do not add
-L (a redirect could forward the token to another host).
Capabilities
curl -s "${AUTH_HEADER[@]}" "$WM/capabilities"

