Skip to main content

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.

PyPI Python Downloads License Tests Sponsor

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
Image with a visible Gemini watermark Image after visible watermark removal

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
OpenAI portrait grid before qwen-zimage OpenAI portrait grid after qwen-zimage
Gemini example before Gemini example after
Gemini sign before qwen-zimage Gemini sign after qwen-zimage

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:

  1. Detect a registered mark in its expected area.
  2. Build a mask around the mark.
  3. 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-zimage requires CUDA. The other diffusion profiles also support the devices listed by remove-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.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

remove_ai_watermarks-0.21.1.tar.gz (18.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

remove_ai_watermarks-0.21.1-py3-none-any.whl (297.8 kB view details)

Uploaded Python 3

File details

Details for the file remove_ai_watermarks-0.21.1.tar.gz.

File metadata

  • Download URL: remove_ai_watermarks-0.21.1.tar.gz
  • Upload date:
  • Size: 18.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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

Hashes for remove_ai_watermarks-0.21.1.tar.gz
Algorithm Hash digest
SHA256 a233074030ef189f4339228601281badbd8ef2f52d5bb36dc78c17c4691b7d2d
MD5 92ac633d38f65eab348cb5fd39769e52
BLAKE2b-256 ec622efc45a125c4188e4f63c1113c082c874408fc98248d611d4c40d1434719

See more details on using hashes here.

File details

Details for the file remove_ai_watermarks-0.21.1-py3-none-any.whl.

File metadata

  • Download URL: remove_ai_watermarks-0.21.1-py3-none-any.whl
  • Upload date:
  • Size: 297.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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

Hashes for remove_ai_watermarks-0.21.1-py3-none-any.whl
Algorithm Hash digest
SHA256 688d3434f86dba710ef91f6ee36faf433ed9bbeab4de24183be976461faedca2
MD5 99f8461b6ce2f66fe038961fa06356a3
BLAKE2b-256 17d33ce7cf4fa0047f09ba2e112cffb878d6141dcd7b65e606e10e7016e550b4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page