AI watermark remover: strip visible and invisible AI watermarks (Gemini / Nano Banana sparkle, SynthID) and provenance metadata (C2PA, EXIF) from images
Project description
Remove AI Watermarks
Remove AI provenance marks from images you generated yourself:
- known visible labels such as the Gemini sparkle and vendor text marks;
- invisible pixel watermarks through diffusion regeneration;
- C2PA, EXIF, XMP, IPTC, and related AI metadata.
Try it online at raiw.cc if you do not want to install Python or run diffusion models locally.
This project is for lawful use on content you own. It does not target stock agency previews or other watermarks that protect third party paid content. See scope, safety, and legal notes.
Choose what you want to do
| Goal | Command | GPU |
|---|---|---|
| Find provenance signals and watermarks | identify |
No |
| Remove known visible AI marks | visible |
No |
| Erase a region you select | erase |
No |
| Strip AI metadata | metadata |
No |
| Regenerate an image to disrupt invisible watermarks | invisible |
Recommended |
| Run visible, invisible, and metadata removal | all |
Recommended |
| Process a directory | batch |
Depends on mode |
Quick start
Install the core CLI:
uv tool install remove-ai-watermarks
Inspect an image:
remove-ai-watermarks identify image.png
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
For invisible watermark removal, install the diffusion dependencies:
uv tool install --force "remove-ai-watermarks[gpu]"
remove-ai-watermarks invisible image.png -o clean.png
If the local detectors cannot confirm an invisible watermark but you know the
image came from an AI generator, add --force:
remove-ai-watermarks invisible image.png -o clean.png --force
See the installation guide for Homebrew, uv, optional features, and development setup.
Examples
Visible Gemini mark
| Before | After |
|---|---|
High quality invisible removal
The qwen-zimage profile is the highest fidelity option for face heavy images.
It is CUDA only and uses a much larger model stack than the default ControlNet
profile.
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png \
--pipeline qwen-zimage --force
| OpenAI example before | OpenAI example after |
|---|---|
| Gemini example before | Gemini example after |
|---|---|
These exact output files were checked with the matching provider verifiers. That result applies to these files, not to every seed, image, or future watermark version.
Common recipes
Remove every detected visible mark
remove-ai-watermarks visible image.png -o clean.png
The default --mark auto checks all registered visible marks and removes every
match. If the mark is visible to you but the detector misses it, select its
region explicitly:
remove-ai-watermarks erase image.png \
--region 1640,1930,400,100 \
-o clean.png
--region uses x,y,width,height and may be repeated.
Use a learned fill backend
The core install uses OpenCV inpainting when no learned backend is installed. For more difficult backgrounds:
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
uv tool install --force "remove-ai-watermarks[lama]"
remove-ai-watermarks visible image.png -o clean.png --backend lama
Reduce CUDA memory use
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
CPU offload lowers CUDA memory pressure by moving model components between CPU and GPU. It is slower and has no effect on CPU or MPS.
Process a directory
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
What the tool can recognize
Visible mark support includes:
- Google Gemini and Nano Banana sparkle;
- Doubao, Jimeng, Qwen, Kling, Baidu, LibLibAI, and RunningHub labels;
- one calibrated Samsung Galaxy AI label variant.
Metadata and provenance inspection covers C2PA, EXIF, XMP, IPTC, common generator parameters, China TC260 AIGC labels, and several vendor specific signals. Optional decoders add support for open DWT-DCT watermarks and Adobe TrustMark.
The exact support matrix, including important locale and detector limits, lives in supported signals.
How it works
Visible removal follows three steps:
- Detect a registered mark in its expected area.
- Build a mask around the mark.
- Fill only the masked region with OpenCV, MI-GAN, or LaMa.
Metadata removal uses format aware stripping. JPEG metadata removal preserves the encoded image scan instead of recompressing it. Other supported containers use their corresponding metadata path.
Invisible removal is different. It regenerates the image through a diffusion pipeline to disrupt pixel and frequency domain watermarks. This changes the image and cannot guarantee that a proprietary verifier will reject every output.
See supported signals and known limitations for the full technical boundary.
Python API
import remove_ai_watermarks as raiw
result, removed = raiw.remove_visible("watermarked.png", "clean.png")
print(removed)
The high level API accepts a file path or a BGR NumPy array. For path inputs it also reads provenance metadata, preserves alpha, and can strip AI metadata from the written result.
See the Python API guide for visible removal, provenance inspection, metadata stripping, and diffusion usage.
ComfyUI
The separate ComfyUI Remove AI Watermarks package provides nodes for visible removal, detection, region erasing, and invisible removal.
Important limitations
- A missing local signal means unknown, not clean. Proprietary pixel watermarks may remain after metadata has been stripped.
- Visible removal reconstructs a small region. Results depend on the background and selected fill backend.
- Invisible removal changes the whole image and may alter faces, text, or fine detail.
qwen-zimagerequires CUDA. The other diffusion profiles also support the devices listed byremove-ai-watermarks invisible --help.- Provider watermark systems can change. Validate important outputs with the provider's own verifier when one is available.
Documentation
Start with the documentation index.
- Installation
- CLI guide
- Python API
- Supported signals
- Known limitations
- Scope, safety, and legal notes
- Module internals
- Release and distribution
Research notes and historical experiments are listed separately in the documentation index. They explain past decisions but do not define the current public API.
Contributing
Install the development environment and run the project gate:
uv sync --frozen --extra dev
bash maintain.sh
See module internals before changing a subsystem with documented invariants.
License
Apache 2.0. Copyright 2025-2026 wiltodelta.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remove_ai_watermarks-0.20.0.tar.gz.
File metadata
- Download URL: remove_ai_watermarks-0.20.0.tar.gz
- Upload date:
- Size: 18.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28eb7aaeace7cfa50fe158ed6da72a4afa526d4be11e9f9c614b90edbaccf0b4
|
|
| MD5 |
4d62f26a61e5411cb8e916879d48f54b
|
|
| BLAKE2b-256 |
90f83a2c5f0093ad40213b22895c3426eb3384b4d997476b996e1cd7d4a6b50b
|
File details
Details for the file remove_ai_watermarks-0.20.0-py3-none-any.whl.
File metadata
- Download URL: remove_ai_watermarks-0.20.0-py3-none-any.whl
- Upload date:
- Size: 294.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d62b3af8ec0e6427570daaffe5d7dd873a3414f148db3d4ba48e954855aa286f
|
|
| MD5 |
debe1bff799ba88fcff63e531a2044d0
|
|
| BLAKE2b-256 |
e5dc07725c4d7ea4262f5cdb30dfb7c263c4a08a7c4d7b618503ab68cfe0cc39
|