Comic-Geschichtenvideo
Aus jedem Thema ein 110–135 Sekunden langes vertikales Kurzvideo machen: Strichzeichnungen werden Strich für Strich gezeichnet, Sprechblasen erscheinen nacheinander, Single-Voice-Erzählung mit großen Untertiteln.
Ergebnis: <Projekt>/out/final.mp4 (1080×1920).
Die Stimme führt. Wenn man die Tonspur allein hört, muss sie eine verständliche Geschichte erzählen; die Bilder fügen etwas hinzu, sind aber nicht Voraussetzung für das Verständnis.
Fünf Schritte
① Geschichte festlegen → <Projekt>/story.json
Verzeichnis erstellen, Vorlage kopieren:
mkdir -p <Projekt>/raw && cp templates/comic/story.example.json <Projekt>/story.json
Zuerst die ersten drei Zeilen der Datei ausfüllen. Wenn du sie nicht ausfüllen kannst, schreibe keine Panels:
"story_line": "Wer / will was / woran scheitert es / Ergebnis, in einem Satz",
"question": "Die zu Beginn gestellte Frage",
"answer": "Die Antwort, die im letzten Panel gegeben wird und die Frage beantwortet"
Die question sollte auf einen Punkt abzielen, der „nicht logisch erscheint“, nicht auf eine reine Beschreibung. Die Antwort sollte keine Zeitleiste sein.
Dann für jedes Panel narration (Erzähltext) und bubbles[].text (Sprechblasentext) schreiben. Der Erzähltext sollte 440–540 Zeichen umfassen (Satzzeichen zählen mit), umgerechnet mit 4,0 Zeichen/Sekunde.
python scripts/pipeline.py <Projekt> --stage script # Aber nicht weitermachen
Prüfung für ①: Die drei Zeilen sind vollständig → Zeichenanzahl im Bereich → jedes Panel hat Erzähltext → Sprechblasen ragen nicht aus dem Bild → Die Funktion in charts.py existiert.
② Bilder erzeugen → <Projekt>/raw/<id>.png
Schreibe zuerst alle Prompts fertig, dann erzeuge alle Bilder auf einmal. Wenn du ein Bild nach dem anderen erzeugst, dauert es ein bis zwei Stunden, und das Ändern der Prompts zwischendurch führt zu Stilbrüchen.
python scripts/comic_gen.py <Projekt> --list # Zeigt nicht erzeugte Prompts an; bereits erzeugte werden übersprungen
Generiere die Bilder nacheinander gemäß der angezeigten Prompts und speichere sie in raw/. Verwende unbedingt Bild-zu-Bild-Generierung mit dem Referenzbild assets/reference/01-style-anchor.png bei niedriger Ähnlichkeit.
python scripts/contact_sheet.py <Projekt> # Erstellt eine Übersicht, einmal ansehen
python scripts/pipeline.py <Projekt> --stage image
Prüfung für ②: In der Übersicht auf nur zwei Dinge achten – ob die richtigen Personen da sind und ob es großflächige Schwärzungen oder leere Flächen gibt. Alles andere (vereinzelter Text im Bild, halber Kopf Größenunterschied, verschmierte Linien, um einige Pixel verschobener Schwanz) wird ignoriert, mach einfach weiter.
③ Produktion → final.mp4
python scripts/comic_run.py <Projekt>
Nacheinander ausführen: Sprachaufnahme → Sprechblasenebene / Infografik → bereinigte Schlussgrafik → Strich-für-Strich-Rendering → vertikales Video zusammensetzen → Untertitel einbrennen.
Einzelne Schritte erneut ausführen mit den entsprechenden comic_*.py-Skripten.
④ Überprüfung
python scripts/verify_media.py --file <Projekt>/out/final.mp4 --expect <Sekunden>
ffmpeg -y -ss 3 -i <Projekt>/out/final.mp4 -vframes 1 <Projekt>/check/03.png
Zwei Frames prüfen (Sekunde 3 und bei 0,75 der Gesamtlänge des Panels): Bewegt sich das Bild? Stimmt die Hintergrundfarbe? Ragen Untertitel aus dem Bild?
Dann die Tonspur extrahieren und mit geschlossenen Augen anhören: Kannst du sagen „Wer will was, welche Ereignisse passieren, wie endet es?“ – dann ist es bestanden.
⑤ Auslieferung
<Projekt>/out/final.mp4. Wenn eine flache Version benötigt wird, verwende out/story_flat.mp4.
Zehn strenge Regeln
Die ersten drei Regeln betreffen die Geschichte; ein Verstoß bedeutet „Ich weiß nach dem Hören nicht, worum es ging“. Die letzten sieben betreffen die Produktion; ein Verstoß bedeutet, dass Bild oder Ton falsch sind.
1. Fülle zuerst story_line / question / answer aus. Wenn du sie nicht ausfüllen kannst, schreibe keine Panels.
Fehlen diese drei Zeilen, stellst du nach dem Schreiben von acht Panels fest, dass die Geschichte auseinanderfällt – die teuerste Art der Nacharbeit.
2. Wähle das Gerüst basierend auf der Beziehung zwischen Protagonist und Hindernis; verwende nicht für jedes Thema dieselbe Panel-Tabelle.
| Protagonist vs. Hindernis | Gerüst |
|---|---|
| Ein konkreter Gegner, Hin und Her | Angriff → Abwehr → Eskalation → Abwehr → Schlimmster Angriff → Abwehr |
| Der eigene Weg ist versperrt | Das alte Geschäft stirbt → Einige Versuche schlagen fehl → Eine unerwartete Sache taucht auf → Alles auf eine Karte setzen → Erfolg → Endlich verstehen, was wirklich verkauft wird |
| Ein unerklärliches Phänomen, rückwärts ermitteln | Seltsame Sache → Die Person finden → Ihre damalige Notlage → Wie sie es gelöst hat |
| Auf dem Gipfel, durch eine Kleinigkeit gestürzt | Höhepunkt → Ein Riss → Niemand nahm es ernst → Falsch gesetzt → Zusammenbruch |
Die Anzahl der Panels richtet sich nach der Geschichte; 5–9 Panels sind in Ordnung.
3. Nummeriere keine nebeneinander stehenden Ereignisse als „Runden“. Wenn du „erste Runde“ durch „erstes Mal“ ersetzen kannst, ohne dass die Geschichte leidet, dann war es keine Runde, sondern ein aufgeklebtes Etikett – streiche es. Ebenso: Verwende keine Kommentator-Floskeln wie „eskaliert“, „am Ziel“, „die Karten aufdecken“, „die wahren Absichten zeigen“. Das Publikum hört nur Codes, keine Geschichte.
4. Der Erzähltext muss eine verständliche, vollständige Geschichte sein; der Sprechblasentext muss ausgesprochen werden. „Er antwortete etwas“, „Er schrieb zwei Zeichen“, „Ein Satz brachte ihn zur Besinnung“ – der Zuhörer weiß nur, dass jemand etwas gesagt hat, aber nicht, was. Es ist kein Fehler, wenn der Sprechblasentext den Erzähltext wiederholt; die Untertitel sind ohnehin eine Wiederholung des Tons.
5. Das generative Modell zeichnet nur Strichzeichnungen; Text wird per Code hinzugefügt. Füge in den Prompt „zeichne keine Schriftzeichen“ ein – das dient der Vorsorge, nicht als Prüfkriterium für die Bilder.
6. Sprechblasen gehen nicht in die Engine. Die Engine wandelt Farben in schwarze Flächen um. Sprechblasen werden beim Compositing zeitgesteuert eingeblendet, was eine bessere Kontrolle des Rhythmus ermöglicht.
7. Übergib kein element_plan.
Wenn du es übergibst, zeichnet jedes Objekt maximal 1,6 Sekunden lang und stoppt dann; das gesamte Panel ist in zwei Sekunden fertig. Ohne element_plan wird das Budget proportional zur Quadratwurzel der Fläche verteilt, bei konstanter Gesamtdauer.
8. Verwende unbedingt Bild-zu-Bild-Generierung mit niedriger Referenz-Ähnlichkeit (0,3–0,5). Bei hoher Ähnlichkeit kopiert das Modell die Pose des Referenzbildes und ignoriert die von dir beschriebene Aktion.
9. Schreibe die Charaktere in characters und referenziere sie im Prompt mit {Name}; zwischen zwei beliebigen Charakteren müssen mindestens drei Unterschiede bestehen.
Kopfschmuck, Bart, Kleidung, Körperbau – alles genau beschreiben. Der Protagonist trägt einen auffälligen Kopfschmuck (weiches Tuch / ohne Krone); eckige Kronen, Helme und Kopfbedeckungen sind Gegnern und Soldaten vorbehalten.
10. Verwende colorkey + overlay für die Hintergrundfarbe; brenne Untertitel als ASS-Datei ein und deklariere PlayResX/Y.
Bei Verwendung von blend=all_mode=multiply wird die Hintergrundfarbe zu Neon-Grün; SRT-Untertitel, die von libass verarbeitet werden, landen im 384×288-Koordinatensystem, wodurch Schrift aus dem Bild ragt.
Bei Problemen: Welches Dokument lesen?
| Situation | Lies |
|---|---|
| Du weißt nicht, wie du ein Thema in eine Geschichte verwandelst, was in jedes Panel kommt, wie du endest | references/story.md |
| Prompt schreiben, Charaktere festlegen, Sprechblasen-Layout, TTS, Rendering- und Compositing-Parameter | references/production.md |
| Bild / Ton / Dauer sind fehlerhaft | references/troubleshooting.md |
| Konkrete Prompt-Vorlagen und negative Constraints | references/prompt-recipes.md |
| Sprechsilben / Stimmfarbe | references/voice-design.md |
| edge-tts gibt 403 zurück | references/apiz-tts-fallback.md |
Verzeichnisstruktur
<Projekt>/
├── story.json Einzige Konfiguration: Titel, drei Geschichtszeilen, Erzähltext/Sprechblasen/Prompt pro Panel
├── charts.py Zeichenfunktionen für Infografik-Panels (nur benötigt, wenn es Chart-Panels gibt)
├── raw/ Originalbilder vom generativen Modell ← Du legst sie hier ab
├── boards/ bubbles/ charts/ audio/ out/ ← Skript-Ausgaben
└── subs.ass
Erstmalige Nutzung
bash scripts/setup.sh # macOS / Linux / Git Bash
powershell -ExecutionPolicy Bypass -File scripts/setup.ps1 # Windows
python scripts/self_test.py # 6 Selbsttests, einmal ausführen