Que fait Chercheur d’Images de Film ?
Transformez « J’ai besoin d’une image de deux personnes assises en silence après une dispute » en un véritable fichier image sourcé. N’importe quel agent d’IA, n’importe quel OS, sans identifiants.
1. Lisez ceci d’abord : ce qui est réellement possible
Il n’existe aucune API publique gratuite qui prend une phrase en langage naturel et renvoie l’image exacte d’un film, surtout avec des sous-titres de dialogue incrustés. Poursuivre cette « solution miracle » fait perdre du temps. Ce qui fonctionne est un pipeline, où l’agent orchestre et un modèle capable de vision sélectionne l’image :
requête -> vérification des faits -> choisir la source -> téléchargement par lots des candidats
-> planche contact numérotée -> SÉLECTION VISUELLE de l’image -> originale haute résolution
-> rogner les sous-titres / composer un sous-titre -> vérification visuelle
-> livraison + manifeste de provenance
Deux conséquences non négociables :
- L’étape de vision ne peut pas être ignorée. Deviner une image à partir de noms de fichiers ou de texte seul échoue. Montrez la planche contact à un modèle capable de vision (ou à l’humain).
- Vérifiez d’abord les faits. Les « faits » largement répétés sur les films sont souvent erronés (voir
references/fact-check.md). Vérifiez la réplique / la scène / l’épisode avant de chercher.
2. Démarrage rapide (profil minimal, par défaut)
pip install -r requirements.txt
python scripts/still.py probe # quelles sources sont accessibles maintenant
python scripts/still.py grab --out ./work \
--page "https://movie-screencaps.com/avatar-2009/page/114" \
--image-referer "https://movie-screencaps.com/" \
--limit 40
# -> ./work/candidates/*.jpg, ./work/contact_1.jpg, ./work/manifest.json
# Montrez contact_1.jpg à un modèle de vision, notez le numéro gagnant, puis :
python scripts/still.py sheet ./work/candidates # régénère une planche numérotée
python scripts/still.py crop ./work/candidates/p1_02.jpg --bottom 100 -o ./work/clean.jpg
python scripts/still.py deliver ./work --picks examples/sample-picks.json \
--profile profiles/minimal.json --out ./delivery
Exécutez toujours probe d’abord : la disponibilité des sources varie. Pour une exécution entièrement hors ligne, voir la section D de examples/quickstart.md. --image-referer est normalement la racine du site, pas l’URL de l’article.
Pour une réplique de dialogue, quote donne le film et l’horodatage en millisecondes :
python scripts/still.py quote "Je te vois" --title Avatar
Parcours complet : examples/quickstart.md. Référence des commandes : scripts/still.py --help.
3. Décidez de la route avant de toucher au réseau
| Demande | Premier choix | Solution de repli |
|---|---|---|
| Scène / ambiance (« silence après une dispute », « deux personnes dos à dos ») | Article éditorial avec images sous-titrées, ou images FilmGrab (grab) | Galerie image par image + sélection visuelle |
| Une réplique citée / « l’image où X dit Y » | quote → horodatage → galerie d’images → subtitle (étiqueter comme composite) | Capture d’écran avec sous-titres natifs d’un article éditorial |
| Besoin d’une illustration large, propre, sans sous-titre de couverture | Images FilmGrab | crop des 95-100 px du bas d’une capture d’écran de visualisation |
| L’utilisateur a des fichiers vidéo locaux | Recherche sémantique locale facultative, voir references/optional-adapters.md | — |
| Mème / 梗图 plutôt qu’une image | Annexe facultative, references/meme-optional.md | — |
Exécutez probe d’abord. C’est gratuit, ne nécessite aucune connexion, et vous indique quelles sources sont 403 / inaccessibles dans votre environnement afin de ne pas réessayer un serveur mort.
4. Règles qui s’appliquent à chaque agent
- Aucun identifiant. Ne demandez pas de clés API, ne vous connectez pas au nom de l’utilisateur, ne contournez pas les paywalls ou les protections anti-bot. Un 403 signifie « changez de source », enregistré dans le journal d’exécution.
- Téléchargez uniquement les URL qui ont été réellement retournées. N’inventez jamais une URL d’image. Une page accessible ne signifie pas que son CDN d’images est accessible : vérifiez une image avant de faire confiance à toute une galerie. Si les images font 403 après une correction de Referer, changez de source — ne continuez pas à faire varier les en-têtes.
- Enregistrez la provenance. Chaque image livrée nécessite la page source, l’URL directe de l’image, le titre/année du film, et si un sous-titre a été rogné ou composé.
grabécrit cela automatiquement dansmanifest.json. - Marquez les sous-titres composés. Si vous ajoutez un sous-titre qui n’était pas dans l’image originale, dites-le dans la légende. Ne le présentez jamais comme une image native.
- Vérifiez, ne supposez pas, la résolution (>= 1000 px de large par défaut) et ouvrez le fichier final avec un visualiseur avant de livrer.
- Respectez le profil. Le comportement au-delà de ce qui précède (sélection humaine dans la boucle, livraison en dossier double, vérification obligatoire des faits, prévisualisation de recadrage de couverture) est contrôlé par
profiles/*.json. N’activez pas silencieusement des règles supplémentaires.
5. Profils (comportement facultatif)
Le profil par défaut profiles/minimal.json est un pipeline simple et polyvalent : trouver des candidats, en choisir un, livrer avec provenance. Tout le reste est facultatif.
python scripts/still.py rules --profile profiles/editorial-wechat.json
python scripts/still.py deliver ./work --picks picks.json \
--profile profiles/editorial-wechat.json --out ./delivery
editorial-wechat.json regroupe le flux de travail d’un éditeur humain : prévisualisations numérotées et sélection humaine (jamais de finalisation automatique), livraison en dossier double sans suppression de candidat, vérification obligatoire des faits, annotation obligatoire des sous-titres/sources, et une prévisualisation de recadrage de couverture 2,35:1. Voir profiles/README.md pour le schéma complet.
6. Index des références (divulgation progressive)
Lisez uniquement ce dont l’étape actuelle a besoin.
| Fichier | Lire quand |
|---|---|
references/workflow.md | Vous avez besoin de la SOP complète de bout en bout et de la liste de contrôle d’acceptation |
references/sources.md | Choisir une source, ou une source a cessé de fonctionner |
references/pitfalls.md | Quelque chose a échoué ; contient les serveurs connus comme morts et les modes de défaillance exacts |
references/image-ops.md | Planches contact, rognage, composition de sous-titres, polices |
references/fact-check.md | Toute demande citant une réplique ou décrivant une scène spécifique |
references/delivery.md | Schéma de provenance, mise en page du dossier double, limite de droits d’auteur |
references/meme-optional.md | L’utilisateur a demandé un mème plutôt qu’une image |
references/optional-adapters.md | Bibliothèque vidéo locale, ou autres outils basés sur connexion/CLI |
7. Liste de contrôle d’acceptation
- La réplique / la scène a été vérifiée avant la recherche
- Une planche contact numérotée a été consultée par un modèle de vision ou par l’humain
- L’image finale s’ouvre correctement et correspond à la demande, pas seulement à la requête
- Page source + URL directe + film/année enregistrés dans
manifest.json - Sous-titres rognés / composés explicitement étiquetés
- Largeur >= 1000 px (ou l’écart est indiqué)
- Serveurs morts et solutions de contournement enregistrés plutôt que réessayés silencieusement
- Aucun candidat n’a été supprimé ; les fichiers intermédiaires sont conservés
8. Limites du périmètre
Cette compétence trouve et prépare des images. Elle ne publie rien, n’édite pas le manuscrit de l’utilisateur, ne décide pas de la couverture finale pour le compte de l’utilisateur (sauf si le profil indique que l’humain a déjà choisi), et n’accorde aucun droit de redistribuer des images de film. Voir references/delivery.md pour la limite de droits d’auteur.