mcpField
R
Remove AI Watermarks

Remove AI Watermarks

本地服务
github.com媒体与设计6.2k今天更新

关于 Remove AI Watermarks

Remove AI Watermarks 是用于检查和处理自有图像、视频中 AI 来源标记及相关元数据的工具,提供命令行和 Python 接口。它涵盖可见标记、隐形像素水印与多种元数据;部分隐形处理需要 CUDA 或 GPU。

主要功能

  1. 01识别图像和视频来源信号
  2. 02移除已知可见 AI 标记
  3. 03清除 C2PA、EXIF、XMP 等元数据
  4. 04批量处理图像或视频目录
  5. 05通过扩散再生成处理隐形水印

适用场景

  1. 01检查自有图像中的来源标记
  2. 02清除视频上的可见标记和 AI 元数据
  3. 03批量处理生成内容
  4. 04使用 CUDA 移除图像隐形水印

MCP 相关

该项目提供 MCP 服务,供 MCP 客户端调用图像和视频来源标记识别与处理能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"wiltodelta-remove-ai-watermarks": {
"command": "uvx",
"args": [
"remove-ai-watermarks"
]
}
}
}
启动命令uvx remove-ai-watermarks

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiremove-ai-watermarks0.50.0

工具

3

收录的工具列表 · 更新于 今天

参数类型必填说明
pathstring是要检查的图像或视频文件。
check_visibleboolean否运行像素和可见标记检测器。False 表示仅读取元数据。

详细介绍

原文在翻译后有更新,译文可能不是最新。

移除 AI 水印

移除你自己生成的图像和视频中的 AI 来源标记:

  • Google Gemini 闪光水印和厂商文字标记等已知可见标记;
  • 通过直接破坏本地格式或扩散再生成,移除不可见像素水印;
  • C2PA、EXIF、XMP、IPTC 及相关 AI 元数据。
BeforeAfter
带有可见 Gemini 水印的图像移除可见水印后的图像
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 以及不可见水印移除则需付费。

PyPI Python Downloads License Tests Sponsor skills.sh

这是一个研究 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 InvisMarkremove-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 示例:处理后
OpenAI 人像网格:qwen-zimage 处理前OpenAI 人像网格:qwen-zimage 处理后
Gemini 示例:处理前Gemini 示例:处理后
Gemini 标牌:qwen-zimage 处理前Gemini 标牌:qwen-zimage 处理后

这些精确的输出文件已使用对应供应商的验证器进行检查。该结果仅适用于这些文件,不适用于其他种子、图像或未来版本的水印。

常用配方

移除检测到的所有可见标记
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。

准确的支持矩阵(包括重要的区域设置和检测器限制)请参阅支持的信号。合成示例图库为每种已注册的图像和视频标记提供一个标准样本。

工作原理

可见水印去除分为三个步骤:

  1. 在预期区域检测已注册的标记。
  2. 围绕标记创建蒙版。
  3. 仅使用 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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。