watermarks-remover について
watermarks-removerは、テキストやファイルのAI由来マークを検査・除去するPythonスクリプトを利用するエージェントスキルです。Unicodeや統計型のテキストマーク、ファイルメタデータを扱い、任意の画像向け処理も備えています。検査結果は確度別に示され、検査とクリーニングを分けて実行できます。
主な機能
- 01テキストとファイルの由来マークを検査
- 02不可視Unicodeやテキストマークを除去
- 03対応ファイルのメタデータを除去
- 04ディレクトリとサイトマップを監査
- 05任意の画像ウォーターマークの採点・除去
活用シーン
- 01許可されたMarkdown草稿の検査とクリーニング
- 02画像や文書の由来メタデータの除去
- 03ディレクトリやウェブサイトの由来シグナル監査
- 04任意のバックエンドによる画像マークの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill watermarks-removerインストール後、Claude Code で/watermarks-removerを入力して読み込まれたか確認します。
同梱ファイルscripts/watermarks-remover.shreferences/commands.md
詳細
Watermarks Remover — AI の出所を示すマークを除去
guillaumemeyer/watermarks-remover をラップしたエージェントスキルです。これは、テキスト(不可視の Unicode、統計的サンプリングのウォーターマーク)とファイル(C2PA/EXIF/XMP/ドキュメントのプロパティ)から、複数ベンダーの AI の出所を示すマークを除去する標準ライブラリのみを使用した Python スクリプト群です。プライバシー保護と、自分が所有する、または処理を許可されているコンテンツのクリーンアップを目的としています。学術的不正や「人間が書いた」と偽って主張するためのものではありません。
このスキルを使用する場合
- AI ツールが生成テキストに気付かれないよう挿入する、不可視の Unicode、双方向制御文字、タグ文字、特殊な空白の同形異字を除去する場合
- PNG、JPEG、SVG、PDF、DOCX、ODT、HTML、Markdown ファイルから、C2PA マニフェスト、EXIF/XMP の AI 出所情報フィールド、生成ツールのメタデータを除去する場合
- AI が書いた文章について、事実/名前/数値を保ちながら、ガイド付きの書き換え処理を行い、統計的な(トークンサンプリングによる)ウォーターマークの信号を弱める場合
- ディレクトリツリー全体または(サイトマップ経由で)公開中のウェブサイトを監査し、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 | コンテナーのクリーンアップ(フロントマター/メタデータ)+レイヤー 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
ユーザーがインプレース編集を明示的に依頼した場合を除き、*.cleaned.* の出力先に書き込むことを推奨します(--in-place も利用できますが、破壊的な操作です)。
ステップ 5:文章には常にレイヤー B(統計的な書き換え)を提案する
レイヤー A の後に、トークン・サンプリング型ウォーターマークのシグナルを弱めるため、自然言語の内容を書き換えるパスを提案します。黙って省略しないでください。
python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphrase
print-prompt は CI で安全に使えるデフォルトです(モデル呼び出しは行わず、エージェントが自分で実行するための書き換えプロンプトを出力するだけです)。ローカルの 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
CtrlRegen では約 10 GB のモデルをダウンロードする必要があり、強力な GPU の使用が推奨されます。CPU での実行は低速です。clean_image.py --remove-pixel ctrlregen を使うと、メタデータを削除した後に、統合画像パイプラインでも利用できます。CtrlRegen のバックエンドには LICENSE ファイルが同梱されていません(全著作権留保として扱われます)。実行時にユーザー自身のチェックアウトから読み込まれる場合に限って使用されます。
ステップ 7:ディレクトリツリーまたは Web サイトの監査をまとめる
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 に対して 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)の利用可否を報告するだけです。ディスクへの書き込みやパッケージのインストールは一切行いません。
ベストプラクティス
- クリーンアップの前に調査し、後に検証する — まず
inspect_*、次にclean_*、最後に出力に対してinspect_file.pyを実行します。 - 確認なしに上書きしない — デフォルトでは
*.cleaned.*の出力パスを使用します。--in-placeを使うのは、ユーザーから明示的に依頼された場合に限ります。 - レイヤー B は常に提案し、その代償を正直に伝える — 統計的なウォーターマークの除去には言い換えが必要であり、言い換えによって文体やトーンが損なわれます。本番用の文章を黙って書き換えるのではなく、そのトレードオフを伝えてください。
- 生成元とは異なる書き換えモデルを優先する — Claude が生成した文章を Claude で書き換える(または Gemini の文章を Gemini で書き換える)と、同じクラスのウォーターマークが出力に再付与されるおそれがあります。
- 信頼度を正直に報告する —
confirmed/probableの検出結果と、informational/likely_false_positiveのノイズを区別し、ベンダー公式の検出器が検出に失敗すると決して断言しないでください。 - C2PA のソフトバインディングとピクセル/音声/動画のマークは、決定論的な処理の対象外として扱う — ピクセル領域の画像マークに対応するのはオプションの外部 CtrlRegen バックエンドだけであり、それもベストエフォートの再生成型除去機能に限られます。
- 負荷の大きいバックエンドはオプトインにする — ユーザーがピクセル領域のスコアリングや除去を実際に必要としている場合を除き、
setup_synthid.sh/setup_ctrlregen.shを実行しないでください。GB 単位の依存関係やモデルがダウンロードされます。
参考資料
- references/commands.md — ワークフローの段階別に整理されたコマンドリファレンス
- scripts/watermarks-remover.sh — 読み取り専用の診断機能と、簡易的な検査・削除用ラッパー
- 上流リポジトリ:guillaumemeyer/watermarks-remover
- 上流スキル:
skills/remove-ai-marks/SKILL.md - 上流の倫理に関する注記:
skills/remove-ai-marks/references/ethics.md - プロジェクト標準:
.agent-skills/skill-standardization/SKILL.md
例
例 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