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.2.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.2-py3-none-any.whl (297.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: remove_ai_watermarks-0.21.2.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.2.tar.gz
Algorithm Hash digest
SHA256 a013af322d40c137302c500638806c8864d5945699bdc2cdcbdcda3e2f37b3ac
MD5 f850b01b7d8854751c93f40f9a63c1b6
BLAKE2b-256 e538b3a264503e299674e66e230b53339bedc55c2705a0ef376193f4bbbf6944

See more details on using hashes here.

File details

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

File metadata

  • Download URL: remove_ai_watermarks-0.21.2-py3-none-any.whl
  • Upload date:
  • Size: 297.9 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 14204a1b4ced0ea0f26703b39df05efd69daff7666a90333faad0dc39a729908
MD5 ceb334629884eeb6736b90b595de02ab
BLAKE2b-256 951b02206cfcc64a33f6c69304fd0c50e613afcea051c6690d4b19e9c7a5f049

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