Remove AI Watermarks
Remove AI provenance marks from images and video you generated yourself:
- known visible labels such as the Google Gemini sparkle watermark and vendor text marks;
- invisible pixel watermarks through direct local-format disruption or diffusion regeneration;
- C2PA, EXIF, XMP, IPTC, and related AI metadata.
| 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.
Choose what you want to do
| 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.
Installation modes
| 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.
Quick start
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
video all removes a stable registered visible mark when present and always
strips verified AI metadata. If neither signal is found, it still writes a
same-container passthrough, so application callers get one predictable output
contract. Proprietary invisible-video removal is excluded by default.
--invisible opts into the lossy, oracle-certified video SynthID profile.
Process a directory with the same contract:
remove-ai-watermarks video batch ./videos --mode all
Remove a supported visible video mark:
remove-ai-watermarks video visible input.mp4 -o clean.mp4
remove-ai-watermarks video visible veo.mp4 --mark veo -o veo_clean.mp4
remove-ai-watermarks video visible seedance.mp4 --mark seedance -o seedance_clean.mp4
remove-ai-watermarks video visible dola.mp4 --mark dola -o dola_clean.mp4
remove-ai-watermarks video visible hailuo.mp4 --mark hailuo -o hailuo_clean.mp4
remove-ai-watermarks video visible kling.mp4 --mark kling -o kling_clean.mp4