novel-script – Drehbuch für KI-Kurzserien
Erzeugt ein strukturiertes Drehbuch für eine KI-Kurzserie. Grundannahme, die tief im Code verankert ist: Das Drehbuch kümmert sich um die Handlung, das Storyboarding um die Kameraeinstellungen - „Macht es Spaß?“ und „Wie wird es gefilmt?“ sind zwei verschiedene Iterationsgeschwindigkeiten: Dialoge müssen oft umgeschrieben werden; würde man sie an Kameraeinstellungen binden, müsste man bei jeder Änderung die gesamte Szene neu planen. Daher gibt es in dieser Ebene nur Akte, Szenen und einen Beat-Fluss – keine Kameranummern. Kameraeinstellungen, erste Frame-Prompts und Generierungs-Batches sind Aufgaben der nächsten Ebene (Storyboarding-Skill).
Aber es gibt eine grundlegende Regel: Dialoge müssen als strukturierte Daten vorliegen, nicht als Prosa. Jede Dialogzeile ist ein eigener Eintrag (Sprecher + Text + Tonlage), Aktionen sind eigenständige Beats – das ist die Grundlage für alle automatischen Qualitätsprüfungen:
| Ausgabe | Was wird gelöst |
|---|---|
| Zeitbudget pro Episode | Eine Episode von drei Minuten bleibt genau drei Minuten: Dialoge werden nach Sprechgeschwindigkeit, Aktionen nach Beat-Dauer umgerechnet. Über- oder Unterschreitungen werden sofort abgefangen, bevor sie in die Generierungsphase gelangen |
| Beat-Fluss (Aktion ⇄ Dialog) | Dialoge können direkt an TTS zur zeilenweisen Generierung übergeben werden; Aktionsbeats beschreiben, was im Bild passiert. Prosa würde beide Pipelines blockieren |
| Mindestens ein Aktionsbeat pro Szene | Eine Szene nur mit Dialog ist ein Hörspiel – die KI hätte kein Bildmaterial zum Generieren |
| Hook zu Beginn + Cliffhanger am Ende | Lebenslinien einer Kurzserie: Jede Episode muss beide auf dem Papier haben; der Hook ist kein Etikett, sondern der erste Beat – hookBeat markiert seine konkrete Position und muss innerhalb der ersten 3 Beats der gesamten Episode liegen (kalter Einstieg) |
| Abnahme der Höhepunkte („Shuang Dian“) | Wenn die Gliederung einen großen Höhepunkt in dieser Episode vorsieht, muss das Drehbuch ihn tatsächlich enthalten – verhindert, dass er beim Umschreiben verloren geht |
| Abgleich mit der Vorgabe | Szenen/Lichtzustände/Requisiten werden mit art.json, Rollen mit outline.json abgeglichen; Lichtzustände, die in der art.json nicht erfasst sind, führen sofort zu einer Fehlermeldung |
{baseDir} = Verzeichnis dieser Datei. Skript {baseDir}/scripts/novel-script.mjs, keine Abhängigkeiten, läuft direkt mit node.
Grenzen (was das Skill nicht tut): Keine Kameraeinstellungen, keine Kameranummern, keine Bildgenerierungs-Prompts, keine Bildausgabe, keine Musik – alles Aufgaben der Storyboarding-Ebene. Keine Änderungen an der Gliederungsstruktur (Zusammenlegen/Löschen von Handlungssträngen ist Aufgabe von novel-outline); keine Erstellung von Rollen- und Szenenbeschreibungen (Aufgaben von novel-characters / novel-art).
Schritt 0 — Eingabe und Umfang festlegen
outline.json ist die direkte Vorlage für das Drehbuch (Episoden-Zusammenfassungen, Position der Höhepunkte, Episodenlängen sind darin enthalten). Der Standardworkflow beginnt damit. Fehlt sie: Frage den Benutzer, ob er novel-outline ausführen möchte; besteht er darauf, direkt zu schreiben, frage nach der Anzahl der Episoden und deren Minutenlänge, erstelle manuell ein Gerüst – die Validierung wird die nicht durchführbaren Prüfungen explizit überspringen.
Wie viele Episoden auf einmal: Standardmäßig ≤ 3 Episoden pro Batch. Das Drehbuch wird in der gesamten Pipeline am häufigsten geändert: kleine Batches, schnelle Entscheidungen, dann weitermachen. Wenn der Benutzer explizit die ganze Serie möchte, wird sie in Batches produziert, jeder Batch durchläuft die Validierung.
Nützliche optionale Parameter (nur wenn angegeben, werden sie für Abgleiche/Anzeige genutzt):
--outline: Rollen-Abgleich + Prüfung auf Höhepunkt-Abnahme + im Bericht werden C01 als Personenname angezeigt--art: Szenen/Lichtzustände/Requisiten-Abgleich + im Bericht wird S01 als Szenenname angezeigt
Schritt 2 — Gerüst erstellen (Seed)
node {baseDir}/scripts/novel-script.mjs seed <outline.json> --eps 1-3 > <workdir>/script.json
Deterministische Übernahme: Zielsekunden (Episoden-Minuten × 60), Hook, Cliffhanger, Höhepunkte dieser Episode, verfügbare Szenen und Figuren (in seedNote). Diese Fakten muss das Modell nicht neu erfinden. scenes bleibt leer – das ist die Aufgabe des Drehbuchschreibens.
Schritt 2 — Szenen für jede Episode schreiben
Eine Aufgabe pro Episode, parallelisierbar. Jede Aufgabe erhält:
{baseDir}/references/script-pass.mdund{baseDir}/references/schema.md(lesen und befolgen)- Das Seed-Gerüst dieser Episode + die Zusammenfassung/Höhepunkte/Besetzungsplan aus der Gliederung
- Die in dieser Episode verwendeten Szenenkarten (Ankerpunkte, Lichtzustände aus
art.json) und Rolleninformationen (Persönlichkeit, Sprechweise – idealerweise mitcast.json) - Den Cliffhanger der vorherigen Episode (der Einstieg dieser Episode muss darauf aufbauen)
Die Kernanforderungen stehen alle in script-pass.md, die vier wichtigsten: Aktionsbeats beschreiben nur gewöhnliche Aktionen (einen Tragestab auf ein Boot laden, Hände auflegen, um die Last abzunehmen – solche Aktionen, die eine KI millionenfach gesehen hat; filigrane Aktionen wie „eine Stange ausstrecken und abwehren“ oder „Wimpern zittern“ führen bei der Generierung unweigerlich zu Fehlern); das Zeitbudget hat Vorrang vor allem (eine 3-Minuten-Episode hat ca. 50 Beats; nach dem Schreiben selbst validate laufen lassen, um die Sekundenzahl zu prüfen); Dialoge müssen mündlich sein, ein Satz pro Atemzug, jeder spricht wie seine Rolle (liegt cast.json vor, Persönlichkeit und Sprechweise verwenden); der 1. Beat jeder Episode muss ein kalter Einstieg sein, der den Hook konkretisiert (hookBeat markiert ihn, die Validierung prüft die Position), der letzte Beat muss der Cliffhanger sein.
Nach dem Schreiben seedNote löschen.
Schritt 3 — Validierung ⛔ Darf nicht übersprungen werden
node {baseDir}/scripts/novel-script.mjs validate <script.json> \
--outline <outline.json> --art <art.json>
10 Qualitätstür, alle in Code implementiert: Episodenlänge innerhalb ±15 % des Ziels (Dialoge mit 4,5 Zeichen/Sekunde, Aktionen mit 2,5 Sekunden/Beat, params anpassbar), max. 35 Zeichen pro Dialogzeile, Sprecher in der aktuellen Szene vorhanden oder als VO markiert, Hook und Cliffhanger jeder Episode auf dem Papier, konkreter Hook innerhalb der ersten 3 Beats der gesamten Episode (hookBeat markiert ihn, params.hookWindow anpassbar), mindestens ein Aktionsbeat pro Szene, Aktionsbeschreibungen enthalten keine in Anführungszeichen gesetzten Dialoge, Höhepunkt-Abnahme, Rollen-Abgleich, Szenen/Licht/Requisiten-Abgleich.
Bei Verstößen einzeln korrigieren, dann erneut validieren, bis alles bestanden ist. Bei Überschreitung zuerst Aktionsbeats entfernen, dann Dialoge kürzen; bei Unterschreitung die Handlung erweitern, nicht auffüllen – Konflikt hinzufügen, keine Floskeln. Wenn ein Lichtzustand benötigt wird, der in art.json nicht registriert ist, dort nachtragen und zurückkommen – nicht die Validierung umgehen.
Schritt 4 — Ausgabe und Bericht
cd <Ausgabeverzeichnis>
node {baseDir}/scripts/novel-script.mjs render <Serienname>-script.json --md \
--outline <outline.json> --art <art.json> > <Serienname>-script.md
node {baseDir}/scripts/novel-script.mjs render <Serienname>-script.json --html \
--outline <outline.json> --art <art.json> --cast <cast.json> > script-report.html
# Englische Oberfläche: --lang en hinzufügen (Standard ist Chinesisch, kann auch dem `lang`-Feld in script.json folgen)
Der Bericht enthält: KPI-Dashboard (mit Dialoganteil), Zeitdashboard (jede Episode als Balken im Zielbereich, Über-/Unterschreitung rot markiert), Episoden-Drehbücher (zwei Episoden pro Reihe, Szeneninfo bei >300px ausgeblendet, aufklappbar), Szenentabelle, Dialogbuch (zwei Rollen pro Reihe, nach Rolle gruppiert, Liste sechs Zeilen hoch scrollbar, gesamte Gruppe kopierbar; mit --cast hat jede Rollengruppe einen Button für Stimmfarbe-Hinweise – Dialog und Stimmfarbe auf einer Seite, direkt für TTS), Qualitätstür-Panel, JSON-Export (lädt das originale script.json herunter).
Der Bericht fasst in einem Satz zusammen: Wieviele Episoden, Szenen, Dialogzeilen; geschätzte Gesamtdauer vs. Ziel; welche Episoden an der Toleranzgrenze liegen; Pfad zum Bericht. Nicht bestandene Prüfungen werden explizit genannt.
Endgültiges Ergebnis:
<Ausgabeverzeichnis>/├── <Serienname>-script.json
├── <Serienname>-script.md
└── script-report.html ← Doppelklick zum Öffnen
Die vier Skills im Staffellauf
novel-outline → outline.json (Was: Struktur und Episoden)
novel-characters → cast.json (Wer: Figuren als Assets)
novel-art → art.json (Wo + was in der Hand: Artistische Assets)
novel-script → script.json (Handlung: Szenen, Beats, Dialog)
seed nutzt outline.json; validate/render mit --outline --art führen Abgleiche durch und zeigen Namen an. Die vier JSON-Dateien haben jeweils eigene Berichte mit Export-Button, nach Änderungen können sie zurück in ihren jeweiligen render/validate-Workflow gegeben werden. Die nächste Ebene ist das Storyboarding: Kameranummern, Einzel-Sekunden-Dauer, erster Frame-Prompt, Generierungs-Batches – alles dort.
Grenzen
- Berichtsoberfläche zweisprachig chinesisch/englisch (
--lang, Standard Chinesisch oder folgt demlang-Feld in script.json); Dialogsprache richtet sich nach der Serie. - Die Dauer ist eine Schätzung, keine Stoppuhr – die Toleranz von ±15 % ist genau dafür gedacht;
params.charsPerSecondkann an die Sprechgeschwindigkeit der Synchronsprecher angepasst werden. VOist die einheitliche Markierung für Off-Stimme, wessen Gedanken es sind, steht imdelivery-Feld; im Dialogbuch wird VO als eigene Gruppe geführt.- Keine Obergrenze für Szenen pro Episode – Szenenwechsel mit KI kosten nichts; die Anzahl der Wechsel wird nur in den KPI-Statistiken erfasst, nicht als Qualitätstor.
Selbsttest
node {baseDir}/scripts/selftest.mjs
154 Assertions, kein Modellaufruf, keine Kosten. Für jedes der 10 Qualitätstore gibt es einen Test, der es durchbricht. Nach Änderungen am Skript zuerst diesen Test ausführen.
Beispieldatei
{baseDir}/examples/渡口-script.json: Komplettes Drehbuch der 6 Episoden von „Furt“ (9 Szenen, 123 Dialogzeilen, jede Episode hat einen kalten Einstieg mit konkretem Hook und liegt innerhalb von 120 Sekunden ±15 %). Besteht alle Qualitätstore im Abgleich mit den Beispiel-Gliederungen und Art-Dateien. Dient als Qualitätsreferenz und als Test-Fixture.
Anhang: Workflow-Zusammenfassung für den Benutzer
- Gliederung bereitstellen (
outline.jsonvianovel-outlineoder manuell) - Seed erstellen:
node novel-script.mjs seed <outline.json> --eps 1-3 > script.json - Drehbuch schreiben: Jede Episode manuell oder mit KI-Assistenz ausformulieren (laut
script-pass.md) - Validieren:
node novel-script.mjs validate <script.json> --outline <outline.json> --art <art.json> - Bericht generieren:
node novel-script.mjs render <script.json> --md --html - Wiederholen für die nächsten Episoden