
Remove visible and invisible AI watermarks from images and video, and AI provenance metadata from images, video, and audio. Python library, CLI, and agent skill for SynthID, C2PA, EXIF, IPTC, XMP, and common generative-AI marks. By Victor Kuznetsov.
Remove AI provenance marks from images and video you generated yourself:
| Before | After |
|---|---|
![]() | ![]() |
uv tool install "remove-ai-watermarks[visible]" # CLI for visible marks and metadata
npx skills add wiltodelta/remove-ai-watermarks # agent skill for Claude Code, Codex, Cursor, and other agents
Video support covers provenance identification, complete visible-plus-metadata cleaning, directory batches, visible Sora, Veo, Seedance, Doubao, Dola, Hailuo AI, and Kling AI mark removal, and oracle-certified VAE regeneration for video SynthID removal.
raiw.cc runs this library as a hosted service, with the GPU included and nothing to install. Visible mark and metadata removal at Standard output up to 12 MP are free there; original resolution above 12 MP and invisible watermark removal are paid.
This is a research project on AI provenance signals, for lawful use on content you own. It is provided as is, without warranty or liability, and each user is responsible for how they use it. It does not target stock agency previews or other watermarks that protect third party paid content. Some jurisdictions, including China, restrict removing AI labels or supplying tools that do. See scope, safety, and legal notes.
| Goal | Command | GPU |
|---|---|---|
| Find provenance signals and watermarks | identify | No |
| Classify a photograph from pixels (opt-in, not provenance) | classify | No |
| Remove known visible AI marks | visible | No |
| Erase a region you select | erase | No |
| Strip AI metadata | metadata | No |
| Identify supported video provenance | video identify | No |
| Remove visible marks and AI metadata from video | video all | No |
| Strip AI metadata from video | video metadata | No |
| Remove a registered visible AI mark from video | video visible | No |
| Process a directory of videos | video batch | Depends on mode |
| Apply the calibrated video-pixel SynthID-removal profile | video invisible | Recommended |
Identify C2PA text/HTML wrappers, VSRMark, and Unicode steganography | text identify | No |
Strip C2PA text/HTML wrappers, VSRMark, and Unicode steganography | text metadata | No |
| Regenerate unlocked prose spans to remove token-level LLM watermarks | text invisible | Recommended |
| Strip text provenance and optionally regenerate prose spans | text all | Depends on --invisible |
| Regenerate an image to disrupt invisible watermarks | invisible | Required (CUDA) |
| Run visible, invisible, and metadata removal | all | Recommended |
| Process a directory | batch | Depends on mode |
Microsoft Paint and Photos InvisMark declarations are routed automatically to
pixel regeneration. The all command removes both the hidden pixel watermark and
its linked C2PA manifest; metadata stripping alone removes only the manifest. A
specialized Python API can inspect and disrupt the validated local
Watermarker.dll payload without diffusion.
| Need | Install |
|---|---|
| Metadata inspection and stripping | remove-ai-watermarks |
| Photograph AI-versus-camera classification | remove-ai-watermarks[classify] |
| 10-provider source-export & model-version classification | remove-ai-watermarks[source-classify] |
| Visible detection and removal | remove-ai-watermarks[visible] |
| Visible video processing | remove-ai-watermarks[video] |
| Video SynthID removal | remove-ai-watermarks[video,diffusion] |
| Torch-free DWT-DCT detection | remove-ai-watermarks[detect] |
| Direct local Paint InvisMark disruption | remove-ai-watermarks[pixels] |
| Invisible image removal (needs CUDA) | remove-ai-watermarks[qwen-zimage] |
| Production removal and default classifier backends | remove-ai-watermarks[all] |
| Optional OCR proposals for operator verification | remove-ai-watermarks[text-draft] |
Lower-level and specialized extras include pixels, heif, trustmark,
migan, lama, diffusion, classify-onnx, and source-classify. The
installation guide documents their exact
dependency composition, Python compatibility, and model requirements.
Install the metadata-focused default CLI:
uv tool install remove-ai-watermarks
Inspect an image:
remove-ai-watermarks identify image.png
To classify a photograph from pixels (AI versus camera, optional provider),
install the extra and call classify. identify never starts it:
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
Guide: photo pixel classification.
For a lightweight, abstaining 10-provider source-export and model-version
signal after metadata removal (classify_source and CLI classify-source),
use the separate API or CLI command. It is not a SynthID detector:
remove-ai-watermarks classify-source image.png
import remove_ai_watermarks as raiw
result = raiw.classify_source("image.png")
print(result.label, result.version_subfamily, result.reason)
Install remove-ai-watermarks[source-classify]. Guide:
source-pipeline classification.
Signed provenance is the supported route for SynthID and identify reads it.
There is no local SynthID pixel detector in the package. Research on a
periodic lattice expert is in scripts/synthid_runtime/ and
synthid-detector-research.md.
For visible watermark removal, install the pixel dependencies:
uv tool install --force "remove-ai-watermarks[visible]"
Then remove a known visible mark and AI metadata: