ComfyUI H3 Skript-zu-Video (v5.0 Regie-Ebene audiovisuelle Sprache & industrielle Engineering-Standard Edition)
v5.0 Großer Meilenstein-Update (2026-11, Industrialisierung der audiovisuellen Sprache & vollständige Bewältigung von sieben Schmerzpunkten)
- 1. Vorproduktion von Keyframe-Standbildern (I2V-Szene/Charakter/Prop-Joint-Keyframe) : Beendet endgültig das blinde T2V-Running ohne Keyframe. Vor der Videosampling eines jeden Storyboards wird zuerst durch ein Bildgenerierungsmodell in Kombination mit der Kameraposition, den Charakter-3-Ansichten und den Prop-Spezifikationen ein 16:9-Joint-Keyframe-Bild (
keyframe_segXX.png) erstellt. Nach der Qualitätskontrolle wird es in den I2V-Node eingespeist, wobei Frame 0 die Skelettgeometrie, die Kleidungstextur und die Prop-Konturen fixiert.- 2. Sprecher-Sperre & Kollektive-Stille-Protokoll (Speaker Lock & Mouth Suppression) : Beseitigt vollständig das alptraumhafte Marionettentheater, bei dem alle in der Szene gleichzeitig mit dem Dialog die Lippen bewegen. In
[Subject 1]wird der einzige Hauptsprecher klar definiert, in[Action 1]wird die Subjekt-Prädikat-Aktion getrennt, und Nicht-Sprecher-Charakteren wird eine strikte Mund-Stille-Klausel auferlegt (lips tightly sealed, completely silent, showing tense glare without mouth movement).- 3. Globaler Style-Bibel (Global Style Bible) & Vorab-Style-Gate : Verhindert die willkürliche Stildrift von Folge zu Folge. Vor dem Start des Projekts muss eine globale Style-Bibel etabliert werden (klar definiert
visual_genre,environment_base,lighting_base,color_palette,quality_base). 4 Stil-Musterbilder in verschiedenen Einstellungsgrößen werden generiert und nach manueller Bestätigung für das gesamte Projekt vererbt.- 4. Goldene Sprechgeschwindigkeit & Dichtekontrolle für Kurzserien (Pacing & Density Normalization) : Behebt das Problem von schleppendem, gedehntem Sprechen. Im Standard-Zeitrahmen von 175 Frames (7,29s) muss der Dialog streng 20~28 reinen chinesischen Zeichen entsprechen (goldene Sprechgeschwindigkeit für Kurzserien 3,2~4,0 Zeichen/Sekunde); in
[Audio 1]wird explizitspoken crisply and rapidly without dragging syllablesdeklariert; die ersten 4,5s sind schnelles Sprechen, die letzten 2,8s ein kalter Blick und eine Handlungsreaktion.- 5. Sechs kinoreife dynamische Kamerafahrten & Bewegungs-Blockbibliothek (Director Camera & Blocking) : Verbot von zwei Personen, die sich stehend frontal gegenüberstehen und reden! Erzwingt die Einführung von 6 dynamischen Kamerafahrten: ① Bewegungslinien-Kreuzung-Langsam-Vorwärtsschieben, ② Prop-Nahaufnahme mit Fokus auf die Augen, ③ holländischer Winkel-Schräg-Schnitt-Zwang, ④ Rücken-drehen-Kopf-wenden-kalter-Blick, ⑤ Ohr-nähern-Druck, ⑥ Seitenlicht-Silhouetten-Konfrontation.
- 6. Reine Mandarin-Aussprache-Konvention & ASR-Sprachdrift-Gate (Mandarin Purity & Language Gate) : Vollständige Normalisierung aller Dialoge auf reines Chinesisch (arabische Ziffern in chinesische Schriftzeichen umwandeln, englische Abkürzungen und illegale Symbole entfernen); in
[Audio 1]wirdStrict Mandarin Chinese dialogue only, standard native Chinese accent, zero foreign toneerzwungen; integrierte Whisper ASR-Spracherkennung unterbricht automatisch nicht-chinesische Untertitel und Sprachdrift.- 7. Engineering-Master-Steuerungspipeline geschlossen : Implementierung von
scripts/director_engine_v3.pyfür die vollautomatische Storyboard-Tabelle, Prompt-Kompilierung, Sprechgeschwindigkeits- und Dichtekalkulation sowie Sprecher-Sperre.v4.1 Update (2026-11, Offizielle v2.2 Prompt-Konvention & Vertiefung des 175-Frame-Timings)
- Prompt-Spezifikation auf v2.2 aktualisiert :
- Integration des offiziellen MiniMax Prompt-Leitfadens (
references/official/base-en.txt,ref-en.txt);- Drei Elemente der Kamerabewegung (Typ+Amplitude+Geschwindigkeit) werden als natürlicher Satz in die Kamera geschrieben, Stapeln von Tags am Ende des Beats ist strengstens verboten;
- Materialberechtigung: Explizite Erklärung
die Kameraposition des Originalbildes nicht kopieren, den Bildausschnitt nicht kopieren;- Strenge Einhaltung des Komplexitätsbudgets: Maximal 3 Subjekte + 1 Dialogzeile pro Segment (175 Frames/7,29s).
- Segmentlänge auf 175 Frames (7,29s) fixiert :
- 243 Frames offiziell ausgemustert, harte Obergrenze auf 192 Frames (8,00s) gesetzt, Produktionsstandard einheitlich auf 175 Frames fixiert, ausreichend 1,0~1,2s stumm am Ende des Segments;
- Gehorsamszone der Steuerungsebene (Totale nur zum Raumbau und Gesichtserkennung, dann Schnitt auf Nah-/Halbnah, kein Rückwärtszoom und Fensterdurchgang).
- Windows UTF-8 Terminal-Abwehr :
force_utf8_stdio()setzt stdout/stderr einheitlich auf UTF-8 zurück, um GBK/CP936-Codierungs-Abstürze zu verhindern.- Erweiterung der Werkzeugkette für Qualitätskontrolle und Weitwinkel-Gesichtsretusche :
- Einführung von Whisper ASR-Dialog-Qualitätskontrolle (
scripts/check_dialogue_asr.py), End-Storyboard-Optical-Flow & Naht-Qualitätskontrolle (scripts/sop_check.py), Tail-Exemption für Fortsetzungssegmente (--tail-exempt) und adaptive Weitwinkel-Gesichtsretusche (scripts/face_refine_pipeline.py).v4.0 Update (2026-10, Industrielle Keyframe-Gesichtssperre gegen Deformation & Revolution des filmischen Audiomixings)
- Keyframe-Bildgenerierung + I2V-Geometrie-Gesichtssperre (Behebung von T2V-Gesichtsdeformation und Prop-Weichzeichnung) : Ein einzelnes T2V-Standbild benötigt nur 5-15 Sekunden, bei Unzufriedenheit sofort neu ziehen; es ist strengstens verboten, 8 Minuten T2V blind zu laufen zu lassen, ohne das Keyframe zu bestimmen! Nachträgliche automatische Qualitätskontrolle ist nur Schadensbegrenzung, teures Neuzeichnen behandelt Symptome, nicht die Ursache. Immer wenn ein Charakter-Nahaufnahme oder eine wichtige Prop-Interaktion vorkommt, muss zuerst das Keyframe bestimmt werden,
first_framefür den I2V-Modus injiziert werden, Frame 0 fixiert die anatomische Geometrie und Prop-Schaltung, H3 kümmert sich nur um die zeitliche Dynamik und Lippen-Synchronisation, die Gesichtsdeformationsrate sinkt von 30% auf unter 2%. Siehereferences/keyframe_i2v_guide.md.- Kinoreifes Audiomixing mit intelligentem Voice-Over-Ducking (Audio Ducking) : Prompt verbietet H3 endgültig, verzerrte Bettgeräusche zu generieren; nach der Bereinigung von Dialog und Soundeffekten wird ein einheitlicher, unabhängiger High-Fidelity-BGM über das gesamte Video gelegt, mit FFmpeg-nativem
sidechaincompressfür dynamisches Sidechain-Ducking: Die Sprachlautstärke sinkt sofort um -14dB, wenn jemand spricht, und steigt 0,3-0,5s nach Ende der Dialogzeile sanft an, für audiovisuellen Genuss wie in einer kommerziellen Kurzserie. Neues Werkzeugscripts/cinematic_audio_mixer.py.- Neues Keyframe-Gate-Werkzeug
scripts/keyframe_gate.py: Unterstützt Engineering-Level-Keyframe-Statusprüfung, ComfyUI-Repository-Synchronisation und sichere I2V-Node-Injektion.v3.2 Update (2026-10-25)
- Neuer Abschnitt §13 Wann dieses Skill aktualisieren: Sechs Auslöser, vier Dinge, die nicht hereinkommen dürfen, drei Migrationsfragen, Platzierungsregeln, Drei-Schritte-Selbstprüfung nach Änderung
- Eine Regel: Nur Mechanismen und Kriterien hinterlegen, die „nach Skriptwechsel noch gültig sind“, Projektdateien bleiben immer außerhalb des Skills
v3.1 Update (2026-10, Basierend auf 13 Segmenten / 86 Sekunden fertigem Video)
- Neuer Abschnitt §4.1 Gehorsamsgrenzen von H3 (Rückwärtszoom fehlgeschlagen, Fensterdurchgang, Bewegung außerhalb des Fensters nicht generiert, Einstellungsgröße fixiert, negative Kamerabefehle)
- Neuer Abschnitt §5.1 VRAM-Freigabe (einmal ließ ein Segment von 5 Minuten auf 33 Minuten laufen)
- §8 Entscheidungsbaum um 6 Regeln ergänzt (Endaktionen übernommen, zu viele Aktionen in einem Beat, Soundeffekte als Bettgeräusche gelegt, Nebenwirkungen von quiet-gain, F0-Fehleinschätzung)
- §12 ergänzt um vier Gradienten der Dialogposition,
cont offtrim-Abrechnung- §3 Segmentlängenempfehlung auf 175 Frames geändert (ursprünglich 124/243, veraltet)
- Korrigierte zwei alte Beispiele in der Prompt-Spezifikation, die irreführend waren: „Dialog am Ende des Beats schreiben“ sollte am Anfang des Beats sein; „Brust hebt und senkt sich alle 2,5 Sekunden“ würde als Sprachbefehl für Atemgeräusche interpretiert, entfernt
Das Skript in ein fertiges Video verwandeln: Handshake → Regieplanung → Keyframe-Validierung (I2V) → Prompt → Einreichung → Überwachung & Doppelprüfung → Sammlung → Ducking-Mix & Zusammenfügen.
v4 Kern-Erkenntnis: „Video-Generierung per Zufall + nachträgliche Qualitätskontrolle und Neuziehen“ aufwerten zu „Vorab-Kostenkontrolle durch Standbilder + I2V-Gesichtssperre + kinoreifes Ducking-Mixing“.
Eine eiserne Regel: Eine Aufgabe = ein lokales Projektverzeichnis + ein Director-Workbench-Projektname (
h3_chain/<Projektname>). Diese beiden Dinge dürfen vom ersten Segment bis zum Ende desconcatnicht geändert werden. Eine Änderung ist nicht „Datei am falschen Ort“, sondern die Fortsetzung wird direkt unterbrochen: Das Fortsetzungssegment sucht das vorherige Segment überchain.order[k-1], bei einer Namensänderung wird es nicht gefunden, das aktuelle Segment wird stillschweigend als erstes Segment neu gezeichnet, und das fertige Video wird in das Verzeichnis eines anderen Videos gelegt. Die Bindung wird in daschain-Feld vonproject.jsongeschrieben,submitvergleicht jedes Mal und lehnt bei Nichtübereinstimmung direkt ab (keine Warnung). Ein Wechsel ist nur komplett möglich: Neues Projekt + neuer Director-Workbench-Projektname, von Anfang an. Vollständige Regeln in §10.1.
0. Betriebsvertrag (Zuerst klären, wer was macht)
| Wer | Verantwortlich |
|---|---|
| Agent (vollautomatisch) | Skript lesen, Regieplanung, Keyframe-Validierung, Prompt schreiben, Preflight, Einreichung, Überwachung, Doppelprüfung, Sammlung, Bettgeräusche entfernen, Audiomixing mit Ducking, Zusammenfügen, Auslieferung, Logbuch schreiben |
| Benutzer (nur drei Dinge) | ① ComfyUI öffnen und Workflow laden, „bereit“ sagen ② Skript/Style/Keyframe-Kandidaten einmalig festlegen ③ Video abnehmen |
Sieben Dinge, die der Agent nicht tun darf
- Nicht einreichen, wenn der Workflow-Handshake nicht erfolgt ist (
wf_map.jsonexistiert nicht). - Nicht das
gate(Doppelprüfung der ersten Aufnahme) überspringen und direktfinish– das Skript wird ablehnen, versuchen Sie nicht, es zu umgehen. - Keinen State/Frame-Extraktionen/temporäre WAV-Dateien in das Skill-Verzeichnis schreiben (
paths.pyhat harte Barrieren). - Keine Verbindungen basierend auf „letzten Knoten-IDs“ ändern – nur drei Datenpakete injizieren, niemals die Verbindungen von Upscale/Endknoten berühren.
- Bei Charakter-Nahaufnahmen oder wichtigen Prop-Interaktionen nicht die Keyframe-Validierung überspringen und blind reines Text-zu-Video (T2V) laufen lassen – statische Bildgenerierung dauert nur 5-15 Sekunden, bei Unzufriedenheit sofort neu ziehen; 8 Minuten T2V laufen lassen und dann nachträgliche Qualitätskontrolle durchführen ist ein teurer Selbstmord. Zuerst das Keyframe bestimmen,
first_framefür I2V-Gesichts/Prop-Sperre injizieren! - Nicht das nächste Segment einreichen, ohne vorher Frames extrahiert zu haben, um das Bild zu sehen – Preflight prüft nur die Textstruktur, nicht das Bild. Nach der Ausgabe zuerst 4-6 Frames extrahieren, ein zusammengesetztes Bild ansehen, dann das nächste Segment einreichen; dies vermeidet auch das Problem „zu schnelles Einreichen von zwei Segmenten führt zu verschmutztem VRAM-Zustand“ (siehe §5.1).
- Projektdateien der aktuellen Aufgabe nicht gedankenlos in das Skill kopieren – Filmtitel/Charakternamen/Segmentnummern/
plan.json/assets/*.json/Prompt-Originaltext eines Segments/aktuelle trim-Abrechnung/blacklist-seed, alles im Projektverzeichnis lassen. Nur Mechanismen, Kriterien und Schreibweisen hinterlegen, die „nach Skriptwechsel noch gültig sind“. Kriterien und Platzierungsregeln in §13.
Nur in diesen vier Fällen anhalten und den Benutzer fragen: Skript mehrdeutig und beeinflusst die Storyboard-Struktur / Style oder Seitenverhältnis festlegen / Material fehlt und kann nicht durch Text definiert werden / Gleiches Segment 3x neu ziehen und immer noch nicht bestanden.
1. Kernwerkzeuge (Vollständige Produktionswerkzeugkette)
| Werkzeug | Funktion | Wichtige Unterbefehle |
|---|---|---|
scripts/h3wf.py | Workflow-Handshake: Liest die tatsächlich ausgeführten Graphen von ComfyUI, erkennt automatisch die Knotenrollen | sync show doctor |
scripts/sop_run.py | Produktion: Einreichung (inkl. Preflight), automatische Überwachung, auf fertiges Video warten | submit watch final abort |
scripts/h3proj.py | Projekt & Gate: Logbuch, Doppelprüfung erste Aufnahme, visuelle Unterschrift, Sammlung, Zusammenfügen, Restebereinigung | new status gate review finish concat residue |
scripts/keyframe_gate.py | Keyframe-Validierung & I2V-Injektion: Keyframe-Statusprüfung, ComfyUI-Repo-Synchronisation, first_frame injizieren | --project --seg --sync |
scripts/face_refine_pipeline.py | Externe Weitwinkel-Gesichtsretusche-Workflow: Bedingte Gesichtsretusche, Audio unverändert durchschleifen, sanfte Degradierung bei fehlenden benutzerdefinierten Nodes | --input --output --char-ref --dry-run |
scripts/cinematic_audio_mixer.py | Kinoreifes Audio-Ducking-Mixing: Externer unabhängiger BGM, sidechaincompress automatisches Ducking der Sprache | --input --output --bgm --volume |
scripts/check_dialogue_asr.py | Dialog-ASR-Autovergleich: VAD lokalisiert Sprachsegmente → Whisper Transkription → Vergleich mit <d> Originaltext | --file --text --seg |
scripts/sop_check.py | End-Storyboard-Bewegungsenergie & Naht-Ähnlichkeits-Qualitätskontrolle: 8-Grid-Kontakttableau, Bewegungs-Optical-Flow-Ratio, Keyframe-Vergleich | --video --seg |
scripts/shisei_pose.py | (Optional) Kampf-/Konfrontations-Posen: Multi-View-Posen-Retrieval & Lineart-Extraktion | --search --duo --get --view |
Interpreter fest auf venv mit cv2:
C:/Users/windows/.workbuddy/binaries/python/envs/default/Scripts/python.exe (im Folgenden PY)
2. Schritt 0: Workflow-Handshake (Erstes bei jedem Arbeitsbeginn, nicht überspringbar)
Warum nicht festschreiben: Der Workflow des Benutzers wird sich aktualisieren (dritte Aufnahme hinzufügen, Upscale-Abmessungen ändern, Ausgabepräfix ändern). Wenn sich die Knoten-ID ändert, würde eine fest codierte „Verbindungsreparatur“ eine funktionierende Kette kaputt machen – das war die Grundursache für jeden Fehler in v2.
Kernaussage: Der Benutzer wird jederzeit Parameter auf der Leinwand anpassen (Upscale-Größe ändern, Modell wechseln, Sampler-Schritte einstellen). Die Generierung muss seine aktuellen Werte verwenden.
submit überprüft jedes Mal zuerst die gespeicherte Version der Leinwand (h3wf.refresh_if_stale):
Wenn sich die Datei-Mtime geändert hat, wird der Graph neu gelesen und die geänderten Parameter werden einzeln ausgegeben ([wf ] Erkannt: N Parameteränderungen).
Die h3_data, seed, filename_prefix von rack/desk/cast werden zur Laufzeit injiziert und zählen nicht als Benutzeränderungen, sie sind ausgenommen.
Es gibt jedoch eine API-Beschränkung, die nicht umgangen werden kann und dem Benutzer aktiv mitgeteilt werden muss:
Der Leinwandzustand von ComfyUI wird nur nach dem Speichern des Workflows (Strg+S) in
ComfyUI/user/default/workflows/*.json geschrieben. Ungespeicherte Leinwandänderungen können von keiner Schnittstelle gelesen werden.
Daher muss dem Benutzer zu Beginn gesagt werden: Nach Parameteränderungen bitte Strg+S drücken.
Wenn der Benutzer nach der Änderung noch einmal Queue gedrückt hat, wird dieser Ausführungsgraph in /history landen und kann vom zweiten Kriterium erfasst werden.
Aktion:
- Zuerst den Benutzer erinnern: ComfyUI Desktop öffnen, den zu verwendenden Workflow laden, warten, bis er „fertig“ sagt.
- Voraussetzung:
syncliest aus ComfyUI/historydie letzte erfolgreich abgeschlossene Videoaufgabe.- Gerade Workflow gewechselt / frisch installiert → Benutzer bitten, manuell eine Aufgabe in der Oberfläche auszuführen (egal welches Segment, Hauptsache erfolgreich), dann
sync. - Noch nie erfolgreich gelaufen → Fallback auf UI-Datei:
h3wf.py sync --from-ui "<Workflow>.json"(ComfyUI muss laufen).
- Gerade Workflow gewechselt / frisch installiert → Benutzer bitten, manuell eine Aufgabe in der Oberfläche auszuführen (egal welches Segment, Hauptsache erfolgreich), dann
- Alive-Check + Identifikation:
$PY scripts/h3wf.py show # Nur Ergebnis anzeigen $PY scripts/h3wf.py sync # Nach erfolgreicher Identifikation als Grundlage für diese Produktion speichern - Ausgabe interpretieren:
rack/desk/cast/seed/finalfünf erforderliche Rollen müssen alle einen Wert haben; fehlt eine, hat der Workflow den Klassennamen eines Knotens geändert. Diese Zeile dem Benutzer zeigen, nicht selbst raten.[note]erklärt, wie bei mehreren Kandidaten ausgewählt wurde. Dieselbe Ausgabe liefert auch drei Dinge. Fehlt eines davon, führt dies zu Problemen in späteren Schritten:- Projektname (Director-Workbench
chain.name):submitverwendet ihn, um das fertige Video in das Verzeichnis vonh3_chain/zu legen, und beim erstensubmitwird er als Bindung inproject.json.chaingeschrieben. Anzeige „—“ bedeutet, dass die Director-Workbench keinen Projektnamen hat, dann wirdsubmitauf den Skill-Projektnamen zurückfallen und eine Warnung ausgeben – das entspricht dem Starten eines anderen Videos (und es wird keine Bindung geschrieben). Nach der Bindung wird eine Namensänderung abgelehnt, siehe §10.1. - Präfix der ersten Aufnahme:
watch/gate --latesterkennt nur Dateien der ersten Aufnahme anhand dieses Präfixes. Wenn „—“ angezeigt wird, auf das vollständige Präfix zurückfallen, nach Abschluss der gesamten Kette könnte die Upscale/Endaufnahme als erste Aufnahme für die Doppelprüfung gewertet werden. [WARN]Sammlungspfad: Fehlt die „Segmentende-Ablage“ oder ihr „Sequenzanker“ in der Verkabelung, wird das fertige Video nicht zur Director-Workbench zurückkehren, das nächste Segment kann nicht anschließen.
- Projektname (Director-Workbench
- Wenn ComfyUI nicht läuft, ist ein Headless-Start erlaubt (Port 8188, beeinträchtigt nicht das Desktop-Programm):
Aber bevorzugt die vom Benutzer selbst geöffnete Instanz verwenden, der Knotenstatus basiert auf seiner Oberfläche.cd "D:/Comfy-Desktop/ComfyUI-Installs/ComfyUI (1)/ComfyUI" ".venv/Scripts/python.exe" main.py --port 8188 \ --input-directory "D:/Comfy-Desktop/ComfyUI-Shared/input" \ --output-directory "D:/Comfy-Desktop/ComfyUI-Shared/output" \ --enable-assets --disable-auto-launch
Was tun, wenn sich der Workflow geändert hat: h3wf.py doctor listet auf „Knoten-ID geändert / Präfix geändert / Projektname geändert / Rolle fehlt“.
Bestätigung einer beabsichtigten Aktualisierung → h3wf.py sync --force erneuter Handshake, alle folgenden Einreichungen verwenden automatisch den neuen Graphen.
submit überprüft jedes Mal den Fingerabdruck bei Nichtübereinstimmung wird direkt abgelehnt (wird nicht heimlich mit dem alten Graphen über Nacht laufen).
Beim Handshake wird ein history_seq-Wasserzeichen gespeichert: Ausführungsgraphen, die älter sind als dieses, gelten nicht als Drift (alte Aufzeichnungen, die vor dem Leeren von /history übrig waren),
nur Graphen, die nach dem Handshake neu gelaufen sind und abweichen, werden abgelehnt.
3. Schritt 1: Regieplanung (Zwingend, erstes, was mit dem Skript passiert)
Nicht direkt mit dem Skript Prompt schreiben. Zuerst das director-advisor-Skill laden, um einen vollständigen Storyboard-Plan zu erstellen:
- Fünf Elemente extrahieren: Emotionale Grundstimmung / Dramatischer Beat / Beziehungen / Raum / Aktion
- Rhythmusskelett festlegen: Anzahl der Einstellungen, Spannungskurve (nur einen Höhepunkt), Eröffnungseinstellung und Abschlusseinstellung
- Einstellung für Einstellung entwerfen: Einstellungsgröße = emotionale Distanz, Kamerafahrt = emotionale Bewegung, eine Aktionseinheit pro Einstellung, Dauer 1-3s (max 5s), jede Einstellung mit einer Entwurfsbegründung
- 1-2 reale Filmfall-Referenzen anhängen (nur aus
director-advisor/references/master_cases.md)
Dann gemäß references/directing_bridge.md in H3-Segmente umrechnen und Segmentplanungstabelle speichern:
{"name": "Filmtitel", "segs": [
{"seg": "seg01", "length": 175, "shots": "1-4", "dialogue": false,
"hook": "Erstes Segment: Totalenaufbau des Raums", "sfx": true, "event": "Sie betritt das Steinhaus und stellt die Lampe ab"}
]}
length: 175 (≈7,29s, 3-4 Einstellungen) ist der empfohlene Wert; 124 (≈5,17s, 1-2 Einstellungen) / 243 (≈10,13s, 2-4 Einstellungen) sind auch verwendbar. Schlüsselformel: Netto-neues Bildmaterial = length − cont_frames. Bei cont_frames=5 bleiben von 175 Frames netto 170 Frames (7,08s) übrig, von 124 Frames bleiben netto 85 Frames (3,54s) – bei gleichem Fortsetzungs-Overhead verdoppelt sich der Nettoertrag bei 175, das Rendering dauert nur 4–4,5 Minuten, der Wendepunkt für die Kosteneffizienz. Segmente mit Dialog verwenden ebenfalls 175, nicht 243: Je länger das Segment, desto wahrscheinlicher stößt der Dialog an das Ende (siehe §12 Dialog-Zeitachsen-Eisernes Gesetz).hook: Fortsetzung zum vorherigen Segment (Haltung/Blick/Lichtübernahme). Kein hook bedeutet, das Segment ist falsch aufgeteilt.dialogue/sfx: Bestimmt, welche Elemente das Audio-Gate prüft (Segmente ohne Dialog prüfen auf Stille, Segmente ohne Soundeffekte deaktivieren--fx).- Validierung:
$PY scripts/h3proj.py plan --check
Ein Segment = ein Ereignis, innerhalb eines Segments können mehrere Einstellungen sein ([Beat N] ist die Einstellungsposition, schreibe „Hart geschnitten zu…“ H3 schneidet entsprechend);
Raum (Karte) und Hauptereignis können nicht gewechselt werden. Der Schnittpunkt muss auf einer Aktion liegen, nicht gleichmäßig auf Sekunden verteilt.
Beim Schreiben des Storyboards gleichzeitig zwei Inhaltsbarrieren durchlaufen (siehe references/vividness.md):
- Vier logische Fragen: Was will die Person in diesem Moment? Wo ist sie und zu wem ist sie ausgerichtet? Ist die Zeit/das Licht kontinuierlich? Ist die Kausalität der vorherigen Aktion unterbrochen?
- Lebendigkeits-Dreiklang: Jeder Beat muss mindestens eine „Aktionsursache + Umgebungsreaktion + Materialhaptik“ haben, nicht nur „steht da und redet“.
3.1 Optionale Verstärkung: Hochwertige Kampf- & Duell-Posen-Pipeline (Shisei Pose Guidance)
Wenn das Skript Nahkampf, Waffenkampf, Duell-Over-Shoulder-Konfrontation oder komplexe körperliche Verwicklungen beinhaltet, um typische Probleme von Videomodellen wie „weiche Aktionen, anatomische Deformation, 180°-Achsen-Umkehrung“ zu vermeiden, die lokale Shisei-Posen-Führung einbinden (siehe references/shisei_combat_pipeline.md):
- Posen-Retrieval: Lokales Retrieval-Skript verwenden, um 55 Duell-Posen-Paare und 288 Einzel-Posen abzufragen:
python scripts/shisei_pose.py --duo --search "Nahkampf" - Multi-View-Lineart-Extraktion: Entsprechend der Regie-Kameraposition Linearts aus 5 Hauptperspektiven (
frontFrontalansicht /sideSeitenansicht /diag45° Schrägansicht /aboveAufsicht /belowUntersicht) in das Projektverzeichnis exportieren:python scripts/shisei_pose.py --get D001 --view diag --out references/poses - Keyframe-Skelett-Ankerung: Das extrahierte Posen-Lineart mit dem Charakterblatt (
sal_character_sheet.jpgetc.) kombinieren und in einen Bildgenerator (Imagen / Qwen) einspeisen, um ein 100% kompositionsgetreues Keyframe zu erzeugen, dann in MiniMax H3 injizieren, um räumliche Drift und weiche Aktionen zu verhindern.
3.2 Zwingende Prozessschritte: Storyboard-Keyframe-Bildgenerierung & I2V-Geometrie-Gesichtssperre (Keyframe Gate)
Industrielles Eisernes Gesetz (höchste Priorität) : Bei Segmenten mit frontaler/halbnah-Charakter-Nahaufnahme oder wichtiger Prop-Interaktion (wie Uhrendemontage, Waffe halten, Geld zählen, Stempeln), ist reines Text-zu-Video (T2V) blindes Laufen strengstens verboten! Der Prozess „Keyframe-Bildgenerierung validieren ➔ Bild-zu-Video (I2V) Gesichtssperre gegen Deformation“ muss ausgeführt werden.
- Kernlogik:
- Ein statisches Standbild benötigt nur 5 ~ 15 Sekunden/Bild, die gesamte Latent-Raum-Auflösung kann auf Gesichtszüge, Haar und Prop-Mikrostrukturen konzentriert werden, bei Unzufriedenheit sofort neu ziehen;
- Die Videorenderingzeit für ein einzelnes Segment beträgt 4 ~ 8 Minuten. Reines Text-zu-Video ohne physikalische Ankerpunkte neigt stark zu anatomischer Drift, die nachträgliche „automatische Qualitätskontrolle“ und Neuziehen kosten das 40-fache und behandeln Symptome, nicht die Ursache;
- Nachdem das ausgewählte Keyframe-Bild in den
first_frame-Port desMiniMaxH3ImageToVideo-Nodes injiziert wurde, wird Frame 0 als geometrischer Ground Truth fixiert, das Modell muss keine Struktur erraten, seine gesamte Aufmerksamkeit gilt der „Aktionssteuerung und Mundwinkel-Ausrichtung“, die Gesichtsdeformationsrate sinkt von 30% auf unter 2%!
- Ausführungsablauf:
- G0 Charakter-Asset-Karte: Vor Arbeitsbeginn nach
references/character_sheet_standard.md2+3-Kopf-Entkopplungs-Charakter-Setup-Karten vorbereiten; - G1.5 Keyframe-Bildgenerierung validieren: Nach Fertigstellung des Storyboards mit einem Bildgenerator schnell ein 16:9-Keyframe-Film-Standbild generieren, Gesichtszüge, Augen-Fokus und Prop-Korrektheit überprüfen;
- Endgültige Version speichern: Nach bestandener Validierung in
<Projekt>/segments/<seg_id>_keyframe.png(oder.jpg) speichern; - Automatische Erkennung & I2V-Mounting: Wenn die Pipeline ein vorhandenes Keyframe-Bild erkennt, wird es über
scripts/keyframe_gate.pyautomatisch nach ComfyUI synchronisiert und mit demfirst_frame-Port verbunden. Wenn nicht erkannt, automatisch sanft auf reinen Text-Antrieb degradieren. Siehereferences/keyframe_i2v_guide.md.
- G0 Charakter-Asset-Karte: Vor Arbeitsbeginn nach
4. Schritt 2: Prompt schreiben (Standard = references/prompt_standard_v2.md)
- Sieben-Teile-Gerüst,
[Beat N],<Audio N>Stimmkarten,overall_soundscapedrei Soundebenen, kein Buchstabe am Segmentnamen darf geändert werden. - Prompt in
segments/<seg>.txtschreiben (reiner Prompt-Text, keinen Codeblock einpacken). - Stimmkarte: Die
voice_card.jsondes Projekts hat Priorität (h3proj.py newhat die Vorlage bereits kopiert), segmentübergreifend wortgleich. - Preflight muss nicht separat ausgeführt werden:
submitruft interncheck_prompt_v2.check()auf, bei FAIL wird direkt abgelehnt. Vorab separat ansehen:$PY scripts/check_prompt_v2.py --file segments/seg01.txt --length 243
Format-Spickzettel (Details in der Spezifikation): <<Subject N> alle mit Berechtigung=; Null-Toleranz für Emotionswörter;
Jeder Beat Soundeffekt: einzeln benennen + „Nur diese N Arten, keine anderen Geräusche“ Abschlussformel; Dialogende ≥1,0s vor Segmentende; ein Satz Dialog pro Segment.
Negations-Bumerang-Effekt (getestet, zweimal darauf reingefallen): H3 behandelt die Entitätsnamen in Verbotsformeln als positive Prompts zum Zeichnen.
Wenn in der Fehlervermeidung steht „Strengstens verboten, Wasserhosen, Wassersäulen, Springbrunnen zu generieren“, erscheint im Bild eine weiße Wassersäule;
Wenn in der Aktionsbeschreibung steht „Helm-Vorderkante nach oben heben“, erscheint über dem Kopf des Protagonisten ein transparenter Helm.
Regel: Wenn etwas nicht erscheinen soll, seinen Namen vollständig aus dem Satz löschen und durch eine positive Beschreibung des gewünschten Bildes ersetzen
(z.B. „Vertikale Aufnahme von oben nach unten, nur runde, nach unten gewölbte Vertiefung und schwarze Silhouette, die ins Wasser sinkt“), anstatt „nicht X, kein X“ zu schreiben.
Fehlervermeidung behält nur abstrakte Einschränkungen (kein Wasserzeichen/keine Untertitel/keine deformierten Hände/keine Flammeneffekte).
Fortsetzungs-Latent verzerrt den Charakter im ersten Beat (Häufigster und teuerster Fehler in diesem Projekt, 5 Mal reproduziert) :
Beim Segment mit --cont erzeugt der erste Beat stabil eine große, schwarz gekleidete, langhaarige Rückenfigur, unabhängig davon, ob –
Der letzte Frame des vorherigen Segments „Aufnahme von unten auf Wasseroberfläche + schwarze Silhouette fällt ins Wasser“ (seg02) oder „Chen Mo’s Gesicht Nahaufnahme, schwarzes T-Shirt“ (seg03) war.
Das Referenzbild wurde korrekt injiziert ([rack] 1 Asset: Chen Mo→Chen Mo.png), der Text hat die Kleidung Wort für Wort beschrieben, alles unterdrückte es nicht.
Bei gleichem Prompt, gleichem Referenzbild, gleichem Seed-Bereich, nach Wechsel auf --cont off wurden beide Male wieder normal (seg02 erster Beat zurück zu Chen Mo im schwarzen T-Shirt mit kurzen Haaren; seg03 erster Beat zurück zu reiner Totalen Stadtansicht).
Beurteilung & Behandlung:
- Projektschlussfolgerung: Fortsetzung beibehalten, aber nur 5 Frames pinnen (
cont_frames: 5inproject.json, entspricht 0,21s). Der Benutzer möchte nur „ein paar Frames, um Kontextkonsistenz zu gewährleisten“, 39 Frames (1,625s) sind zu verschwenderisch, später muss man auch noch segmentweise den Kopf abschneiden. Bei reinen Hartschnitten (Strand → Tür, solche Ortswechsel im Skript)--cont offverwenden. Ob die Anker-Punkt-Verschmutzung bei 5 Frames immer noch auftritt, muss durch Tests dokumentiert werden; sobald der Charakter im ersten Beat falsch ist, zuerst--cont offversuchen. - Allgemeines Kriterium: Fortsetzung ist nur nützlich, wenn „derselbe Raum, dieselbe Kameraposition, direkte Aktionsfortsetzung“ vorliegt;
Sobald Kleidung/Körperbau/Frisur des Charakters im ersten Beat falsch ist, zuerst
--cont offfür einen Testlauf verwenden (erste Aufnahme dauert nur 2 Minuten), das ist viel schneller als den Text zu ändern, Textänderungen sind wirkungslos. - Beim Aktivieren der Fortsetzung wird
[cont ] Übernahme von clip_xxxx (…)ausgegeben; bestätige den ersten Frame, dann entscheide, ob die Fortsetzung beibehalten werden soll.
4.1 Gehorsamsgrenzen von H3 (Vor dem Prompt-Schreiben unbedingt lesen)
Dies sind harte Grenzen, die durch Tests ermittelt wurden. Textänderungen helfen nicht, Seed-Änderungen helfen auch nicht, sie können nur durch die Schreibweise umgangen werden. Alle basieren auf kontinuierlichen Aufzeichnungen von 13 Segmenten / 86s fertigem Video, keine Spekulation.
| Was du willst, dass es tut | Testergebnis | Welche Schreibweise stattdessen |
|---|---|---|
| Rückwärtszoom / Wegzoomen / Vorwärtszoomen (Kamerafahrt mit Positionsänderung) | 4 Mal komplett fehlgeschlagen. Selbst „nur bis zum sichtbaren Schiebebalken anhalten“ zoome trotzdem aus dem Fenster, eine andere Innenwand wird sichtbar | Nur Schwenken verwenden (gleiche Position, nur Winkel ändern: erst nach unten auf den Boden schwenken, dann wieder nach oben schwenken), oder direkter Hartschnitt |
| Kamera durchquert Fenster/Loch, um ins Innere zu gelangen | Die Tür wird beiläufig geöffnet. Selbst mit „Tür bleibt geschlossen, nur durch das leere Fensterloch eintreten“ funktioniert es nicht | Hartschnitt innerhalb des Segments ins Innere, beim Zusammenbau den Segmentkopf bis zum Schnittpunkt abschneiden; zuverlässiger als jede Kamerafahrt-Transition |
| Objekte außerhalb des Fensters bewegen sich (Auto fährt) | Wird nicht generiert. Selbst mit „Weiße gestrichelte Linien kommen drei pro Sekunde entgegen“ funktioniert es nicht (Bereich außerhalb des Fensters: Frame-Differenz statisch 1,26 / mit Bewegung 4,15, mit bloßem Auge nicht erkennbar, dass sich etwas bewegt) | Fahrgefühl durch nachträgliches Motorgeräusch + leichte Karosserievibration erzeugen, nicht auf die Generierung verlassen |
| „Einstellungsgröße ändert sich nicht / nicht näher heranzoomen / nicht zoomen“ | Niedriger Gehorsam, im zweiten Teil wird trotzdem näher gezoomt | Ändern zu positiver Beschreibung „Das Bild muss immer das gesamte X enthalten (Oberkante des Türrahmens bis zur Trittfläche)“ – durch „Was unbedingt enthalten sein muss“ steuern |
| „X nicht erscheinen lassen / nicht X“ | Kehrt sich um, X wird stattdessen gezeichnet (gleicher Negations-Bumerang-Effekt wie oben) | Den Namen von X vollständig aus dem Satz löschen |
| Mehr als 2 Aktionen im selben Beat | Jede wird nur zur Hälfte ausgeführt, oder die „uninteressanteste“ wird direkt übersprungen (Türschließen verliert gegen „beide Hände auf das Lenkrad legen“) | Maximal zwei Aktionen pro Beat; vier Aktionen bedeuten, den Beat aufzuteilen oder zu löschen |
| „Etwa bei Sekunde X zu Ende sprechen / bei Beat N am Anfang ausgeben“ | Zeitbeschreibungen völlig unwirksam | Die Zeitachse von H3 wird durch die Reihenfolge der Textereignisse bestimmt, nur die Position der Blöcke kann angepasst werden |
| Mehrere Zeitabschnitte mit Kamerafahrt in einem Segment (0-3s fahren, 3-5s anhalten) | Qwen3-VL denkt fälschlicherweise, die Kameraposition würde mitten im Segment gewechselt, was zu einem blinkenden Szenenwechsel im Segment führt | Ein Segment [Shot 1] enthält strikt nur 1 Kamerafahrt-Befehl, der das gesamte Segment von Anfang bis Ende durchzieht |
Aufstehen aus einem Stuhl in einer halbnahen Einstellung schreiben (rises from chair) | Der Kopf der Figur ragt über den oberen Bildrand hinaus, die Hälfte des Kopfes wird abgeschnitten | Für explosive Szenen leans sharply forward across table with veins bulging (wütend nach vorne lehnen, sich auf den Tisch stützen) verwenden |
| Mehrere Gesichtszüge (Augenbrauen/Augen) oder Negativsätze in einer Profil-Szene schreiben | Das Modell versucht, beide Augen zu zeichnen oder wird durch den Negations-Bumerang-Effekt gezwungen, den Kopf zur Kamera zu drehen | Strengstens verboten, mehrere Gesichtszüge und turn/camera-Wörter zu verwenden, nur positive statische Profil-Beschreibungen, am Ende mit TailLock-Latent-Klammer fixieren |
| Ruhige Stimmcharakteristik führt dazu, dass Höhepunkts-Rufe nicht herauskommen | Der ruhige Tonfall der Referenz-Audio-Aufnahme sperrt den Latent-Raum der Audio-Energie | T8mars-Protokoll anwenden: Dem Dialog ein Brüllen-Para-Language-Präfix voranstellen und innerhalb von 0,4s einen physikalischen Aufprall-Transienten-Soundeffekt injizieren, um die Audio-Energie zu explodieren (+10dB) |
In einem Satz: H3 hört auf „Was muss im Bild sein“, nicht auf „Was die Kamera nicht tun soll“; es hört auf „Reihenfolge der Ereignisse“, nicht auf „Sekunden“.
Fortsetzungssegmente haben eine weitere exklusive Grenze: Sobald das Fortsetzungs-Latent endet (ein fester Frame-Bereich), setzt das Modell am ehesten auf die Komposition des Referenzbildes zurück. Wenn genau zu diesem Zeitpunkt ein Hartschnitt erfolgt, erhält es die Gelegenheit, „eine neue Einstellung zu beginnen“ – in Test seg02 folgten die ersten 38 Frames der Version 1 perfekt, und mit Frame 39 verschwand die gesamte Figur und wurde durch die menschenleere Totale des Referenzbildes ersetzt. Daher: In Fortsetzungssegmenten keine Hartschnitte schreiben, eine einzige durchgehende Einstellung + gleiche Kameraposition ist am stabilsten; für einen Einstellungswechsel ein separates Segment erstellen.
5. Schritt 3: Generierung, Überwachung, Sammlung (Ein Befehl pro Sache)
# ① Einreichen (Preflight + Projektregistrierung + Fortsetzung + Seed-Auswahl + Baseline aufzeichnen)
$PY scripts/sop_run.py submit --seg seg01 --assets Material.json [--length 243] [--silent]
# Material.json: {"Charakter1":"cglide/<Projekt>/Charakter1.png", "Szene":"cglide/<Projekt>/Szene.png"}
# --dry-run Nur zusammenbauen, nicht einreichen (neues Segment nicht registrieren, Projektdaten nicht ändern), und ComfyUI die Pflichtfelder des Graphen validieren lassen
# --chain <Projektname> Überschreibt den chain.name im Handshake-Graphen (muss dem gebundenen Wert entsprechen, sonst Ablehnung)
# --rebind Nur verwenden, wenn die Director-Workbench wirklich gewechselt werden soll (Neubindung, Fortsetzung wird von hier an unterbrochen)
# --cont auto|off|<Fortsetzungssegment-Pfad> Standard auto = an vorheriges Segment anschließen, off = als erstes Segment behandeln
# --allow-nocont Verwenden, wenn dieses Segment wirklich einen unabhängigen Anfang haben soll: Erlaubt, dass "kein Fortsetzungssegment gefunden wird"
# ② Überwachung (Empfohlen im Hintergrund: Dieser Schritt wartet, bis die erste Aufnahme fertig ist, und führt dann sofort die Doppelprüfung durch)
$PY scripts/sop_run.py watch --seg seg01 --timeout 3600
**Bei Fehlererkennung muss die GPU sofort freigegeben werden.** Sobald die erste Aufnahme fertig ist, startet die zweite Aufnahme; wenn man auf das vollständige Qualitätskontrolle-Ergebnis (Frame-Extraktion+visuelle Quantifizierung, etwa zehn Sekunden) wartet, um abzubrechen, läuft die dritte Aufnahme/Upscale oft schon und die Rechenleistung wird verschwendet. Daher ist `watch` jetzt zweigeteilt:
- **Sofortige Audio-Schnellprüfung nach Fertigstellung** (`_fast_audio_gate`)
…
[truncated for translation]