Remove visible and invisible AI watermarks and provenance metadata from images and video. Python library and CLI for SynthID, C2PA, EXIF, IPTC, XMP, and common generative-AI marks.
Remove AI provenance marks from images and video you generated yourself:
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 |
| 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] |
| OpenAI/Google/unknown source-export 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] |
| Every production feature available on the active Python | remove-ai-watermarks[all] |
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 OpenAI/Google/unknown source-export signal after metadata removal, use the separate Python API. It is not a SynthID detector:
import remove_ai_watermarks as raiw
result = raiw.classify_source("image.png")
print(result.label, 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:
remove-ai-watermarks visible image.png -o clean.png
Strip metadata without running visible inpainting or diffusion:
remove-ai-watermarks metadata image.png --remove -o clean.png
Without -o this command overwrites the source in place.
Inspect or remove AI metadata from an MP4, MOV, M4V, WebM, MKV, AVI, or FLV file:
remove-ai-watermarks video metadata input.mp4 --check
remove-ai-watermarks video metadata input.mp4 --remove -o clean.mp4
The video metadata command does not transcode video or audio streams. Unlike
the image command above, when -o is omitted it writes <source>_clean and
preserves the original. MP4 and MOV
inspection includes the native TC260 AIGC tag in
moov.udta.meta.keys/ilst, including a moov placed after the media payload,
plus the QuickTime-form meta variants Doubao's iOS export writes (a bare
meta box as a direct moov child, and a keyless hdlr=mdir metadata list).
Keyed workflow and prompt entries in the same metadata-list structure are
also detected and removed, including ComfyUI exports.
MKV and WebM inspection reads the normative
Segment.Tags.Tag.SimpleTag placement. AVI uses LIST/INFO/AIGC, while FLV
uses script.onMetaData.AIGC. The non-ISOBMFF formats are remuxed with stream
copy for removal.
Use the product-oriented video path to identify or clean a file:
uv tool install --force "remove-ai-watermarks[video]"
remove-ai-watermarks video identify input.mp4
remove-ai-watermarks video all input.mp4 -o clean.mp4