Skills

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
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 / containers
  • references/vendor-notes.md, Claude, Gemini/SynthID, OpenAI, open-LLM
  • references/removal-matrix.md, which layer when
  • references/ethics.md, intended use
  • references/how-claude-marks.md, Anthropic-specific detail
  • references/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"
Read the whole SKILL.md on GitHub

More in Security