
remove-ai-watermarks v0.37.1
移除图像和视频中可见与不可见的 AI 水印及来源元数据。用于 SynthID、C2PA、EXIF、IPTC、XMP 以及常见生成式 AI 标记的 Python 库和 CLI。
移除 AI 水印
移除你自己生成图像和视频中的 AI 来源标记:
- 已知的可见标签,例如 Google Gemini 闪光水印和厂商文字标记;
- 通过扩散再生处理不可见像素水印;
- C2PA、EXIF、XMP、IPTC 及相关 AI 元数据。
视频支持涵盖来源识别、完整的可见标记加元数据清理、目录批量处理、可见的 Sora、Veo、Seedance、Doubao、Dola、Hailuo AI 和 Kling AI 标记移除,以及经 oracle 认证的 VAE 再生以移除视频 SynthID。
raiw.cc 将该库作为托管服务运行,GPU 已包含在内,无需安装任何内容。标准输出最高 12 MP 的可见标记和元数据移除在该网站上是免费的;12 MP 以上的原始分辨率和不可见水印移除为付费服务。
本项目仅用于对您拥有的内容进行合法使用。它不针对图库机构预览图或其他保护第三方付费内容的水印。请参阅范围、安全与法律说明。
选择您想执行的操作
| 目标 | 命令 | GPU |
|---|---|---|
| 查找来源信号和水印 | identify | 否 |
| 从像素对照片进行分类(可选加入,非来源识别) | classify | 否 |
| 通过官方远程 API 从像素验证受支持的 OpenAI SynthID | verify-openai-synthid | 否 |
| 移除已知的可见 AI 标记 | visible | 否 |
| 擦除您选择的区域 | erase | 否 |
| 剥离 AI 元数据 | metadata | 否 |
| 识别受支持的视频来源 | video identify | 否 |
| 从视频中移除可见标记和 AI 元数据 | video all | 否 |
| 从视频中剥离 AI 元数据 | video metadata | 否 |
| 从视频中移除已注册的可见 AI 标记 | video visible | 否 |
| 处理视频目录 | video batch | 取决于模式 |
| 使用经认证的 VAE 配置移除视频 SynthID | video invisible | 推荐 |
| 再生图像以破坏不可见水印 | invisible | 必需(CUDA) |
| 运行可见、不可见和元数据移除 | all | 推荐 |
| 处理目录 | batch | 取决于模式 |
Microsoft Paint 和 Photos 的 InvisMark 声明会自动路由到像素再生。all 命令会同时移除隐藏的像素水印及其关联的 C2PA 清单;仅剥离元数据只会移除清单。
安装模式
| 需求 | 安装 |
|---|---|
| 元数据检查和剥离 | remove-ai-watermarks |
| 照片 AI 与相机分类 | remove-ai-watermarks[classify] |
| 官方远程 OpenAI SynthID 验证 | remove-ai-watermarks[verify] |
| 可见检测和移除 | remove-ai-watermarks[visible] |
| 可见视频处理 | remove-ai-watermarks[video] |
| 视频 SynthID 移除 | remove-ai-watermarks[video,diffusion] |
| 无 Torch 的 DWT-DCT 检测 | remove-ai-watermarks[detect] |
| 不可见图像移除(需要 CUDA) | remove-ai-watermarks[qwen-zimage] |
| 当前 Python 上可用的所有生产功能 | remove-ai-watermarks[all] |
较低级别和专门的附加组件包括 pixels、heif、trustmark、migan、lama 和 diffusion。安装指南 记录了它们的确切依赖组成、Python 兼容性和模型要求。
快速开始
安装以元数据为重点的默认 CLI:```bash uv tool install remove-ai-watermarks
检查一张图片:```bash
remove-ai-watermarks identify image.png
要按像素对照片进行分类(AI 生成还是相机拍摄,可选提供商),
请安装额外依赖并调用 classify。identify 绝不会启动该功能:```bash
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
指南:[照片像素分类](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/photo-classify.md)。
签名来源是 SynthID 支持的路由,`identify` 会读取该信息。
包内没有本地 SynthID 像素检测器。关于周期晶格专家的研究位于 `scripts/synthid_runtime/` 和
[synthid-detector-research.md](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/synthid-detector-research.md)。
对于受支持的 OpenAI 图像,可选的官方验证器会提供像素水印判定:```bash
uv tool install --force "remove-ai-watermarks[verify]"
remove-ai-watermarks verify-openai-synthid image.png --acknowledge-upload
该命令会从临时副本中移除AI来源元数据,验证解码后的像素未发生变化,仅将该副本上传至OpenAI,并且只使用独立的SynthID响应。它绝不会从identify隐式运行。需要API密钥、端点访问权限以及明确的上传确认。
如需移除可见水印,请安装像素依赖项:```bash uv tool install --force "remove-ai-watermarks[visible]"
然后移除一个已知的可见标记和AI元数据:```bash
remove-ai-watermarks visible image.png -o clean.png
剥离元数据,而无需运行可见的修复或扩散:```bash remove-ai-watermarks metadata image.png --remove -o clean.png
不使用 `-o` 时,此命令会就地覆盖源文件。
检查或移除 MP4、MOV、M4V、WebM、MKV、AVI 或 FLV 文件中的 AI 元数据:```bash
remove-ai-watermarks video metadata input.mp4 --check
remove-ai-watermarks video metadata input.mp4 --remove -o clean.mp4
video metadata 命令不会转码视频或音频流。与上面的图像命令不同,当省略 -o 时,它会写入 <source>_clean 并保留原始文件。MP4 和 MOV 检查包括 moov.udta.meta.keys/ilst 中原生的 TC260 AIGC 标签,包括放置在媒体负载之后的 moov,以及 Doubao 的 iOS 导出所写入的 QuickTime 形式 meta 变体(作为 moov 直接子级的裸 meta 框,以及无键的 hdlr=mdir 元数据列表)。MKV 和 WebM 检查读取规范的 Segment.Tags.Tag.SimpleTag 位置。AVI 使用 LIST/INFO/AIGC,而 FLV 使用 script.onMetaData.AIGC。非 ISOBMFF 格式通过流复制进行重新封装以进行移除。
使用面向产品的视频路径来识别或清理文件:```bash 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` 在存在稳定注册的可见标记时将其移除,并且始终剥离已验证的 AI 元数据。如果两种信号都未找到,它仍会写入一个同容器直通输出,因此应用程序调用方获得一个可预测的输出契约。专有的不可见视频移除默认被排除在外。`--invisible` 选择加入有损、经 oracle 认证的视频 SynthID 配置文件。
使用相同契约处理目录:```bash
remove-ai-watermarks video batch ./videos --mode all
移除一个受支持的可见视频标记:```bash 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
此路径在更改像素之前扫描完整序列。它仅接受在相邻帧间稳定位置重复出现的标记,然后复用与图像移除相同的OpenCV、MI-GAN或LaMa填充后端。音频在不重新编码的情况下被复制,并允许其自然结束;视频流因像素发生变化而进行转码。默认情况下,受保护的光流通道会对先前接受的填充进行运动对齐,并且仅当附近源上下文一致时才进行混合;使用`--no-temporal-consistency`可禁用它。编码器保留支持的
8位源色度采样、颜色标签以及MP4/MOV轨道时间刻度,而不是依赖ffmpeg隐式的原始BGR默认值。可变帧间隔通过带时间戳的内存NUT桥接保留,而不是被扁平化为平均帧率。非零源起始时间戳与复制的音频偏移一起保留。默认的`--mark auto`
在一次解码通道中扫描所有提供者,并按如下所示的特异性顺序选择第一个稳定匹配。传入显式标记可将检测限制为单个提供者。
Sora覆盖移动的Sora 2吉祥物和文字标记。Veo同时覆盖当前的四点菱形和旧版`Veo`文本。Seedance覆盖固定的盒装`AI`标签,Dola覆盖固定的`Dola AI`文本,Hailuo AI覆盖复合的`MINIMAX | hailuo AI`标签,Kling AI覆盖右下角的`KLING AI`
标签及其版本后缀。完成的编码以原子方式发布。当未找到稳定标记时不写入任何输出。
HDR、PQ/HLG以及大于8位的输入在编码前被拒绝,而不是通过OpenCV的8位BGR边界被静默降级。
移除视频SynthID:```bash
uv tool install --force "remove-ai-watermarks[video,diffusion]"
remove-ai-watermarks video invisible input.mp4 -o clean.mp4
此路径会重新生成完整序列,其中包含一个跨时间共享的潜在噪声场,复制完整音频,剥离源元数据,并以原子方式发布完成的编码。默认的 noise_std=0.15 配置同时通过了双载波校准和一次完整的公开八秒 Veo 预言机检查。Google 未发布本地解码器,因此对于异常重要的文件或在提供商变更后,重新进行提供商检查仍然有用,但这并非产品结果状态。
如需移除隐形水印,请安装 qwen-zimage 附加组件。需要 NVIDIA GPU:所有配置均为 CUDA 专用,且没有 CPU 或 MPS 回退方案。```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png
如果本地检测器无法确认隐形水印,但你已知该图像来自 AI 生成器,请添加 `--force`:```bash
remove-ai-watermarks invisible image.png -o clean.png --force
排版密集的图像可以选择加入实验性的已验证文本后处理流程。该流程接受人工审核过的字符串和文本框,或经操作员验证的仅几何信息清单;它绝不会将原始 OCR 输出视为基准真值,也不会自动运行:```bash
uv tool install --force "remove-ai-watermarks[text-restoration]"
remove-ai-watermarks invisible image.png -o clean.png
--text-manifest verified-lines.json --force
参见 [CLI 指南](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/cli.md#restore-operator-verified-text) 了解清单
模式、兼容性限制以及 oracle 注意事项。
参见 [安装指南](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/installation.md) 了解 Homebrew、uv、可选
功能以及开发环境设置。
## 示例
### 可见的 Gemini 水印
| 处理前 | 处理后 |
| --- | --- |
|  |  |
`after` 栅格由跟踪的 `before` 栅格通过公共路径生成:```bash
uv run remove-ai-watermarks visible demo_banana_before.png \
--backend cv2 -o demo_banana_after.png
高质量隐形移除
qwen-zimage 是默认配置文件:在 Canny ControlNet 下执行 Qwen-Image-2512 Lightning 处理,随后通过 SAM 掩码的 Z-Image 修复对任何检测到的人脸进行修复。备选方案 sdxl-zimage 将全局阶段替换为 SDXL,并保留相同的人脸阶段。第三个配置文件 chroma-zimage 使用 Apache-2.0 Chroma1 全局处理及其自身的扁平化供应商下限;校准细节请参阅 docs/chroma1-engine-research.md。--pipeline auto 会为 OpenAI 和 Microsoft 来源选择 chroma-zimage,否则选择 qwen-zimage。所有配置均仅支持 CUDA。```bash
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
| OpenAI 示例(处理前) | OpenAI 示例(处理后) |
| --- | --- |
| [](data/synthid/originals/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM.png) | [](docs/images/qwen-zimage/ChatGPT/ChatGPT%20Image%20May%2030,%202026,%2010_31_08%20AM_full_clean.png) |
| Gemini 示例(处理前) | Gemini 示例(处理后) |
| --- | --- |
| [](data/synthid/originals/Gemini_Generated_Image_633uuy633uuy633u.png) | [](docs/images/qwen-zimage/Gemini/Gemini_Generated_Image_633uuy633uuy633u_full_clean.png) |
这些确切的输出文件已使用对应的提供商验证器进行检查。该结果仅适用于这些文件,并不适用于每个种子、图像或未来的水印版本。
## 常见用法
### 移除每个检测到的可见标记```bash
remove-ai-watermarks visible image.png -o clean.png
默认的 --mark auto 会检查所有已注册的可见标记并移除每一个匹配项。如果标记对你可见但检测器漏掉了它,请显式选中其区域:```bash
remove-ai-watermarks erase image.png
--region 1640,1930,400,100
-o clean.png
`--region` 使用 `x,y,width,height` 格式,且可重复指定。
### 使用已学习的填充后端
当未安装已学习的后端时,`visible` 附加功能使用 OpenCV 图像修复。
对于更复杂的背景,已学习后端的附加功能会自动包含相同的
像素依赖关系:```bash
uv tool install --force "remove-ai-watermarks[migan]"
remove-ai-watermarks visible image.png -o clean.png --backend migan
I need the input content to translate. Please provide the Markdown chunk you'd like me to translate from English to Chinese.```bash uv tool install --force "remove-ai-watermarks[lama]" remove-ai-watermarks visible image.png -o clean.png --backend lama
### 减少 CUDA 内存使用```bash
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
CPU offload 通过将模型组件在 CPU 和 GPU 之间移动来降低 CUDA 内存压力,但代价是速度。
处理目录```bash
remove-ai-watermarks batch ./images --mode visible remove-ai-watermarks batch ./images --mode all
## 该工具可识别的内容
可见标记支持包括:
- Google Gemini 和 Nano Banana 可见闪光水印;
- 豆包、即梦字标及左上角 `AI生成` 标签、通义千问、可灵 AI、
元宝、百度、LiblibAI 和 RunningHub 标识;
- 一种校准过的微软右上角白色 AI 徽章变体;
- 一种校准过的三星 Galaxy AI 标签变体。
元数据和来源检查涵盖 C2PA、EXIF、XMP、IPTC、常见
生成器参数、中国 TC260 AIGC 标签以及若干厂商特定
信号。可选解码器增加了对开放 DWT-DCT 水印和 Adobe
TrustMark 的支持。
精确的支持矩阵(包括重要的区域设置和检测器限制)见
[supported signals](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md)。该
[合成示例图库](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/data/fixtures/visible/README.md) 为每个已注册的图像和视频标记提供
一个标准样本。
## 工作原理
可见标记移除遵循三个步骤:
1. 在预期区域检测已注册的标记。
2. 围绕标记构建掩码。
3. 仅使用 OpenCV、MI-GAN 或 LaMa 填充掩码区域。
元数据移除使用格式感知剥离。JPEG 元数据移除保留
编码后的图像扫描数据,而非重新压缩。原生 MP4/MOV TC260 值
被置空,而不改变框大小或媒体偏移。其他受支持的
容器使用其对应的元数据路径。
不可见标记移除则不同。它通过扩散
流水线重新生成图像,以破坏像素和频域水印。这会改变
图像,且无法保证专有验证器会拒绝每个
输出。
完整的技术边界请参阅 [supported signals](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/supported-signals.md) 和
[known limitations](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/known-limitations.md)。
## Python API
可见移除 API 需要 `remove-ai-watermarks[visible]`。```python
import remove_ai_watermarks as raiw
result, removed = raiw.remove_visible("watermarked.png", "clean.png")
print(removed)
openai_synthid = raiw.verify_openai_synthid("image.png", acknowledge_upload=True)
print(openai_synthid.status)
provenance = raiw.identify_video("input.mp4")
report = raiw.inspect_video_metadata("input.mp4")
complete = raiw.remove_video_all("input.mp4", "clean.mp4")
batch = raiw.remove_video_batch("videos", "videos_clean")
cleaned = raiw.remove_video_metadata("input.mp4")
synthid_cleaned = raiw.remove_video_invisible("input.mp4", "synthid_clean.mp4")
visible = raiw.remove_video_visible("input.mp4", "clean.mp4")
print(visible.mark)
veo = raiw.remove_video_visible("veo.mp4", "veo_clean.mp4", mark="veo")
seedance = raiw.remove_video_visible(
"seedance.mp4",
"seedance_clean.mp4",
mark="seedance",
)
dola = raiw.remove_video_visible("dola.mp4", "dola_clean.mp4", mark="dola")
高级 API 接受文件路径或 BGR NumPy 数组。对于路径输入,它还会读取来源元数据、保留 alpha 通道,并可去除写入结果中的 AI 元数据。
有关可见去除、完整的 remove_all 和 remove_batch 流程、来源检查、元数据剥离以及扩散用法,请参阅 Python API 指南。
ComfyUI
独立的 ComfyUI Remove AI Watermarks 包提供了用于可见去除、检测、区域擦除和不可见去除的节点。
重要限制
- 缺少本地信号意味着未知,而非干净。专有像素水印可能在元数据被剥离后仍然存在。
- 可见去除会重建一个小区域。结果取决于背景和所选的填充后端。
- 不可见去除会改变整张图像,并可能影响人脸、文字或精细细节。
- 可见视频去除可识别移动的 Sora 2 字标、当前的 Veo 菱形标志及旧版
Veo文字、Seedance 带框的AI标签,以及固定的 Doubao、Dola、Hailuo AI 和 Kling AI 标签。它无法识别较旧的 Sora Turbo 角落漩涡或来自这些提供商的未注册布局。 经典 OpenCV 后端可能会弄脏结构化背景;当恢复质量至关重要时,请使用 MI-GAN 或 LaMa。 - 视频 SynthID 再生会改变分辨率、帧率和图像细节。随附的配置文件已通过 oracle 认证,但没有任何公开的本地解码器能在运行时认证任意输出。在提供商变更后,请重新检查特别重要的输出。
- 不可见水印去除需要 CUDA。所有配置文件在构造时都会拒绝任何其他设备,而不是回退到无法运行它们的设备。可见去除、元数据剥离和
identify仍可在任何地方运行。 - 提供商水印系统可能会发生变化。当提供商提供验证器时,请使用其自身的验证器验证重要输出。
随附的 video invisible 命令使用经认证的 noise_std=0.15 配置文件。配套的 scripts/video_synthid_sweep.py 研究工具会构建一个匹配的重新编码对照组以及 VAE 再生成的候选对象,并将验证器判定结果留空:```bash
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
要衡量某个输出实际花费的成本,请使用 `scripts/video_fidelity_probe.py`:
引擎自身的 PSNR 是在缩放和编码之前测量的,因此只有
探针才能看到最终交付的画面。```bash
uv run --extra video python scripts/video_fidelity_probe.py input.mp4 input_clean.mp4
在阴性候选可被视为移除证据之前,对照样本仍必须为 SynthID 阳性。在 2026-07-29 的双片段校准中,两个匹配的对照样本在 Gemini 内置的 SynthID 验证器中均为阳性;较强的候选样本在两个载体上均为阴性,而较弱的候选样本仅在一个载体上为阴性。后续一次对抗性跟进测试要求普通 Gemini 重新解读像素结果,返回了 UNAVAILABLE;该跟进并非验证器重跑,因此不使内置判定失效。2026-07-31 对公开八秒 Veo 样本进行的全片段检查发现 0.10 仍被检出而 0.15 未被检出,因此 0.15 现为认证默认值。该全片段检查的可复现哈希与判定——一个载体、两行数据——存放于 data/evaluations/video-synthid-oracle.csv。此前的双片段校准仅为叙述性记录:其判定未写入受追踪的清单,因此请将认证默认值视为基于 2026-07-31 的行数据。
文档
从文档索引开始。
研究笔记与历史实验在文档索引中单独列出。它们解释了过往决策,但不定义当前公共 API。
贡献
安装开发环境并运行项目门禁:```bash uv sync --frozen --extra dev bash maintain.sh
参见[模块内部文档](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/docs/module-internals.md),在更改具有文档化不变量的子系统之前,请先阅读。
## 许可证
[Apache 2.0](https://github.com/wiltodelta/remove-ai-watermarks/blob/main/LICENSE)。版权所有 2025-2026 wiltodelta。