find-images: 画像の検索、スクリーニング、ダウンロード、クレジット作成
スクリプトはこのスキルのディレクトリ内の scripts/imgs.py です。以下のコマンドでは、<skill-dir> をこの SKILL.md が含まれるディレクトリのフルパス(例:C:/Users/<name>/.claude/skills/find-images)に置き換えてください。
キーは環境変数または ~/.config/image-search/keys.env(SERPER_API_KEY、PIXABAY_API_KEY、オプションで EXA_API_KEY)から取得します。スクリプトが自ら読み取るため、キーを出力したり他の場所を参照したりしないでください。キーがない場合、スクリプトはどのソースをスキップしたかを表示します。そのまま他のソースで続行し、このスキルの README.md に記載されている方法でキーを設定するようユーザーに伝えてください。
スクリプトのメッセージ、シートラベル、credits.md はシステム言語(中国語または英語)に従います。FIND_IMAGES_LANG=zh|en で上書きできます。
出力先はカレントプロジェクトの images/ ディレクトリです。_work/<tag>/ に候補とコンタクトシート、assets/ に選択された画像、manifest.json に全画像の出典記録、credits.md にクレジットページが格納されます。
まず、スライドに画像が必要かどうかを判断する
| 内容 | 対処法 |
|---|---|
| データ、比較、トレンド | 検索しない。ネイティブの pptx グラフまたは matplotlib を使用 |
| プロセス、構造、関係性 | 検索しない。図形または SVG で描画 |
| 概念、抽象的なイラスト | まずアイコン(icons)を試す。Codex では imagegen で生成も可能 |
| 特定の製品、場所、人物、イベント、組織 | このスキルで実写を探す |
| ムード画像、カバー背景 | このスキルを Pixabay または Commons ソースで使用 |
ソースの選択
ソース(src / mode) | 適しているもの | クエリ言語 | ライセンス |
|---|---|---|---|
web(Serper、つまり Google Images) | 特定の製品、ニュースイベント、人物、中国語の主題 | 任意。中国語の主題の場合、「官方図」(公式画像)、「高清」(HD)、「新聞図」(ニュース写真)を追加すると効果的 | 権利不明:社内プレゼンおよびコースワークのみ、出典明記必須 |
commons(Wikimedia Commons) | ランドマーク、都市、建築、歴史、科学、公人、組織ロゴ | 英語のみ、2~4語(中国語のクエリではほとんど結果が得られない) | CC0 は自由に使用可。CC BY / BY-SA は帰属表示が必要 |
pixabay | ムードショットや汎用的なシーン(オフィス、チームワーク、都市、自然、産業) | 中国語または英語 | 自由に使用可、帰属表示は任意。1280px が最大 |
mode: site(公式ページ) | 製品または企業ページからの公式画像 | ページ URL を指定 | 公式サイト画像。出典を明記 |
mode: icons(Iconify) | オープンソースセット(MIT、Apache など)のアイコン | 英語のみ、1~2語(drone、battery)。結果が6件未満の場合、スクリプトは各単語を個別に検索 | デフォルトセットは帰属表示不要で自由に使用可。color は SVG と PNG の両方に適用 |
特定の主題には src として web または web,commons を使用します。画像を自由に使用できる必要がある場合は、commons,pixabay を使用し、web は除外します。
ワークフロー
1. 画像計画を作成する(plan.json、UTF-8)
スライドごとに1項目。各 tag はスライド番号と目的にちなんで命名します。
[
{"tag": "s01_cover", "q": "car carrier ship at port", "q_en": "car carrier ship",
"src": "commons,pixabay", "orient": "landscape", "min_side": 1600, "n": 12},
{"tag": "s04_product", "q": "比亚迪 海豹07 官方图", "src": "web", "orient": "landscape", "min_side": 1200, "n": 9},
{"tag": "s05_official", "mode": "site", "url": "https://www.byd.com/cn/", "n": 9},
{"tag": "s07_icon", "mode": "icons", "q": "battery", "color": "#1F4E79", "n": 16}
]
q:メインクエリ。webとpixabayで使用されます。中国語の主題の場合は中国語で指定可能(s04_productのように)。q_en:commonsで使用される英語クエリ。デフォルトはq。orient:landscape/portrait/square/any。min_side:長辺の最小ピクセル数。フルスクリーン背景は 1600、スライド半分は 1000、小さなイラストは 600。Pixabay の無料 API は最大 1280px のため、スクリプトは Pixabay の要件を 1280 に引き下げます。プロジェクターや通常のモニターには十分ですが、4K 画面ではややソフトになります。フルスクリーン画像を非常にシャープにしたい場合は、Commons の候補を優先してください。n:シート上の候補数。最大 16。
2. 検索してコンタクトシートを作成する
python <skill-dir>/scripts/imgs.py search --plan plan.json --out images
単一項目も可能です:search --tag s04_product --q "..." --src web、または site --tag .. --url ..、icons --tag .. --q ..。
シェルで非 ASCII 引数が文字化けする場合(例:Git Bash on Windows での中国語)は、代わりに plan.json に記述してください。
各項目は、番号付きコンタクトシート images/_work/<tag>/sheet.jpg と、候補ごとに1行のテキストリスト(サイズ、ソースドメイン、ライセンス)を生成します。
同じタグを再度検索すると、候補と番号が上書きされます。そのため、そのタグを再度検索する前に、シートから選択してください。
3. シートを見て選択する
- シート画像を開く:Claude Code では Read、Codex では view_image。1枚のシートで約1,600トークン。候補画像を1枚ずつ開かないでください。
- 主題が正しいか(モデル、場所)、構図にテキストを配置する余地があるか、透かしや大きなテキストブロックがないか、スタイルがデッキの他の部分と一致するか、解像度が十分かを確認します。
- 適切なものがない場合は、再度検索します。最初の検索後、再検索は最大2回まで。その際、同義語ではなく、別の角度から検索します:より具体的または広い主題、別のソース、別の言語。それでも失敗した場合は、アイコンまたはテキストのみのレイアウトにフォールバックするか、ユーザーに伝えます。
- 主題の適合性とライセンスが競合する場合:リクエストがフリー画像を 推奨 している場合は、最初に
commons,pixabayを検索します。再検索しても主題に合うものが見つからない場合は、webの画像を使用し、レポートで「権利不明」とラベル付けします。リクエストが画像を 必ず フリーで使用できる必要がある、または公開される場合は、決してwebを使用せず、代わりにフォールバックします。 - シートラベルにはサイズ、ライセンス(Commons では CC BY-SA 4.0 などの正確なライセンス)、ソースドメインが表示されます。テキストリストにも同じ情報が表示されます。
4. 選択した画像をダウンロードする
python <skill-dir>/scripts/imgs.py pick --tag s04_product --ids 6 --out images
スクリプトは元の画像をダウンロードし(Commons は1920px標準サムネイル経由。長辺が2560pxを超える場合は縮小。webp/avif は jpg/png に変換)、manifest.json に記録します。
ピックで劣化ダウンロードが報告された場合(マニフェストで "degraded": true:ホットリンク保護により元画像がブロックされ、サムネイルのみ取得できた場合)、別の候補を選択します。
5. 画像を挿入し、クレジットページを作成する
- 挿入時は、
manifest.jsonのfile、width、heightに従い、レイアウトに合わせてクロップし、絶対に引き伸ばさないでください。アイコンは PNG と SVG の両方で提供されます(svgフィールド)。 credits --out imagesを実行してcredits.mdを作成し、そのスライドクレジットセクションを最後の(出典)スライドに配置します。注釈セクションがある場合は、それをユーザーに伝えます。- デッキ全体が完成したら、通常通りレンダリングし、スクリーンショットを確認します。メインエージェントが画像を確認する必要があるのはこのときだけです。
コンテキスト節約:3枚以上の画像をサブエージェントに任せる
メインエージェントは plan.json を作成し、マニフェストを読み取るだけです。シートの表示、選択、ダウンロードはサブエージェントに任せ、候補画像がメインのコンテキストに入らないようにします。サブエージェントのプロンプトテンプレート:
<skill-dir>/SKILL.md を読み、<プロジェクトパス> のデッキ用の画像を見つけるために従ってください。
画像計画:<plan.json のパス>(各項目のタグ、目的、スライドコンテキストは以下)。
<各項目:スライドの内容、画像の配置場所、横向きか縦向きか、スタイル>
各項目について、シートを1回見て、1枚の画像を選択し(最大1つのバックアップ)。<プロジェクト>/images にピックしてください。適切なものがない場合は、別の単語で最大2回まで再検索してください。
各タグについて、選択したID、ファイルパス、サイズ、ライセンスクラス、1行の理由を返してください。適切な画像がないタグとその理由をリストしてください。画像自体は返さないでください。
ライセンスルール
- 自由に使用可能(CC0、Pixabay、オープンソースアイコン):あらゆる用途に使用可能。CC0 および Pixabay 画像へのクレジット表示は礼儀であり、必須ではありません。
- 帰属表示必須(CC BY / BY-SA):出典スライドに作者とライセンスを明記します。改変した BY-SA 画像は、同じライセンスで共有する必要があります。
- 公式 / 権利不明(
site、web):社内プレゼン、コースワーク、学術講演のみ、出典明記必須。公開または商用利用する前に、ユーザーに伝え、フリー画像に差し替えてください。 - 人物写真:公人のニュースコンテキストでの使用は問題ありません。個人の写真を装飾として使用しないでください。
クォータと制限
- Serper:サインアップ時に 2,500 回の無料クエリ。20 件の結果を検索する場合(
n> 6 のとき)、2 クエリ消費。10 件の結果は 1 クエリ。その後は 50,000 クエリで 50 ドルからチャージ。チャージは 6 か月後に失効。残高は serper.dev ダッシュボードで確認可能。 - Pixabay:1 分あたり 100 リクエスト。画像はホットリンク禁止(スクリプトがダウンロードします)。
- Commons:標準サムネイル幅(960/1280/1920/3840)のみ取得可能。検索は英語。
- Iconify:無料、キー不要。SVG から PNG への変換には Node.js と sharp が必要。これがない場合、スクリプトがその旨を表示するので、別の方法を使用するか、
npm install -g sharpを実行するようユーザーに依頼してください。 - Exa:
siteモードでページ上の画像が見つからない場合にのみ使用。Exa クレジットを消費します。