find-images : trouver, filtrer, télécharger et créditer des images
Le script est scripts/imgs.py dans le répertoire de cette compétence. Dans les commandes ci-dessous, remplacez <skill-dir> par le chemin complet du répertoire qui contient ce SKILL.md (par exemple C:/Users/<nom>/.claude/skills/find-images).
Les clés proviennent des variables d'environnement ou de ~/.config/image-search/keys.env (SERPER_API_KEY, PIXABAY_API_KEY, EXA_API_KEY optionnel). Le script les lit lui-même : ne les imprimez jamais et ne les cherchez nulle part ailleurs. Si une clé manque, le script indique quelle source il a ignorée ; continuez avec les autres sources et dites à l'utilisateur de configurer la clé comme décrit dans le README.md de cette compétence.
Les messages du script, les étiquettes des planches et credits.md suivent la langue du système (chinois ou anglais) ; FIND_IMAGES_LANG=zh|en la surcharge.
La sortie va dans images/ du projet courant : _work/<tag>/ contient les candidats et les planches contact, assets/ les images choisies, manifest.json l'enregistrement source de chaque image, et credits.md la page de crédits.
Décidez d'abord si la diapositive a besoin d'une image trouvée
| Contenu | Que faire |
|---|---|
| Données, comparaisons, tendances | Ne cherchez pas ; utilisez des graphiques natifs pptx ou matplotlib |
| Processus, structures, relations | Ne cherchez pas ; dessinez avec des formes ou du SVG |
| Concepts, illustration abstraite | Essayez d'abord les icônes (icons) ; dans Codex vous pouvez aussi en générer une avec imagegen |
| Produits, lieux, personnes, événements, organisations spécifiques | Utilisez cette compétence pour trouver des photos réelles |
| Images d'ambiance, fonds de couverture | Utilisez cette compétence avec Pixabay ou Commons comme source |
Choix des sources
Source (src / mode) | Bon pour | Langue de requête | Licence |
|---|---|---|---|
web (Serper, c.-à-d. Google Images) | Produits spécifiques, actualités, personnes, sujets en chinois | Toute. Pour les sujets chinois, ajouter 官方图 (image officielle), 高清 (HD) ou 新闻图 (photo d'actualité) aide | Droits inconnus : présentations internes et travaux académiques uniquement, avec la source citée |
commons (Wikimedia Commons) | Monuments, villes, architecture, histoire, science, personnalités publiques, logos d'organisations | Anglais uniquement, 2 à 4 mots (les requêtes en chinois ne donnent presque rien) | CC0 est libre d'utilisation ; CC BY / BY-SA nécessitent une attribution |
pixabay | Photos d'ambiance et scènes génériques (bureau, travail d'équipe, ville, nature, industrie) | Chinois ou anglais | Libre d'utilisation, attribution optionnelle ; 1280px max |
mode: site (page officielle) | Images officielles d'une page produit ou entreprise | Donnez l'URL de la page | Image du site officiel ; citez la source |
mode: icons (Iconify) | Icônes de jeux open source (MIT, Apache, …) | Anglais uniquement, 1 à 2 mots (drone, battery). Avec moins de 6 résultats, le script cherche aussi chaque mot séparément | Les jeux par défaut sont libres d'utilisation sans attribution ; color est appliqué au SVG et au PNG |
Pour un sujet spécifique, utilisez src web ou web,commons. Quand les images doivent être libres d'utilisation, utilisez commons,pixabay et omettez web.
Flux de travail
1. Écrivez le plan d'images (plan.json, UTF-8)
Un élément par diapositive ; nommez chaque tag d'après le numéro de diapositive et le but :
[
{"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: requête principale, utilisée parwebetpixabay. Elle peut être en chinois pour les sujets chinois, comme danss04_product.q_en: requête en anglais utilisée parcommons; par défaut égale àq.orient:landscape/portrait/square/any.min_side: longueur minimale du côté long en pixels. Fond d'écran plein écran 1600, demi-diapositive 1000, petite illustration 600. L'API gratuite de Pixabay sert au maximum 1280px, donc le script abaisse l'exigence à 1280 pour Pixabay. C'est suffisant pour un fond plein écran sur un projecteur ou un écran ordinaire, légèrement flou sur un écran 4K. Si une image plein écran doit être très nette, préférez les candidats de Commons.n: nombre de candidats sur la planche, 16 au maximum.
2. Recherchez et construisez les planches contact
python <skill-dir>/scripts/imgs.py search --plan plan.json --out images
Les éléments individuels fonctionnent aussi : search --tag s04_product --q "..." --src web, ou site --tag .. --url .., icons --tag .. --q ...
Si les arguments non-ASCII sont déformés dans le shell (par exemple du chinois dans Git Bash sous Windows), mettez-les dans plan.json à la place.
Chaque élément produit une planche contact numérotée images/_work/<tag>/sheet.jpg et une liste texte avec une ligne par candidat (taille, domaine source, licence).
Rechercher le même tag à nouveau écrase ses candidats et numéros, donc choisissez à partir d'une planche avant de rechercher à nouveau ce tag.
3. Regardez la planche et choisissez
- Ouvrez l'image de la planche :
Readdans Claude Code,view_imagedans Codex. Une planche coûte environ 1 600 tokens. N'ouvrez pas les candidats un par un. - Vérifiez que le sujet est correct (modèle, lieu), que la composition laisse de la place pour le texte, qu'il n'y a pas de filigrane ou de gros bloc de texte, que le style correspond au reste de la présentation, et que la résolution est suffisante.
- Si rien ne convient, recherchez à nouveau. Après la première recherche, re-cherchez au maximum deux fois, à chaque fois sous un angle différent plutôt qu'avec des synonymes : un sujet plus spécifique ou plus général, une autre source, ou l'autre langue. Si cela échoue encore, recourez aux icônes ou à une mise en page sans image, ou prévenez l'utilisateur.
- En cas de conflit entre pertinence du sujet et licence : si la demande dit que les images libres de droits sont préférées, recherchez d'abord
commons,pixabay; si une nouvelle recherche ne trouve toujours rien sur le sujet, utilisez une imagewebet étiquetez-la « droits inconnus » dans votre rapport. Si la demande stipule que les images doivent être libres de droits ou seront publiées, n'utilisez jamaisweb; recourez à une alternative. - Les étiquettes des planches montrent la taille, la licence (Commons affiche la licence exacte, par exemple CC BY-SA 4.0) et le domaine source ; la liste texte montre les mêmes informations.
4. Téléchargez les images choisies
python <skill-dir>/scripts/imgs.py pick --tag s04_product --ids 6 --out images
Le script télécharge l'image originale (Commons via sa vignette standard 1920px ; les côtés longs de plus de 2560px sont réduits ; webp/avif deviennent jpg/png) et l'enregistre dans manifest.json.
Si pick signale un téléchargement dégradé ("degraded": true dans le manifeste : la protection anti-hotlink a bloqué l'original et seule une vignette est passée), choisissez un autre candidat.
5. Insérez les images et construisez la page de crédits
- Lors de l'insertion, référez-vous à
file,widthetheightdansmanifest.json; recadrez pour correspondre à la mise en page et ne déformez jamais. Les icônes sont fournies en PNG et SVG (le champsvg). - Lancez
credits --out imagespour écrirecredits.mdet placez sa section de crédits de diapositive sur la dernière diapositive (sources). Si elle contient une section de notes, transmettez-la à l'utilisateur. - Lorsque l'ensemble de la présentation est terminé, générez-la et vérifiez les captures d'écran comme d'habitude. C'est la seule fois où l'agent principal a besoin de regarder les images.
Économiser le contexte : passer trois images ou plus à un sous-agent
L'agent principal écrit uniquement plan.json et lit le manifeste. La visualisation des planches, le choix et le téléchargement sont confiés à un sous-agent, de sorte que les images candidates n'entrent jamais dans le contexte principal. Modèle de prompt pour sous-agent :
Lisez <skill-dir>/SKILL.md et suivez-le pour trouver des images pour la présentation dans <chemin du projet>.
Plan d'images : <chemin vers plan.json> (tag, objectif et contexte de diapositive pour chaque élément ci-dessous).
<pour chaque élément : ce que dit la diapositive, où va l'image, paysage ou portrait, style>
Pour chaque élément, regardez la planche une fois et choisissez 1 image (au maximum 1 de secousse) ; pick dans <projet>/images. Si rien ne convient, re-cherchez avec des mots différents, au maximum deux tours supplémentaires.
Retournez pour chaque tag : l'id choisi, le chemin du fichier, la taille, la classe de licence et une raison d'une ligne ; listez les tags sans image adaptée et pourquoi. Ne retournez pas les images elles-mêmes.
Règles de licence
- Libre d'utilisation (CC0, Pixabay, icônes open source) : toute utilisation. Créditer les images CC0 et Pixabay est une courtoisie, pas une obligation.
- Attribution requise (CC BY / BY-SA) : créditez l'auteur et la licence sur la diapositive des sources. Une image BY-SA modifiée doit être partagée sous la même licence.
- Officiel / droits inconnus (
site,web) : présentations internes, travaux académiques et conférences académiques uniquement, avec la source citée. Avant toute publication ou utilisation commerciale, prévenez l'utilisateur et remplacez par des images libres de droits. - Photos de personnes : les personnalités publiques dans un contexte d'actualité sont acceptables ; n'utilisez pas de photos de personnes privées comme décoration.
Quotas et limites
- Serper : 2 500 requêtes gratuites lors de l'inscription. Une recherche de 20 résultats (quand
n> 6) coûte 2 requêtes, 10 résultats en coûtent 1. Ensuite, vous rechargez, à partir de 50 $ pour 50 000 requêtes, et les rechargements expirent après 6 mois. Le solde restant est visible sur le tableau de bord serper.dev. - Pixabay : 100 requêtes par minute ; les images ne doivent pas être liées par hotlink (le script les télécharge).
- Commons : seules les largeurs de vignettes standard (960/1280/1920/3840) peuvent être récupérées ; recherchez en anglais.
- Iconify : gratuit, pas de clé. La conversion SVG en PNG nécessite Node.js avec sharp. S'il manque, le script le dit ; utilisez une autre approche, ou demandez à l'utilisateur d'exécuter
npm install -g sharp. - Exa : utilisé uniquement lorsque le mode
sitene peut pas trouver d'images sur la page elle-même ; il utilise des crédits Exa.