mcpField
W
watermarks-remover

watermarks-remover

github.com/akillness文档处理5350 次安装4 天前更新
代码仓库

关于 watermarks-remover

watermarks-remover 是基于 Python 脚本的 Agent 技能,用于检查和清理文本及文件中的 AI 来源标记。它处理 Unicode 和统计型文本标记、文件元数据及可选的图像水印流程,并按置信度报告发现,区分检查与清理。

主要功能

  1. 01检查文本和文件来源标记
  2. 02清理不可见 Unicode 和文本标记
  3. 03移除支持格式的文件元数据
  4. 04审计目录和网站站点地图
  5. 05可选检测或移除图像水印

适用场景

  1. 01检查并清理获准处理的 Markdown 草稿
  2. 02清除图像或文档中的来源元数据
  3. 03审计目录或网站中的来源信号
  4. 04使用可选后端检查潜在图像水印

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/akillness/jeo-skills --skill watermarks-remover

安装后在 Claude Code 中输入/watermarks-remover确认已加载。

附带文件scripts/watermarks-remover.shreferences/commands.md

详细介绍

水印移除器 — 清除 AI 来源标记

Agent 技能,封装了 guillaumemeyer/watermarks-remover。这是一组仅依赖 Python 标准库的脚本,可从文本(不可见 Unicode 字符、统计采样水印)和文件(C2PA / EXIF / XMP / 文档属性)中移除多个厂商的 AI 来源标记。本工具适用于保护隐私和清理你拥有或获准处理的内容,不适用于学术造假或虚假声称内容由「人工撰写」。

何时使用此技能

  • 清除 AI 工具悄悄插入生成文本中的不可见 Unicode 字符、双向控制符、标签字符或奇异空格同形字
  • 从 PNG、JPEG、SVG、PDF、DOCX、ODT、HTML 或 Markdown 文件中移除 C2PA 清单、EXIF/XMP AI 来源字段或生成器元数据
  • 通过引导式改写,在保留事实、名称和数字的同时,降低 AI 撰写文本中统计(token 采样)水印的信号
  • 审计整个目录树或实时网站(通过其站点地图)中的 AI 来源信号,并获取按置信度分类的报告
  • 可选:使用项目的外部引导脚本,对图像中的像素域 SynthID 类水印进行评分或移除

何时不要使用此技能

  • 用户要求保证某厂商的官方检测器无法检测出来——此工具包只会报告可验证的移除结果,并尽力改写;没有任何本地工具能保证达到该结果
  • 移除音频/视频水印,或破坏训练数据后门触发机制——上游项目明确不支持这些用途
  • 清除 C2PA 软绑定(一种可将已剥除的文件重新关联到远程 Content Credentials 清单的水印)——剥除硬绑定的 C2PA 元数据并不能清除这一关联
  • 用户明确表示要对其不拥有的内容进行学术造假、抄袭或虚假声称内容由「人工撰写」——请根据上游的 skills/remove-ai-marks/references/ethics.md 发出警告,并且只对获准处理的内容进行技术清理

说明

步骤 1:克隆仓库并确定脚本目录
git clone --depth 1 https://github.com/guillaumemeyer/watermarks-remover.git
SCRIPTS=watermarks-remover/skills/remove-ai-marks/scripts

此工具包未以 pip 包的形式发布;它作为独立脚本目录使用(仅依赖 Python 3.10+ 标准库)。如果系统中存在 c2patool 和 exiftool,工具会自动检测并使用它们,尤其是在处理 PDF 时。

步骤 2:为输入选择合适的处理层
输入路径
粘贴的文本 / .txt / 代码文本层 A(inspect_text.py / clean_text.py)
.md / .html容器清理(frontmatter/元数据)+ 层 A
.png / .jpg / .jpeg移除图像元数据(inspect_image.py / clean_image.py)
.svg / .pdf / .docx / .odt移除容器元数据
混合格式 / 未知格式统一工具 inspect_file.py / clean_file.py(按格式自动路由)
目录使用 audit_dir.py 生成汇总报告
网站 / 站点地图audit_website.py

默认情况下,文本工具会拒绝二进制输入(检测文件魔数和控制字节),以免将 .docx / .pdf / 图像的压缩字节解码为文本并破坏文件;可以传入 --force-text 覆盖此限制,或者使用会自行正确路由的统一 _file.py 工具。

步骤 3:清理前先检查
python3 "$SCRIPTS/inspect_file.py" --json path/to/input
python3 "$SCRIPTS/inspect_text.py" --json path/or/-
python3 "$SCRIPTS/inspect_image.py" --json image.png

检查结果分为 confirmed / probable / informational / likely_false_positive。清理前,请汇总可疑代码点和 C2PA/AI 标记;不要在没有提示的情况下覆盖原文件。

步骤 4:确定性清理(层 A + 文件元数据)
python3 "$SCRIPTS/clean_text.py" INPUT -o OUTPUT --stats
python3 "$SCRIPTS/clean_file.py" INPUT -o OUTPUT       # unified, any supported format
python3 "$SCRIPTS/inspect_file.py" OUTPUT               # verify the result

除非用户明确要求原地修改(可使用 --in-place,但此操作具有破坏性),否则请优先写入 *.cleaned.* 输出文件。

步骤 5:始终为散文内容提供 Layer B(统计改写)

完成 Layer A 后,提出改写自然语言内容的步骤,以降低 token 采样水印的信号;不要悄悄跳过:

python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphrase

print-prompt 是适用于 CI 的默认选项(不会调用模型;只会输出改写提示词,供 Agent 自行运行)。也可以通过环境变量接入本地 Ollama 或兼容 OpenAI 的后端:

export WATERMARKS_REWRITE_BACKEND=ollama
export WATERMARKS_REWRITE_MODEL=llama3.2
python3 "$SCRIPTS/rewrite_text.py" draft.md -o draft.rewritten.md --strength paraphrase

规则:API 密钥只能通过 WATERMARKS_REWRITE_API_KEY 提供(绝不通过 argv);除非明确设置 --allow-remote 或 WATERMARKS_REWRITE_ALLOW_REMOTE=1,否则拒绝非回环端点;优先选择与疑似来源厂商不同的改写模型,以避免重新打上水印。务必告知用户,此步骤会牺牲散文质量(语气/风格)来换取清理效果——请参阅上游 README 的“Disclaimer”部分;此方法尽力而为,绝不是经过认证的绕过方案。

步骤 6:可选的像素域 SynthID 评分 / CtrlRegen 移除

只有当输入是带有疑似像素域水印(SynthID 类、StegaStamp、Tree-Ring、StableSignature)的图像时,才使用这些功能。两者都很重、依赖外部工具,且未捆绑在此仓库中:

# Detection-only score (external aloshdenny/reverse-SynthID checkout)
"$SCRIPTS/setup_synthid.sh"
REVERSE_SYNTHID_DIR=~/reverse-SynthID ~/reverse-SynthID/.venv/bin/python "$SCRIPTS/score_synthid.py" shot.png

# Removal (external mertizci/noai-watermark checkout; conservative default strength 0.25)
"$SCRIPTS/setup_ctrlregen.sh"
NOAI_WATERMARK_DIR=~/noai-watermark ~/noai-watermark/.venv/bin/python \
  "$SCRIPTS/clean_ctrlregen.py" shot.png -o shot.ctrlregen.png

预计模型下载量约为 10 GB;CtrlRegen 强烈建议使用 GPU,CPU 运行速度较慢。clean_image.py --remove-pixel ctrlregen 也会在剥离元数据后,将其接入统一的图像处理流水线。CtrlRegen 的后端未附带 LICENSE 文件(按保留所有权利处理),且只会在运行时从用户自己的检出目录加载。

步骤 7:汇总审计目录树或网站
python3 "$SCRIPTS/audit_dir.py" DIR --json
python3 "$SCRIPTS/audit_website.py" --sitemap https://example.com/sitemap.xml --json
python3 "$SCRIPTS/audit_website.py" --base https://example.com --json   # auto-discovers the sitemap

audit_website.py 仅使用标准库;对于远程 URL,不会通过 shell 调用 c2patool/exiftool。如需此级别的详细信息,请下载资源并在本地运行 audit_dir.py。

步骤 8:使用封装器进行只读环境检查
bash .agent-skills/watermarks-remover/scripts/watermarks-remover.sh doctor <repo-dir>
bash .agent-skills/watermarks-remover/scripts/watermarks-remover.sh inspect <repo-dir> <file>
bash .agent-skills/watermarks-remover/scripts/watermarks-remover.sh clean <repo-dir> <file> <output>

doctor 只会报告 Python 版本和可选工具(c2patool、exiftool)的可用情况;不会写入磁盘或安装软件包。

最佳实践

  1. 清理前先检查,清理后再验证——先运行 inspect_*,再运行 clean_*,最后对输出运行 inspect_file.py。
  2. 绝不静默覆盖——默认使用 *.cleaned.* 输出路径;只有在用户明确要求时才使用 --in-place。
  3. 始终提供 Layer B,但诚实说明其代价——移除统计水印意味着改写文字,而改写会损害语气/风格;应明确说明这种取舍,不要悄悄改写生产文案。
  4. 优先选择与来源不同的改写模型——用 Claude 改写 Claude 文本(或用 Gemini 改写 Gemini 文本),可能会在输出中重新打上同类水印。
  5. 如实报告置信度——区分 confirmed/probable 结果与 informational/likely_false_positive 噪声,绝不要声称官方厂商检测器会失效。
  6. 确定性处理路径不涵盖 C2PA 软绑定及像素/音频/视频标记——只有可选的外部 CtrlRegen 后端能够处理像素域图像标记,即便如此,也只是尽力而为的再生成式移除工具。
  7. 重型后端须选择启用——除非用户确实需要像素域评分/移除,否则不要运行 setup_synthid.sh / setup_ctrlregen.sh;它们会拉取数 GB 的依赖项和模型。

参考资料

示例

示例 1:清理 Markdown 草稿并验证
git clone --depth 1 https://github.com/guillaumemeyer/watermarks-remover.git
SCRIPTS=watermarks-remover/skills/remove-ai-marks/scripts
python3 "$SCRIPTS/inspect_file.py" --json draft.md
python3 "$SCRIPTS/clean_file.py" draft.md -o draft.cleaned.md
python3 "$SCRIPTS/inspect_file.py" draft.cleaned.md
示例 2:从屏幕截图中移除 C2PA/EXIF,然后检查是否存在像素水印
python3 "$SCRIPTS/inspect_image.py" shot.png
python3 "$SCRIPTS/clean_image.py" shot.png -o shot.cleaned.png
示例 3:在推荐工作流前检查环境
bash .agent-skills/watermarks-remover/scripts/watermarks-remover.sh doctor ~/src/watermarks-remover

评论

支持 Markdown