# Remove AI Marks

Strips AI provenance marks, watermarks and C2PA metadata from files.

- Repository: https://github.com/guillaumemeyer/watermarks-remover (25897 stars)
- Category: Security
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add guillaumemeyer/watermarks-remover --skill remove-ai-marks -g -a claude-code -y`
Codex: `npx skills add guillaumemeyer/watermarks-remover --skill remove-ai-marks -g -a codex -y`
Cursor: `npx skills add guillaumemeyer/watermarks-remover --skill remove-ai-marks -g -a cursor -y`
Gemini CLI: `npx skills add guillaumemeyer/watermarks-remover --skill remove-ai-marks -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add guillaumemeyer/watermarks-remover`

## Description

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).

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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`:

```bash
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:

```bash
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

```bash
curl -s "${AUTH_HEADER[@]}" "$WM/capabilities"
```

The rest: https://github.com/guillaumemeyer/watermarks-remover/blob/HEAD/skills/remove-ai-marks/SKILL.md
