画像や動画に埋め込まれたAI生成の痕跡を除去するPythonライブラリとCLIです。Geminiのスパークルなど可視ウォーターマーク、SynthIDなど不可視ピクセルウォーターマーク、C2PA・EXIF・XMP・IPTCといった来歴メタデータを対象にしています。自分が生成したコンテンツに対する合法的な利用を前提としたツールです。
CLIは目的別にコマンドが分かれており、identifyでメタデータとピクセル信号を検査、metadataでC2PA/EXIF等を除去、visibleでベンダー固有の可視マークをOpenCV/MI-GAN/LaMaで修復、invisibleではCUDA上のdiffusersでQwen-Zimageなどによる画像再生成を行い、ピクセルウォーターマークを崩します。動画系はPyAVでフレームを取り出しシステムのffmpegで再エンコードします。pyproject.tomlはextrasを細かく分けており、pixels/detect/diffusion/videoなど必要な依存だけを段階的に入れられる設計です。__init__.pyはPEP 562のlazy importでtorchなど重い依存を実際に使うまで読み込まない仕組みになっています。identifyは信号があってもクリーンだとは断定せず、C2PAの資産バインディング・署名・署名者信頼性を別々に評価して確信度を報告する点がREADMEとdocs/cli.mdに明記されています。
- STEP 01
uv tool install remove-ai-watermarksでデフォルトCLIを入れ、remove-ai-watermarks identify image.pngを実行すると、まずメタデータのみの検査結果が出ます。
- STEP 02
可視マーク除去を試すにはremove-ai-watermarks[visible]を追加インストールし、visibleコマンドで初めてOpenCVベースの修復処理が走ります。
- STEP 03
classifyコマンドは別extraが必要で、identifyを実行しただけでは自動起動しない仕様なので、来歴判定と画素分類を混同しないことに気づきます。
- STEP 04
invisibleコマンドを動かそうとするとCUDA環境が必須と表示され、CPUのみのマシンでは実行できないことが分かります。
- STEP 05
video visibleやvideo invisibleを試すには追加でシステムのffmpegがPATHに必要で、入っていないとコマンドが失敗します。
- STEP 06
data/fixtures配下のサンプル画像を使ってidentifyを試すと、Gemini・ChatGPT・Doubaoなど各社の来歴署名が実データとして確認できます。
手元では、来歴メタデータのレポート(JSON可)、可視マークを除去した画像・動画ファイル、そして条件が揃えばピクセルウォーターマークを崩した再生成画像が得られます。ただしSynthIDのローカル画素検出器は同梱されておらず、署名済み来歴の読み取りが唯一の対応経路である点は明記されています。
invisible系のコア機能はCUDA必須で、CPUやMPS、macOS環境では動作経路が限られます。
video系の可視・不可視処理にはシステムのffmpegが別途必要で、pipインストールだけでは完結しません。
identifyは信号が見つからなくても「クリーン」と断定はせず、未検出=起源不明として扱う設計であることに留意が必要です。
classifyやsource-classifyは来歴判定ではなく画素分類であり、READMEでも明確に別物として区別されています。
自分で生成した画像・動画から可視ラベルや来歴メタデータを外形的に除去したい開発者向けのツールとして妥当な設計です。extrasの分割やlazy import、C2PA検証の確信度説明など、READMEとコードの記述が細部まで一致しており、来歴に関する誠実な注意書き(SynthID検出器非搭載など)も明示されています。CUDA必須の不可視除去やffmpeg依存は実運用のハードルですが、これらの制約自体がドキュメントに正直に書かれているため、実際に動かさなくても構成と限界を判断できる情報量があります。