关于 Remove AI Watermarks
Remove AI Watermarks 是用于检查和处理自有图像、视频中 AI 来源标记及相关元数据的工具,提供命令行和 Python 接口。它涵盖可见标记、隐形像素水印与多种元数据;部分隐形处理需要 CUDA 或 GPU。
主要功能
- 01识别图像和视频来源信号
- 02移除已知可见 AI 标记
- 03清除 C2PA、EXIF、XMP 等元数据
- 04批量处理图像或视频目录
- 05通过扩散再生成处理隐形水印
适用场景
- 01检查自有图像中的来源标记
- 02清除视频上的可见标记和 AI 元数据
- 03批量处理生成内容
- 04使用 CUDA 移除图像隐形水印
MCP 相关
该项目提供 MCP 服务,供 MCP 客户端调用图像和视频来源标记识别与处理能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 要检查的图像或视频文件。 |
| check_visible | boolean | 否 | 运行像素和可见标记检测器。False 表示仅读取元数据。 |
详细介绍
原文在翻译后有更新,译文可能不是最新。
移除 AI 水印
移除你自己生成的图像和视频中的 AI 来源标记:
- Google Gemini 闪光水印和厂商文字标记等已知可见标记;
- 通过直接破坏本地格式或扩散再生成,移除不可见像素水印;
- C2PA、EXIF、XMP、IPTC 及相关 AI 元数据。
| 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
视频支持来源识别、完整清理可见标记和元数据、目录批处理、移除可见的 Sora、Veo、Seedance、Doubao、Dola、Hailuo AI 和 Kling AI 标记,以及通过经过 oracle 认证的 VAE 再生成来移除视频 SynthID。
raiw.cc 将此库作为托管服务运行,包含 GPU,无需安装。该服务免费提供 Standard 输出(最高 12 MP)的可见标记和元数据移除;原始分辨率高于 12 MP 以及不可见水印移除则需付费。
这是一个研究 AI 来源信号的项目,仅供合法处理你拥有的内容。项目按原样提供,不作任何保证,也不承担任何责任;每位用户都需对自己的使用方式负责。项目不针对图库预览图,也不针对保护第三方付费内容的其他水印。包括中国在内的一些司法管辖区限制移除 AI 标记或提供此类工具。请参阅适用范围、安全和法律说明。
选择要执行的操作
| 目标 | 命令 | GPU |
|---|---|---|
| 查找来源信号和水印 | identify | 否 |
| 根据像素对照片进行分类(自选启用,不代表来源信息) | classify | 否 |
| 移除已知的可见 AI 标记 | visible | 否 |
| 擦除你选定的区域 | erase | 否 |
| 移除 AI 元数据 | metadata | 否 |
| 识别支持的视频来源信息 | video identify | 否 |
| 移除视频中的可见标记和 AI 元数据 | video all | 否 |
| 移除视频中的 AI 元数据 | video metadata | 否 |
| 移除视频中已注册的可见 AI 标记 | video visible | 否 |
| 处理视频目录 | video batch | 视模式而定 |
| 应用经过校准的视频像素 SynthID 移除配置 | video invisible | 建议使用 |
| 重新生成图像以破坏不可见水印 | invisible | 必需(CUDA) |
| 运行可见标记、不可见水印和元数据移除 | all | 建议使用 |
| 处理目录 | batch | 视模式而定 |
Microsoft Paint 和 Photos 的 InvisMark 声明会自动转交给像素再生成处理。all 命令会同时移除隐藏的像素水印及与之关联的 C2PA 清单;单独移除元数据时,只会移除清单。专用 Python API 可以检查并破坏经验证的本地 Watermarker.dll 负载,无需使用扩散模型。
安装模式
| 需求 | 安装 |
|---|---|
| 元数据检查与剥离 | remove-ai-watermarks |
| 照片 AI 与相机分类 | remove-ai-watermarks[classify] |
| OpenAI/Google/未知来源导出分类 | remove-ai-watermarks[source-classify] |
| 可见水印检测与移除 | remove-ai-watermarks[visible] |
| 可见视频处理 | remove-ai-watermarks[video] |
| 视频 SynthID 移除 | remove-ai-watermarks[video,diffusion] |
| 无需 Torch 的 DWT-DCT 检测 | remove-ai-watermarks[detect] |
| 直接在本地干扰 Paint InvisMark | remove-ai-watermarks[pixels] |
| 隐形图像移除(需要 CUDA) | remove-ai-watermarks[qwen-zimage] |
| 当前 Python 环境可用的所有生产功能 | remove-ai-watermarks[all] |
更底层和专用的额外功能包括 pixels、heif、trustmark、
migan、lama、diffusion、classify-onnx 和 source-classify。此
安装指南详细介绍了这些功能的确切
依赖组成、Python 兼容性和模型要求。
快速开始
安装以元数据处理为主的默认 CLI:
uv tool install remove-ai-watermarks
检查图像:
remove-ai-watermarks identify image.png
若要根据像素对照片进行分类(AI 与相机,可选提供方),请安装额外功能并调用
classify。identify 不会启动它:
uv tool install --force "remove-ai-watermarks[classify]"
remove-ai-watermarks classify image.png
指南:照片像素分类。
移除元数据后,若要获得轻量且可弃权的 OpenAI/Google/未知来源导出信号,请使用 单独的 Python API。它不是 SynthID 检测器:
import remove_ai_watermarks as raiw
result = raiw.classify_source("image.png")
print(result.label, result.reason)
安装 remove-ai-watermarks[source-classify]。指南:
来源流水线分类。
带签名的溯源信息是支持 SynthID 的方式,identify 会读取它。此软件包没有本地
SynthID 像素检测器。周期晶格专家的研究见 scripts/synthid_runtime/ 和
synthid-detector-research.md。
若要移除可见水印,请安装像素依赖:
uv tool install --force "remove-ai-watermarks[visible]"
然后移除已知的可见水印和 AI 元数据:
remove-ai-watermarks visible image.png -o clean.png
剥离元数据,但不运行可见水印修复或扩散处理:
remove-ai-watermarks metadata image.png --remove -o clean.png
不使用 -o 时,此命令会原地覆盖源文件。
检查或移除 MP4、MOV、M4V、WebM、MKV、AVI 或 FLV 文件中的 AI 元数据:
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
检查包括原生 TC260 AIGC 标签,位于
moov.udta.meta.keys/ilst,包括 moov 位于媒体负载之后的情况,
还包括 Doubao 的 iOS 导出所写入的 QuickTime 格式 meta 变体(作为直接 moov
子项的裸 meta box,以及无键 hdlr=mdir 元数据列表)。
同一元数据列表结构中的带键 workflow 和 prompt 条目也会被检测并移除,
包括 ComfyUI 导出文件。
MKV 和 WebM 检查会读取规范定义的
Segment.Tags.Tag.SimpleTag 位置。AVI 使用 LIST/INFO/AIGC,而 FLV
使用 script.onMetaData.AIGC。移除这些非 ISOBMFF 格式中的元数据时,会通过流复制重新封装。
使用面向产品的视频处理路径来识别或清理文件:
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 配置。
按相同约定处理目录:
remove-ai-watermarks video batch ./videos --mode all
移除受支持的可见视频水印:
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
会在一次解码过程中扫描所有提供方,并按照下方所示的特异性顺序选择第一个稳定匹配项。当有效的 Google AI 视频来源信息存在时,如果菱形标记嵌套在 Sora 区域内,或 Veo 标记贯穿整个片段而 Sora 标记没有,则会在 Sora/Veo 交叉匹配时优先选择 Veo。
传入显式标记可将检测范围限制为单个提供方。
Sora 可识别移动的 Sora 2 吉祥物,无论是否带有文字标识;仅匹配吉祥物时,也要求完整的双眼形状。Veo 可识别当前的四角菱形和旧版 Veo 文字。Seedance 可识别固定的方框 AI 标签,Dola 可识别固定的 Dola AI 文字,Hailuo AI 可识别组合标签 MINIMAX | hailuo AI,Kling AI 可识别右下角带版本后缀的 KLING AI 或 KlingAI 标签。完成的编码会以原子方式发布。未找到稳定标记时,不会写入任何输出。
HDR、PQ/HLG 以及位深高于 8 位的输入会在编码前被拒绝,而不会经由 OpenCV 的 8 位 BGR 边界被静默降位。
应用经过校准的视频像素 SynthID 移除配置:
uv tool install --force "remove-ai-watermarks[video,diffusion]"
remove-ai-watermarks video invisible input.mp4 -o clean.mp4
此路径会使用整个序列共享的单个潜在噪声场重新生成完整序列,复制完整音频,剥离源元数据,并以原子方式发布完成的编码。默认的 noise_std=0.15 配置通过了双载体校准和完整的公开 8 秒 Veo Oracle 检查。Google 未发布本地解码器,因此对于特别重要的文件或提供方发生变化后,重新进行提供方检查仍有帮助,但这并非产品结果状态。因此,CLI 会将其描述为视频像素重新生成,而不会声称给出逐文件的 SynthID 判定;复制的音频水印则报告为 UNVERIFIED。
若要通过 CLI 或高级 API 移除不可见水印,请安装 qwen-zimage extra。必须配备 NVIDIA GPU:所有扩散配置都仅支持 CUDA,不提供 CPU 或 MPS 回退。专用的本地 Paint API 使用不需要 CUDA 的 pixels extra。
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png
如果本地检测器无法确认不可见水印,但你知道图像来自 AI 生成器,请添加 --force:
remove-ai-watermarks invisible image.png -o clean.png --force
文字密集的图像可选择启用实验性的已验证文本后处理步骤。它接受经过人工审核的字符串和行框,或经操作员验证的纯几何清单;不会将原始 OCR 输出视为真实依据,也不会自动运行:
uv tool install --force "remove-ai-watermarks[text-restoration]"
remove-ai-watermarks invisible image.png -o clean.png \
--text-manifest verified-lines.json --force
有关清单架构、兼容性限制和 Oracle 注意事项,请参阅 CLI 指南。
有关 Homebrew、uv、可选功能和开发环境设置,请参阅安装指南。
示例
可见的 Gemini 标记
本页顶部的 after 光栅图由公开路径根据受版本控制的 before
光栅图生成:
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 会为 Google 选择 sdxl-zimage,为 Microsoft 选择 chroma-zimage,否则选择 qwen-zimage。以上配置均仅支持 CUDA。
uv tool install --force "remove-ai-watermarks[qwen-zimage]"
remove-ai-watermarks invisible image.png -o clean.png --force
| OpenAI 示例:处理前 | OpenAI 示例:处理后 |
|---|---|
![]() | ![]() |
| Gemini 示例:处理前 | Gemini 示例:处理后 |
|---|---|
![]() | ![]() |
这些精确的输出文件已使用对应供应商的验证器进行检查。该结果仅适用于这些文件,不适用于其他种子、图像或未来版本的水印。
常用配方
移除检测到的所有可见标记
remove-ai-watermarks visible image.png -o clean.png
默认的 --mark auto 会检查所有已注册的可见标记,并移除所有匹配项。如果你能看到标记但检测器未能识别,可明确指定其区域:
remove-ai-watermarks erase image.png \
--region 1640,1930,400,100 \
-o clean.png
--region 使用 x,y,width,height 格式,且可重复指定。
使用学习式填充后端
未安装学习式后端时,visible 附加组件会使用 OpenCV 修复。对于更复杂的背景,学习式后端附加组件会自动包含相同的像素依赖项:
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
降低 CUDA 内存使用量
remove-ai-watermarks invisible image.png -o clean.png \
--cpu-offload --force
CPU 卸载会在 CPU 和 GPU 之间移动模型组件,以降低 CUDA 内存压力,但会牺牲速度。
处理目录
remove-ai-watermarks batch ./images --mode visible
remove-ai-watermarks batch ./images --mode all
工具能够识别的内容
可见标记支持包括:
- Google Gemini 和 Nano Banana 的可见闪光水印;
- 豆包、即梦文字标识和左上角
AI生成布局、Qwen、Kling AI、元宝、Dola、WorkBuddy、百度、LiblibAI 的底部居中文字标识和左上角紧凑胶囊标记,以及 RunningHub 标签; - 经过校准的 Microsoft 右上角白色和米色 AI 徽章布局;
- 经过校准的意大利语和韩语 Samsung Galaxy AI 声明;
- 通用的、无品牌的右下角
AI生成备用标记,用于 OS/图库级 AI 编辑标记,这些标记本身不带供应商品牌文字(已确认 vivo 和小米图库);仅基于合成样本校准,证据弱于上述针对供应商调优的检测器; - OpenArt 文字标识,位于画面中心而非角落;未经校准(仅确认过 1 个真实案例,且没有采集到样本集)。
元数据和来源信息检查涵盖 C2PA、EXIF、XMP、IPTC、图像和视频容器中的常见生成器参数、中国 TC260 AIGC 标签,以及若干供应商特有信号。可选解码器还可支持开放式 DWT-DCT 水印和 Adobe TrustMark。
准确的支持矩阵(包括重要的区域设置和检测器限制)请参阅支持的信号。合成示例图库为每种已注册的图像和视频标记提供一个标准样本。
工作原理
可见水印去除分为三个步骤:
- 在预期区域检测已注册的标记。
- 围绕标记创建蒙版。
- 仅使用 OpenCV、MI-GAN 或 LaMa 填充蒙版区域。
元数据去除采用格式感知的剥离方式。去除 JPEG 元数据时会保留编码后的图像扫描数据,而不是重新压缩图像。原生 MP4/MOV TC260 值和带键的生成参数会被置空,同时不改变区块大小或媒体偏移量。其他受支持的容器则使用相应的元数据处理路径。
通过 CLI 和高级 API 去除不可见水印时,会通过扩散管线重新生成图像。专业调用方也可以改用解码并破坏已确认为 Microsoft Paint 原生格式的图像,造成的像素改动要小得多。两种路径都无法保证所有专有验证器都会拒绝每个输出结果。
Python API
可见水印去除 API 需要安装 remove-ai-watermarks[visible]。
import remove_ai_watermarks as raiw
result, removed = raiw.remove_visible("watermarked.png", "clean.png")
print(removed)
report = raiw.remove_visible_detailed("watermarked.png", "clean.png")
print(report.status) # cleaned | partial | unvalidated | no_watermark
complete = raiw.remove_all("watermarked.png", "clean.png")
print(complete.visible_status, complete.visible_marks)
images = raiw.remove_batch("images", "images_clean", mode="visible")
for item in images.items:
print(item.source, item.visible_status, item.visible_marks)
provenance = raiw.identify_video("input.mp4")
report = raiw.inspect_video_metadata("input.mp4")
complete = raiw.remove_video_all("input.mp4", "clean.mp4")
print(complete.visual_invisible_action, complete.audio.watermark_status)
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")
print(synthid_cleaned.visual_invisible_action, synthid_cleaned.audio.watermark_status)
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 数组。对于路径输入,它还会读取来源元数据、保留透明度,并可从写入的结果中剥离 AI 元数据。
有关可见水印去除、完整的 remove_all 和 remove_batch 管线、来源检查、元数据剥离和扩散用法,请参阅 Python API 指南。
Agent 技能
编码 Agent 可以安装已发布的技能并调用此 CLI:
npx skills add wiltodelta/remove-ai-watermarks
Claude Code 可以将此仓库添加为插件市场:
/plugin marketplace add wiltodelta/remove-ai-watermarks
/plugin install remove-ai-watermarks@remove-ai-watermarks
Codex 通过相同的技能读取 .codex-plugin/plugin.json。
该技能会拒绝图库素材及其他第三方付费素材标记。请参阅
Agent 技能指南。
MCP 服务
remove-ai-watermarks mcp 通过 stdio 将 identify、remove 和 batch 作为 Model Context Protocol 工具提供,每个工具都是一个 CLI 命令的轻量封装:
{"mcpServers": {"remove-ai-watermarks": {"command": "uvx", "args": ["remove-ai-watermarks", "mcp"]}}}
请参阅 MCP 服务指南。
ComfyUI
独立的 ComfyUI Remove AI Watermarks 软件包提供用于可见水印去除、检测、区域擦除和不可见水印去除的节点。
重要限制
- 缺少本地信号意味着未知,并非干净。剥离元数据后,专有像素水印仍可能残留。 各处理路径会留下什么 按命令列出可能残留的内容以及检查方法。
- 可见水印移除会重建一小块区域。效果取决于背景和所选填充后端。
- 不可见水印移除会改变整张图像,并可能影响人脸、文字或精细细节。
- 可见视频水印移除可识别移动的 Sora 2 字标、当前版 Veo 菱形标记和旧版
Veo文字、Seedance 方框AI标记,以及固定位置的 Doubao、Dola、Hailuo AI、Vidu 和 Kling AI 标记。它无法识别旧版 Sora Turbo 角落漩涡标记,也无法识别这些提供商未注册的布局。 传统 OpenCV 后端可能会模糊结构化背景;需要较好的修复效果时,请使用 MI-GAN 或 LaMa。 - 视频 SynthID 再生成会改变分辨率、帧率和图像细节。随附配置已获 oracle 认证,但没有公开的本地解码器能在运行时认证任意输出。提供商发生变化后,请重新检查特别重要的输出。
- 通过 CLI 和高级 API 移除不可见水印需要 CUDA。所有扩散配置在构造时都会拒绝使用任何其他设备,而不会回退到无法运行它们的设备。专用本地 Paint API、可见水印移除、元数据剥离和
identify无需 CUDA 即可运行。 - 提供商的水印系统可能会改变。若提供商提供自有验证器,请用其验证重要输出。
随附的 video invisible 命令使用经过认证的 noise_std=0.15 配置。配套的 scripts/video_synthid_sweep.py 研究脚本会生成匹配的重新编码对照和 VAE 再生成候选项,并将验证结果留空:
uv run --extra video --extra diffusion python scripts/video_synthid_sweep.py input.mp4 -o sweep/
若要评估输出实际付出的代价,请使用 scripts/video_fidelity_probe.py:引擎自身的 PSNR 是在输入缩放后、最终编码前测量的,因此只有探测脚本能评估最终交付的画面。
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。
参与贡献
安装开发环境并运行项目检查:
uv sync --frozen --extra dev
bash maintain.sh
修改具有已记录不变量的子系统前,请参阅 模块内部说明。 如需报告漏洞,请按照 SECURITY.md 中的说明操作。
许可证
Apache 2.0。版权所有 2025-2026 wiltodelta。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。





