Movie Still Finder
Verwandle „Ich brauche ein Standbild von zwei Menschen, die nach einem Streit schweigend dasitzen“ in eine echte, quellenbelegte Bilddatei. Jeder KI-Agent, jedes Betriebssystem – keine Anmeldedaten erforderlich.
1. Lies dies zuerst: Was tatsächlich möglich ist
Es gibt keine kostenlose, öffentliche API, die einen Satz in natürlicher Sprache nimmt und den exakten Filmframe zurückgibt – vor allem keinen mit eingebrannten Dialog-Untertiteln. Die Jagd nach diesem „Allheilmittel“ verschwendet Zeit. Was funktioniert, ist eine Pipeline, bei der der Agent orchestriert und ein vision-fähiges Modell den Frame auswählt:
Anfrage -> Faktencheck -> Quelle wählen -> Batch-Download Kandidaten
-> nummeriertes Kontaktblatt -> VISUELLE Frame-Auswahl -> hochauflösendes Original
-> Untertitel zuschneiden / zusammensetzen -> visuelle Gegenprüfung
-> Auslieferung + Quellenmanifest
Zwei nicht verhandelbare Konsequenzen:
- Der visuelle Schritt kann nicht übersprungen werden. Das Erraten eines Frames anhand von Dateinamen oder Text allein scheitert. Zeige das Kontaktblatt einem vision-fähigen Modell (oder dem Menschen).
- Zuerst Fakten prüfen. Weit verbreitete „Fakten“ über Filme sind oft falsch (siehe
references/fact-check.md). Überprüfe die Zeile / Szene / Episode, bevor du suchst.
2. Schnellstart (Minimalprofil, die Standardeinstellung)
pip install -r requirements.txt
python scripts/still.py probe # Welche Quellen sind gerade erreichbar?
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
# Zeige contact_1.jpg einem vision-fähigen Modell, notiere die Gewinnernummer, dann:
python scripts/still.py sheet ./work/candidates # Nummeriertes Blatt neu generieren
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
Führe immer zuerst probe aus: Die Verfügbarkeit von Quellen ändert sich. Für eine vollständig offline Ausführung siehe Abschnitt D von examples/quickstart.md. --image-referer ist normalerweise die Site-Wurzel, nicht die Artikel-URL.
Für eine Dialogzeile liefert quote Film + Millisekunden-Zeitstempel:
python scripts/still.py quote "I see you" --title Avatar
Vollständige Anleitung: examples/quickstart.md. Befehlsreferenz: scripts/still.py --help.
3. Entscheide den Weg, bevor du das Netzwerk berührst
| Anfrage | Erste Wahl | Ausweichmöglichkeit |
|---|---|---|
| Szene / Stimmung („Stille nach einem Streit“, „zwei Menschen, die wegschauen“) | Redaktioneller Artikel mit Bildunterschriften-Standbildern oder kuratierte Frames von FilmGrab (grab) | Frame-für-Frame-Galerie + visuelle Auswahl |
| Eine zitierte Zeile / „der Frame, in dem X Y sagt“ | quote → Zeitstempel → Frame-Galerie → subtitle (als zusammengesetzt kennzeichnen) | Screenshot mit nativen Untertiteln aus einem redaktionellen Artikel |
| Benötigt breites, sauberes, untertitelfreies Cover-Art | Kuratierte Frames von FilmGrab | crop die unteren 95–100 px von einem Viewing-Screenshot abschneiden |
| Benutzer hat lokale Videodateien | Optionale lokale semantische Suche, siehe references/optional-adapters.md | — |
| Meme / 梗图 anstelle eines Standbilds | Optionaler Anhang, references/meme-optional.md | — |
Führe probe zuerst aus. Es ist kostenlos, benötigt kein Login, und sagt dir, welche Quellen in deiner Umgebung 403 / nicht erreichbar sind, damit du keinen toten Host wiederholt anfragst.
4. Regeln, die für jeden Agenten gelten
- Keine Anmeldedaten. Fordere keine API-Schlüssel an, logge dich nicht im Namen des Benutzers ein, umgehe keine Paywalls oder Anti-Bot-Schutzmaßnahmen. Ein 403 bedeutet „Quelle wechseln“, festgehalten im Ausführungsprotokoll.
- Lade nur URLs herunter, die tatsächlich zurückgegeben wurden. Erfinde niemals eine Bild-URL. Eine erreichbare Seite bedeutet nicht, dass ihr Bild-CDN erreichbar ist: Überprüfe ein Bild, bevor du einer ganzen Galerie vertraust. Wenn Bilder nach einer Referer-Korrektur 403 ergeben, wechsle die Quelle – variiere nicht ständig die Header.
- Dokumentiere die Herkunft. Jedes ausgelieferte Bild benötigt Quellseite, direkte Bild-URL, Filmtitel/Jahr, und ob Untertitel zugeschnitten oder zusammengesetzt wurden.
grabschreibt dies automatisch inmanifest.json. - Kennzeichne zusammengesetzte Untertitel. Wenn du einen Untertitel hinzufügst, der nicht im Originalframe war, gib dies in der Bildunterschrift an. Präsentiere ihn niemals als nativen Frame.
- Überprüfe, nimm nicht an, die Auflösung (standardmäßig >= 1000 px breit) und öffne die endgültige Datei mit einem Viewer, bevor du sie auslieferst.
- Respektiere das Profil. Verhalten über das oben Genannte hinaus (Mensch-im-Kreis-Auswahl, Dual-Folder-Auslieferung, obligatorischer Faktencheck, Cover-Crop-Vorschau) wird durch
profiles/*.jsongesteuert. Aktiviere keine zusätzlichen Regeln ohne Zustimmung.
5. Profile (optionales Verhalten)
Das Standardprofil profiles/minimal.json ist eine einfache, universelle Pipeline: Kandidaten finden, einen auswählen, mit Herkunftsnachweis ausliefern. Alles andere ist optional.
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 bündelt den Workflow eines menschlichen Redakteurs: nummerierte Vorschauen und menschliche Auswahl (niemals automatisch finalisieren), Dual-Folder-Auslieferung ohne Löschen von Kandidaten, obligatorischer Faktencheck, obligatorische Untertitel-/Quellenkennzeichnung und eine 2,35:1 Cover-Crop-Vorschau. Siehe profiles/README.md für das vollständige Schema.
6. Referenzindex (fortschreitende Offenlegung)
Lies nur das, was der aktuelle Schritt benötigt.
| Datei | Lesen, wenn … |
|---|---|
references/workflow.md | Du die vollständige End-to-End-SOP und Akzeptanzcheckliste benötigst |
references/sources.md | Du eine Quelle auswählst oder eine Quelle nicht mehr funktioniert |
references/pitfalls.md | Etwas fehlgeschlagen ist; enthält die bekannten toten Hosts und genauen Fehlermodi |
references/image-ops.md | Kontaktblätter, Zuschneiden, Untertitel-Zusammenstellung, Schriftarten |
references/fact-check.md | Jede Anfrage, die eine Zeile zitiert oder eine bestimmte Szene beschreibt |
references/delivery.md | Herkunftsschema, Dual-Folder-Layout, Urheberrechtsgrenzen |
references/meme-optional.md | Der Benutzer ein Meme anstelle eines Standbilds angefordert hat |
references/optional-adapters.md | Lokale Videobibliothek oder andere Login-/CLI-basierte Tools |
7. Akzeptanz-Checkliste
- Die Zeile / Szene wurde vor der Suche faktengeprüft
- Ein nummeriertes Kontaktblatt wurde von einem vision-fähigen Modell oder dem Menschen angesehen
- Das endgültige Bild öffnet sich korrekt und entspricht der Anfrage, nicht nur der Abfrage
- Quellseite + direkte URL + Film/Jahr in
manifest.jsonfestgehalten - Zugeschnittene / zusammengesetzte Untertitel explizit gekennzeichnet
- Breite >= 1000 px (oder die Abweichung wird angegeben)
- Tote Hosts und Workarounds festgehalten, nicht stillschweigend wiederholt
- Kein Kandidat wurde gelöscht; Zwischenprodukte bleiben erhalten
8. Umfangsbegrenzung
Dieses Skill findet und bereitet Bilder vor. Es veröffentlicht nichts, bearbeitet nicht das Manuskript des Benutzers, entscheidet nicht über das endgültige Cover im Namen des Benutzers (es sei denn, das Profil besagt, dass der Mensch bereits gewählt hat) und gewährt kein Recht zur Weiterverteilung von Film-Standbildern. Siehe references/delivery.md für die Urheberrechtsgrenze.