watermark-removal について
画像の透かしを除去するコマンドラインスキルです。自動検出または寸法を保つ修復を求める画像処理向けで、Google SynthIDの可能性がある画像にはクロップ方式、それ以外にはOpenCVのインペインティングを適用します。
主な機能
- 01SynthIDの自動検出と方式選択
- 02透かし位置のコーナー検出
- 03OpenCV Navier-Stokesインペインティング
- 04クロップ、塗りつぶし、強力方式
- 05単一画像と一括処理
活用シーン
- 01個別画像の透かし除去
- 02フォルダー内の画像の一括処理
- 03修復方式で画像寸法を維持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ faas-tech/ extend-my-claude-code --skill watermark-removalインストール後、Claude Code で/watermark-removalを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/synthid-watermark.mdscripts/batch-process.pyremove-watermark.py詳細
Universal Watermark Removal
インテリジェントな検出と実証済みの方法を使用して、あらゆる画像ソースからウォーターマークを削除します。スマートルーティング:Google SynthID を自動検出し、実証済みのアグレッシブ方式を使用します。不明なウォーターマークの場合は、ML によるインペインティングに切り替えます。
クイックスタート
単一画像 — スマート自動検出(推奨)
# Smart detection: Google SynthID → aggressive method (proven), Unknown → inpaint (ML)
python .claude/skills/watermark-removal/scripts/remove-watermark.py \
input.png \
output.png
単一画像 — 寸法を保持(ML を強制)
# Force ML inpainting even for Google SynthID (preserves exact dimensions)
python .claude/skills/watermark-removal/scripts/remove-watermark.py \
input.png \
output.png \
--method inpaint
バッチ処理(最初にユーザーの承認を得てください!)
⚠️ 重要: バッチ処理を行う前に、必ずユーザーに確認してください。特に、寸法が変わるクロップ方式やアグレッシブ方式を使用する場合は注意が必要です。
# Recommended: Preserves dimensions
python .claude/skills/watermark-removal/scripts/batch-process.py \
/path/to/input-dir \
/path/to/output-dir \
--method inpaint
# Alternative: Fast but crops 120px (requires user approval)
python .claude/skills/watermark-removal/scripts/batch-process.py \
/path/to/input-dir \
/path/to/output-dir \
--method aggressive
スマート検出システム ⭐ 新機能
このスキルは Google SynthID のウォーターマークを自動検出し、最適な削除方法に振り分けます。
Google SynthID の検出
分析する特徴:
- RGBA モード(アルファチャンネル付きの PNG 形式)
- 大きな画像サイズ(幅と高さが 1500px 超)
- Google AI で一般的なアスペクト比(1.83、1.0、1.5、1.78。許容誤差 10%)
- ウォーターマークの位置を自動的にコーナーから検出
スマートルーティングのロジック:
-
Google SynthID が検出された場合 →
aggressive方式を使用します(完全に機能することが実証済みです)- 検出されたコーナーから 120px をクロップします
- アルファチャンネルのウォーターマークを削除します
- 残った部分を塗りつぶします
- Google AI の画像で 100% 安定して機能します
-
不明なウォーターマークまたはその他のウォーターマークの場合 →
inpaint方式(ML ベース)を使用します- 寸法を正確に保持します
- OpenCV の Navier-Stokes アルゴリズムを使用します
- あらゆる種類のウォーターマークに対応します
デフォルトの動作を上書きする
# Force ML inpainting even for Google SynthID (preserves dimensions)
python scripts/remove-watermark.py input.png output.png --method inpaint
# Force aggressive method for non-Google watermarks
python scripts/remove-watermark.py input.png output.png --method aggressive
# Disable auto-detection (assume bottom-right corner)
python scripts/remove-watermark.py input.png output.png --no-detect
方法
Inpaint 方式(最高品質) ⭐ 新機能
機能: ウォーターマークを自動検出し、ML ベースのインペインティングを行います
特徴:
- ウォーターマークの位置を(あらゆるコーナーから)自動検出します
- OpenCV の Navier-Stokes インペインティングアルゴリズムを使用します
- 周囲のパターンを使ってウォーターマーク部分をインテリジェントに補完します
- Google SynthID に限らず、あらゆる種類のウォーターマークに対応します
メリット:
- 最高品質の結果が得られます
- 寸法を正確に保持します
- あらゆるコーナーにあるウォーターマークに対応します
- 複雑な背景もインテリジェントに処理します
- あらゆる種類のウォーターマークに対応する汎用性があります
デメリット:
- OpenCV のインストールが必要です(
pip install opencv-python) - クロップ方式よりやや遅くなります
- 非常に大きなウォーターマークでは、パラメーターの調整が必要になる場合があります
次の場合に使用してください:
- 可能な限り最高の品質が必要な場合
- ウォーターマークが複雑または詳細な背景上にある場合
- 寸法を正確に保持することが重要な場合
- Google 以外のウォーターマークを処理する場合
Aggressive 方式(高速で安定)
機能: コーナーを自動検出し、120px をクロップしてアルファチャンネルを削除し、残った部分を塗りつぶします
メリット:
- 高速で安定しています
- ウォーターマークがあるコーナーを自動検出します
- RGBA 画像を適切に処理します
- バッチ処理に適しています
デメリット:
- 画像サイズが 120px 小さくなります
- 端に近いコンテンツがクロップされる場合があります
次の場合に使用してください:
- 多数の画像をすばやく処理する場合(バッチ処理のデフォルト)
- サイズが小さくなっても問題ない場合
- Google SynthID のウォーターマークを処理する場合
Crop 方式
機能: ウォーターマークがあるコーナーを自動検出してクロップします
メリット:
- 最も高速な方式です
- 自動検出に対応しています
- 処理を最小限に抑えられます
デメリット:
- ウォーターマークが一部残る場合があります
- アルファチャンネルのウォーターマークには対応しません
次の場合に使用してください:
- 速度を最優先する場合
- 簡単なプレビューが必要な場合
Paint 方式
機能: クロップせずにウォーターマークを塗りつぶします(自動検出なし)
メリット:
- 寸法を保持します
- シンプルな方法です
デメリット:
- 右下のコーナーだけを想定します
- 目に見えるアーティファクトが残る場合があります
- Inpaint 方式より安定性が劣ります
次の場合に使用してください:
- 単色の背景上にあるシンプルなウォーターマークを処理する場合
- レガシー互換性が必要な場合
重要なガイドライン
寸法保持の優先順位
ドメイン知識と寸法保持のバランスを取る
-
スマートなデフォルト動作:
- Google SynthID を検出 →
aggressiveメソッド(実績のある完璧な方法。120px クロップします) - 不明なウォーターマーク →
inpaintメソッド(寸法を保持します)
- Google SynthID を検出 →
-
ユーザーによる上書きが可能:
--method inpaintフラグで寸法保持を強制--method aggressiveフラグでクロップを強制
-
一括クロップにはユーザーの承認が必要:
aggressiveメソッドで複数の Google SynthID 画像を処理する場合- このメソッドでは画像サイズが 120px 小さくなることを説明する
- 明示的な承認を得る
- 処理前後の寸法を表示する
一括処理プロトコル
ユーザーの確認なしに一括処理を開始しないでください:
-
処理内容を示す:
- 処理する画像の枚数
- 使用するメソッド
- 寸法を保持するか、変更するか
-
明示的な承認を得る:
- 「X 枚の画像を [method] で処理します。寸法は変更されます/変更されません。続行しますか?」
-
非破壊的な方法を優先する:
- 一括処理ではデフォルトで
inpaintを使用する - ユーザーが品質よりも速度を明確に優先した場合に限り、
aggressiveを使用する
- 一括処理ではデフォルトで
ワークフロー
1. ウォーターマーク付き画像を特定する
一般的なウォーターマークの種類:
- Google SynthID: 角にある小さな星/きらめきのアイコン
- ストックフォト: ロゴまたはテキストのオーバーレイ
- AI サービス: 角にあるバッジ(Midjourney、DALL-E)
- カメラのウォーターマーク: 日付/時刻のスタンプ
2. メソッドを選択する
スマートなデフォルトのワークフロー(新機能):
- --method フラグを付けずにスクリプトを実行 - スマート検出により、最適なメソッドが自動的に選択されます
- Google SynthID を検出 →
aggressiveメソッドを使用(実績のある完璧な方法) - 不明なウォーターマーク →
inpaintメソッドを使用(ML ベース、寸法を保持) - 必要に応じて --method フラグで上書き
メソッド選択ガイド:
- スマート自動(推奨): フラグなし(Google SynthID を検出した場合は
aggressive、それ以外はinpaint) - 寸法保持を強制:
--method inpaint(ML ベース。あらゆるウォーターマークに対応) - Google 用メソッドを強制:
--method aggressive(120px クロップ。SynthID に最適) - 最大速度:
--method crop(最速。クロップしますが、跡が残る場合があります) - 従来の方法:
--method paint(基本的な方法。寸法を保持しますが、信頼性は低めです)
3. 画像を処理する
スマート自動検出(推奨):
python scripts/remove-watermark.py input.png output.png
寸法保持を強制:
python scripts/remove-watermark.py input.png output.png --method inpaint
高速な一括処理:
python scripts/batch-process.py ./input ./output --method aggressive
自動検出を無効化(右下を強制):
python scripts/remove-watermark.py input.png output.png --method inpaint --no-detect
4. 結果を確認する
- 出力画像の角がきれいになっているか確認する
- 重要な内容がクロップされていないことを確認する
- ウォーターマークが完全に除去されていることを確認する
コマンドリファレンス
remove-watermark.py
python scripts/remove-watermark.py INPUT OUTPUT [OPTIONS]
Arguments:
INPUT Input image path
OUTPUT Output image path
Options:
--method {crop|inpaint} Removal method (default: crop)
--size INT Watermark size in pixels (default: 60)
batch-process.py
python scripts/batch-process.py INPUT_DIR OUTPUT_DIR [OPTIONS]
Arguments:
INPUT_DIR Directory with images to process
OUTPUT_DIR Directory for cleaned images
Options:
--method {crop|inpaint} Removal method (default: crop)
--pattern PATTERN File pattern to match (default: *.png)
--size INT Watermark size in pixels (default: 60)
使用例
例 1:ウェブサイト用画像
シナリオ: ユーザーがウェブサイト用に 3 枚の Google AI 画像を持っており、ウォーターマークを除去する必要がある
# Batch process all PNG images
python scripts/batch-process.py \
./public/images \
./public/images-clean \
--method crop \
--pattern "*.png"
出力:
Found 3 images to process
Input: ./public/images
Output: ./public/images-clean
Method: crop
[1/3] Processing: ad-design-bedroom.png
✅ Saved to: ad-design-bedroom.png
[2/3] Processing: ad-design-kitchen.png
✅ Saved to: ad-design-kitchen.png
[3/3] Processing: ad-designs-bathroom.png
✅ Saved to: ad-designs-bathroom.png
✅ Successfully processed: 3/3
例 2:正確な寸法を保持する
シナリオ: クライアントが正確に 1920x1080 の画像を必要としており、クロップできない
python scripts/remove-watermark.py \
hero-image.png \
hero-image-clean.png \
--method inpaint
例 3:大きめのウォーターマーク
シナリオ: ウォーターマークが通常より大きい(70px)
python scripts/batch-process.py \
./images \
./images-clean \
--method crop \
--size 70
技術詳細
以下を参照してください:references/synthid-watermark.md
- SynthID ウォーターマークの仕様
- メソッドの比較に関する詳細
- 例外的なケースと考慮事項
- 法的/倫理的ガイドライン
依存関係
必須:
- Python 3.7+
- Pillow (PIL):
pip install Pillow - NumPy:
pip install numpy
オプション(ML インペインティング用):
- OpenCV:
pip install opencv-python
すべての依存関係をインストール:
pip install Pillow numpy opencv-python
注: inpaint メソッドには OpenCV が必要です。それ以外のメソッドは OpenCV なしで動作します。
ヒント
パフォーマンス:
- Crop メソッドは inpaint より 5~10 倍高速です
- 100 枚以上の画像には crop メソッドを使用してください
品質:
- 圧縮を最小限に抑えるため、quality=95 で保存します
- PNG 形式は JPEG よりも品質を保ちます
バックアップ:
- ウォーターマーク付きの元画像は必ず保管してください
- 元画像ではなく、コピーを処理してください
テスト:
- 一括処理の前に、画像 1 枚でテストしてください
- 必要に応じて
--sizeフラグでウォーターマークのサイズを確認してください