最近一个开源项目把我整沉默了。

不是因为它多厉害,而是因为它存在的理由——你用 Claude、Gemini、ChatGPT 生成的文字和文件,里面可能塞满了你根本看不见的"指纹"

11天,16,549 个 Star,1,895 个 Fork。这个叫 watermarks-remover 的项目火得有点吓人。


AI 水印,比你想的更深

说起"水印",大多数人脑子里浮现的是图片右下角那串文字。但 AI 厂商玩的水印,段位高多了。

第一种:看不见的 Unicode 注入。

你复制了一段 Claude 生成的文字,表面上干干净净,但里面可能藏着大量零宽空格(ZWSP)、双向控制符(bidi override)、Unicode 标签字符。肉眼完全不可见,但机器一查就知道来自 AI。

第二种:统计层面的 Token 采样偏置。

Google 的 SynthID-Text、学术界的 Kirchenbauer 方案,核心思路都是在生成文字时,悄悄把某些 token 的采样概率往特定方向偏,留下一个统计指纹。你改几个词,指纹还在。重新排个顺序,指纹还在。Ars Technica 上个月的测试显示,SynthID 图像水印甚至能扛住 300 次压缩迭代,鲁棒性相当强悍。

第三种:文件元数据——C2PA 和 EXIF。

Adobe 和一票大厂力推的 C2PA 标准,会在图片、PDF、视频里嵌入一条完整的"内容生成链路"记录:用了哪个 AI、哪个版本、什么时间。PNG 里的 EXIF、DOCX 里的文档属性,都是同理。今年学术界对 C2PA 的安全分析直接点名:这套系统规范存在严重漏洞,但它的隐私影响已经是现实问题。

这些东西有没有合理性?有的。溯源造假、深度伪造,都是真实问题。

但问题在于:当这些"标记"打在你自己创作的内容上,你有没有权利把它们清掉?

这正是 watermarks-remover 要回答的问题。


watermarks-remover 是什么

项目地址:https://github.com/guillaumemeyer/watermarks-remover
作者:Guillaume Meyer | 许可证:MIT | 最新版本:v0.5.0

一句话描述:Agent Skill + stdlib Python 服务,从文本和文件中剥离多厂商 AI 溯源水印。

2026 年 8 月 11 日发布首个版本,14 天后的 v0.5.0 已经是一套相当完整的服务架构。覆盖的范围宽到有点夸张——

支持的 AI 厂商水印: Claude(Unicode 注入 + C2PA)、Gemini(SynthID-Text + SynthID-Pixel)、OpenAI(元数据溯源)、开源 LLM(Kirchenbauer KGW、keyed-Gumbel / EXP Aaronson 方案)

支持的文件格式:

  • 图像:PNG、JPEG、WebP、AVIF、HEIC、BMP、GIF、TIFF

  • 文档:SVG、PDF、DOCX、XLSX、PPTX、EPUB、ODT、HTML、Markdown

  • 媒体:MP4/MOV/M4A、WAV、MP3

基本上你能想到的格式,全在里面了。


三层架构,拆开来才知道用心

这是我觉得最值得写的部分——作者没有把"去水印"做成一个黑盒,而是明确分了三层,每层对应不同的威胁模型和处理方式。

🔵 Layer A:确定性清除(安全、推荐先跑)

目标:不可见 Unicode 字符。

零宽空格(U+200B)、零宽非连接符(U+200C)、双向控制符(U+202A~U+202E)、Unicode 标签区块(U+E0000~U+E007F)……这些字符在文字里就像空气,你看不见,但 AI 检测器看得见。

Layer A 用纯 Python 脚本做确定性处理,没有模型调用,速度快,不会误伤内容。对于普通文本,这一层跑完基本就够了。

# 通过 HTTP API 调用清理
curl -X POST http://127.0.0.1:8765/clean \
  -H "Content-Type: application/json" \
  -d '{"type": "text", "content": "你的文本内容", "options": {"nfkc": true}}'

🟡 Layer B:统计水印重写(最佳努力,不保证)

目标:Token 采样偏置水印。

这一层让 Agent 重新理解并改写文本,打乱原始的 token 采样分布。也提供了可选的 rewrite_text.py hook,方便接入自定义重写逻辑。

这里有一点作者说得很诚实:Layer B 是"最佳努力",不是保证清除。 统计水印的特性决定了,没有原始密钥/配置就很难 100% 验证是否清干净。

可选组件 MarkLLM 套件可以做 before/after 对比检测,但那也是 same-config-only,不是官方检测器。

一句话:Layer B 能大幅降低被检测到的概率,但别拿它去对抗持有密钥的官方检测系统。

🟢 Files Layer:文件元数据清除

目标:C2PA、EXIF、XMP、文档属性。

这一层依赖外部工具链——c2patool(Adobe 官方工具)、exiftoolqpdf。Docker 镜像里都预装好了,本地用就要自己装依赖。每种格式用对应的元数据清理方式处理,不是粗暴删文件头。

怎么用?两种姿势

姿势一:作为 Claude Code Skill 使用

这是项目原生设计方式——Skill 本身只是一个 Markdown 文件(无代码),通过 HTTP 调用背后的 Service,Agent 宿主不需要安装任何 Python 依赖。

# 一键安装 Skill
bash <(curl -sSL https://github.com/guillaumemeyer/watermarks-remover/raw/main/install-skill.sh)

安装完成后,在 Claude Code 里直接说:

/remove-ai-marks 或 "strip AI watermarks from this file"

姿势二:Docker Compose 自托管服务

v0.5.0 最大的更新是把整个项目做成了可自托管的 HTTP 服务:

# 启动核心服务
docker compose up core

# 需要 MarkLLM / MarkDiffusion 验证套件时
docker compose --profile harness up

服务跑起来暴露四个 HTTP 端点:

端点

说明

GET /health

健康检查

GET /capabilities

查询当前可用功能(工具、水印 scheme 等)

POST /inspect

检测水印(不清除)

POST /clean

执行清除

默认只绑定 127.0.0.1,可配 Bearer Auth,安全加固做得还算扎实。


我的看法

坦白说,第一次看到这个项目时,我下意识的反应是:这是不是在帮人绕过 AI 内容检测?

看完文档之后,我觉得这个问题本身就有问题。

README 里有一段话写得很清楚:

For privacy and hygiene on content you own. We do not claim this makes AI-generated text "undetectable as human."

这不是"帮你假冒人工写作"的工具。核心场景是:你用 AI 辅助生成了一些内容,这些内容属于你,你有权利决定里面带不带厂商的追踪标记。

今年学术界已经有多篇论文指出 C2PA 的隐私问题——一张用 AI 润色过的照片,理论上能暴露你用了哪个 AI 服务、哪个版本、什么时间。这不是偏执,是有充分文献支撑的隐忧。

另一个让我印象深刻的是架构上的克制。作者没有试图把一切塞进黑盒,而是明确告诉你:Layer A 是可靠的,Layer B 是尽力的,统计水印没有厂商密钥就无法完全验证清除效果。这种诚实在工具类开源项目里不多见。

11 天 1.6 万 Star,说明这个需求是真实存在的。至于这把刀该怎么用,还是得靠用刀的人。


项目地址:https://github.com/guillaumemeyer/watermarks-remover

你怎么看 AI 厂商给内容打溯源水印这件事——合理的保护,还是过度的监控?欢迎评论区聊聊。

谢谢你阅读我的文章~

我是顾北,我们下期再见!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐