跳到主要内容
AI教程

使用 xxd-strip-ai-meta 批量清理图片中的 AI 来源标记与元数据

本教程介绍如何安装并使用 xxd-strip-ai-meta,批量清理图片中的 C2PA、Content Credentials、OpenAI、gpt-image 及常见元数据,同时保留 ICC 色彩配置与修改时间。

使用 xxd-strip-ai-meta 批量清理图片中的 AI 来源标记与元数据

项目简介

xxd-strip-ai-meta 是一个基于 ExifTool 的图片元数据清理工具,既可以作为独立命令行程序使用,也可以安装为 AI Agent Skill。它能够批量处理本地图片,清理受支持的 C2PA、Content Credentials、OpenAI、gpt-image 来源信息,以及 EXIF、XMP、IPTC 和注释等元数据。

工具默认直接修改原文件,但不会解码或重新编码图片像素。它会保留 ICC 色彩配置和文件修改时间,适合用于隐私保护、内部素材处理和元数据整理。

使用边界:这是元数据清理工具,不能删除画面中肉眼可见的水印,也不能保证清除像素级隐形水印、平台指纹或服务器端记录。请勿使用它误导他人对图片来源的判断。

核心特性

  • 递归查找 PNG、JPEG、WebP、TIFF、HEIC、HEIF 和 AVIF 图片。
  • 清理受支持的 AI 来源信息以及 EXIF、XMP、IPTC、注释等元数据。
  • 默认保留 ICC 色彩配置,减少色彩显示发生变化的风险。
  • 保留文件修改时间,不对图片像素进行解码或重新编码。
  • 支持同时传入多个文件和目录,并自动去除重叠输入产生的重复项。
  • 跳过隐藏子目录和常见缓存目录。
  • 默认跳过扩展名与文件头不匹配且已被识别的文件。
  • 支持预览、原文件备份、并发批处理、日志、后台运行和清理后验证。

具体格式的元数据写入能力取决于 ExifTool 及对应文件格式。工具只接受本地文件或目录,不直接处理远程链接和压缩包。

安装前提

运行项目需要 Python 3.10 或更高版本,以及已加入系统 PATH 的 ExifTool。项目本身没有第三方 Python 依赖。

1. 安装 ExifTool

macOS 用户可以通过 Homebrew 安装:

brew install exiftool

Debian 或 Ubuntu 用户可以通过系统包管理器安装:

sudo apt install libimage-exiftool-perl

Windows 用户可从 ExifTool 官网 下载并安装,然后确保其可执行文件所在目录已经加入 PATH。

2. 检查运行环境

python3 --version
exiftool -ver

Python 版本应为 3.10 或更高。Windows 环境中的 Python 命令可能是 python,此时应相应替换后续示例中的 python3。

3. 克隆项目

git clone https://github.com/nevertoday/xxd-strip-ai-meta.git
cd xxd-strip-ai-meta

以下命令均假设当前目录为仓库根目录。

基础使用流程

第一步:先预览待处理文件

由于默认行为会直接修改原文件,首次操作时应先使用 --dry-run。该参数只列出文件,不执行清理。

python3 scripts/clean_image_provenance.py /path/to/images --dry-run

检查输出,确认扫描范围中没有不应处理的图片。如果日志提示文件被跳过或路径不存在,也应先解决这些问题。

第二步:保留备份后清理

确认文件列表无误后,建议首次正式执行时添加 --backup:

python3 scripts/clean_image_provenance.py /path/to/images --backup

ExifTool 会保留名为 *_original 的原文件备份。确认处理结果满足预期后,再自行决定如何管理这些备份。

第三步:混合处理文件与目录

脚本支持一次传入多个本地文件和目录:

python3 scripts/clean_image_provenance.py \
  /path/to/a.png \
  /path/to/folder-a \
  /path/to/folder-b

目录会被递归扫描。若输入路径彼此重叠,工具会自动去重,避免同一文件因重叠路径被重复处理。

常用参数

  • --dry-run:只预览文件,不执行修改。
  • --backup:保留 ExifTool 生成的原文件备份。
  • --jobs 5:设置并发批次数,默认值为 5;可设置为 1 以降低系统负载。
  • --chunk-size 100:设置每批处理的文件数量,默认值为 100。
  • --log-file PATH:将日志写入指定路径。
  • --background:在后台启动任务,并输出停止任务和查看日志所需的命令;适用于 POSIX shell。
  • --drop-color-profile:同时删除 ICC 色彩配置,但可能影响图片的色彩显示。
  • --no-verify:跳过清理后的元数据来源标记检查。

大批量任务

后台执行

在支持 POSIX shell 的系统上,可以使用后台模式运行耗时较长的任务:

python3 scripts/clean_image_provenance.py /path/to/images --background

命令启动后会输出停止任务和查看日志的命令。应保存这些提示,以便后续监控或终止任务。

控制并发与批次大小

默认使用 5 个并发批次,每批最多 100 个文件。若设备资源有限,可将并发数降为 1:

python3 scripts/clean_image_provenance.py /path/to/images \
  --jobs 1 \
  --chunk-size 100 \
  --log-file /path/to/clean-image-meta.log

日志不仅用于查看清理失败,还应检查被跳过的文件和不存在的输入路径。退出码为 0 并不一定表示处理了图片,也可能代表没有找到文件。

验证与退出码

默认情况下,脚本会在清理后检查 ExifTool 输出中是否仍有相关来源关键字。该验证仅用于检查元数据标记,不是通用水印检测,也无法判断像素级隐形标记是否存在。

  • 退出码 0:没有报告清理失败或残留;也可能没有找到任何文件。
  • 退出码 1:发生清理失败。
  • 退出码 2:发现残留标记。

如果有特殊原因不需要执行清理后验证,可以使用:

python3 scripts/clean_image_provenance.py /path/to/images --no-verify

跳过验证后,工具不会进行上述来源关键字检查,因此应结合日志和其他检查方式确认结果。

高级使用建议

建立更稳妥的处理顺序

  1. 先对目标路径运行 --dry-run,核对扫描范围。
  2. 首次正式执行时使用 --backup,保留可恢复的原文件。
  3. 为大任务指定 --log-file,方便检查失败、跳过和缺失文件。
  4. 资源紧张时将 --jobs 调低至 1,再根据环境调整 --chunk-size。
  5. 根据退出码判断是否存在失败或残留,但不要忽略日志内容。
  6. 使用图片查看器检查处理后的色彩和可用性,再管理备份文件。

谨慎删除 ICC 色彩配置

默认保留 ICC 配置是为了维持图片的色彩显示。如果确实需要同时删除色彩配置,可以添加:

python3 scripts/clean_image_provenance.py /path/to/images \
  --backup \
  --drop-color-profile

--drop-color-profile 可能改变不同软件或设备中的色彩呈现,因此应先对少量副本进行测试。

理解格式限制

脚本会查找受支持扩展名的文件,但某种格式能否成功写入,仍取决于已安装的 ExifTool 版本及该文件格式本身。遇到失败时,应查看日志和 ExifTool 输出,而不是仅根据扩展名判断兼容性。

安装为 AI Agent Skill

项目也可以放入 AI Agent 的技能目录。以 Claude Code 为例:

git clone https://github.com/nevertoday/xxd-strip-ai-meta.git \
  ~/.claude/skills/xxd-strip-ai-meta

如果目标位置已经存在同名目录,应先备份该目录或改用其他安装位置。Skill 的入口文件为 SKILL.md。Agent 应从安装目录运行脚本,或先解析并使用脚本的绝对路径。

结语

xxd-strip-ai-meta 提供了一个无需第三方 Python 包的批量元数据整理流程。实际使用时,推荐遵循“先预览、再备份、后清理、查日志”的顺序,并明确区分元数据清理、可见水印删除和像素级标记检测。项目采用 MIT 许可证;ExifTool 是单独安装的依赖,遵循其自身许可证。