メインコンテンツへ移動
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

以下のコマンドはすべて、現在のディレクトリがリポジトリのルートであることを前提としています。

基本的な使用手順

ステップ1:処理対象のファイルをプレビューする

デフォルトでは元ファイルを直接変更するため、初回は--dry-runを使用してください。このオプションはファイルを一覧表示するだけで、削除処理は実行しません。

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

出力を確認し、スキャン範囲に処理すべきでない画像が含まれていないことを確認します。ログにファイルのスキップや存在しないパスが表示された場合も、先に問題を解決してください。

ステップ2:バックアップを保持して削除する

ファイル一覧に問題がないことを確認したら、初回の正式実行では--backupを追加することをおすすめします。

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

ExifToolは*_originalという名前の元ファイルバックアップを保持します。処理結果が期待どおりであることを確認してから、これらのバックアップをどのように管理するか判断してください。

ステップ3:ファイルとディレクトリを混在させて処理する

スクリプトでは、複数のローカルファイルとディレクトリを一度に指定できます。

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:1バッチで処理するファイル数を設定します。デフォルト値は100です。
  • --log-file PATH:ログを指定したパスに書き込みます。
  • --background:タスクをバックグラウンドで起動し、タスクの停止とログの確認に必要なコマンドを出力します。POSIXシェルに適しています。
  • --drop-color-profile:ICCカラープロファイルも削除しますが、画像の色表示に影響する可能性があります。
  • --no-verify:削除後のメタデータ由来マーカーの検査をスキップします。

大量処理

バックグラウンドで実行する

POSIXシェルに対応したシステムでは、時間のかかるタスクをバックグラウンドモードで実行できます。

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つも見つからなかった可能性もあります。
  • 終了コード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は個別にインストールする依存関係であり、独自のライセンスに従います。