Eingebettete Untertitel
Ein Katalog, vorne ausgewählt (CATALOG.md — 17 Identitäten; die drei Engines dahinter sind Backend-Details). Standard (Standard) baut eine saubere, wörtliche Rail (untere Drittel-Untertitel, die den meisten Text tragen) + einen Embed-Höhepunkt, der am Höhepunkt in die Szene hinter dem Subjekt compositet wird. Cinematic (Kino) ist reines Embed — keine Rail, jeder Untertitel wird hinter dem Subjekt compositet (Hero-Typografie, Akkumulation, Okklusion als Effekt). Theme (Thema) ist eine vollständige thematische Verfassung — Körperparadigma × Hero-Setpiece × Front-Effekt × Tafel-Reaktion, zusammengesetzt aus Registern (themes/README.md): ordnance terminal neonsign stardust stomp. Die meisten Erklär-/Voiceover-Videos verwenden Standard; Embed ist der seltene, verdiente Höhepunkt — jedes Wort einzubetten ist der häufige Fehler; Theme ist für VFX-Niveau-Anfragen („炸“, „特效“, „wie AE gemacht“).
Betriebsablauf (Kurzfassung)
Die handwerkliche Prosa unten ist lang; die Pipeline selbst ist kurz — und alles Deterministische wird berechnet oder kompiliert, nie von Hand geschrieben:
- Entscheidungs-Gate (schlechte Clips ablehnen) → EINE Identität aus CATALOG.md auswählen (17 Identitäten; Engine/Compiler werden per Lookup abgeleitet — niemals eine Modus-/Kategoriefrage stellen)
hyperframes init(überspringen, wenn das Projektverzeichnis bereits mit dem Video existiert —matte.cjs/transcribe.cjsübernehmen jedes Video im Verzeichnis als source.mp4) →bash scripts/prepare.sh <projekt>(Matte ∥ Transkription ∥ Audio-Envelope parallel, dann Safe-Zones v2 mit Szenenpalette/Optik/Beleuchtung — ein Befehl, nichts vergessen)- Ein kleines JSON mit kreativen Entscheidungen erstellen (zuerst
safe-zones.jsonlesen): Cinematic →plan.json→fill-timings.cjs→fit-fonts.cjs→make-composition.cjs; Theme →theme.json→make-theme.cjs(Rail/Panel/Poem/Takeover-Paradigmen;anchorist die ruhige Rail-Voreinstellung) - Visuelle Qualitätskontrolle:
node scripts/preview-frames.cjs <projekt>→ getreue Composite-Vorschauen in ~2s/Frame (kein Rendern). Abschnitt „Visuelle Qualitätskontrolle“ prüfen, bevor für ein Rendern bezahlt wird. render-and-composite.sh→ Gates (Timing / Okklusion+Hero / Überlauf / Übergabe) →final.mp4
Wichtige Regeln, die oft übersehen werden:
- Rail (Standard) + Embed (Promotion).
drop(Füllwort, nicht angezeigt) /rail(wörtlicher unterer Drittel-Untertitel, vorne, trägt den meisten Text) /embed(ein Höhepunktwort, das hinter dem Subjekt compositet wird). Der Standard-Modus macht beides, wobei nur die Höhepunkte eingebettet werden. Siehe § Untertitel-Modell. - Das Video wird UNBERÜHRT ausgeliefert (Standard/Cinematic; der PLATE-Budget des Theme-Modus ist die einzige genehmigte Ausnahme — registergesteuerte Reaktionsbeats (Ladungsabdunkelung, Punch, Schütteln, Körnung), die pro Theme-DNA definiert und NACH dem Matte-Composite angewendet werden, sodass Subjekt+Text+Plate sich als ein Frame bewegen) — Untertitel sind das Einzige, was hinzugefügt wird; die Matte lässt das Subjekt lediglich die Embed-Spur verdecken. Niemals das Filmmaterial farblich bearbeiten/neu einfärben/Scanlines hinzufügen.
- Zwei Regelwerke: Rail → references/rail.md (dünn), Embed-Handwerk → references/composition-craft.md (reichhaltig, nur Embed). Nach Bedarf überfliegen.
Untertitel-Modell — Rail + Embed
Jeder gesprochene Satz ist eines von drei Dingen:
| Was | Wie es angezeigt wird | |
|---|---|---|
| drop | Füllwort — äh/öhm, Stottern, Selbstkorrekturen | nicht angezeigt |
| rail | der Standard — gewöhnlicher gesprochener Inhalt (wörtlich) | sauberer unterer Drittel-Untertitel, vorne, lesbar. Ein Schlagwort kann eine Inline-emphasis-Hervorhebung erhalten (Akzentfarbe / aktives Wort-Pop) — es bleibt auf der Rail. |
| embed | ein beförderter Höhepunkt — der Hauptbeat | ein großes Wort, das hinter dem Subjekt compositet wird (Matte-Okklusion), mit gestaltetem Ein- und Ausgang |
Die Rail trägt den Großteil des Texts; Embed ist der seltene, verdiente Höhepunkt. Seltenheit gilt pro Beat/Block, nicht pro Clip: ≤1 Hero pro Block (Gedanke), niemals zwei gleichzeitig sichtbar, mindestens ein Beat Abstand zwischen Hero-Fenstern (der Compiler warnt unter 0,6s). Ein kurzer Clip → normalerweise 1–2; eine lange Erklärung → ~einer pro Abschnitt. Bei mehreren Helden wird der größte erstellte zum APEX (nur er erhält das vollständige Lockup-Embed + Breitenanpassungs-Raise); kleinere sind MINOR-Peaks, die in ihrer Spalte als überdimensionierte Hervorhebungszeilen (Vordergrund, gedämpfte Bewegung) mitlaufen — nicht jeder Beat braucht die Matte-Inszenierung, und genau das macht den Apex zu einem Ereignis. Jedes Wort einzubetten ist immer noch der häufige Fehler.
Rail-Oberflächenidentitäten bauen genau dies auf (Rail = rail.html, Embed = der Höhepunkt in index.html). Spaltenfluss-Identitäten lassen die Rail weg und machen alles Embed-artig — empfehlen Sie sie nur für stimmungsbetonte statt wörtliche Anfragen, niemals für Erklär-/Voiceover-Videos, bei denen die Worte lesbar sein müssen (CATALOG.md codiert dies pro Identität).
Schritt 0 — EINE Identität aus dem KATALOG auswählen
Ein Frontend, drei Engines dahinter. Der Benutzer wählt eine IDENTITÄT aus CATALOG.md (17 Einträge: 12 klassisch + 5 thematisch); die Engine, der Compiler und die Autorendatei werden durch Lookup aus der Katalogzeile abgeleitet. „Standard vs. Cinematic vs. Theme“ niemals als Frage stellen — das sind Backend-Namen (ein Produkt hat eine UX, auch mit mehreren Engines). Der Katalog codiert alles, was für das Routing nötig ist: Leseoberfläche, Stimme, Empfehlung-für, Szenenanforderungen, Adjazenznotizen für die wirklich ähnlichen Paare (loud↔ordnance, neon↔neonsign, cream↔stardust).
Vorgehen: Den Clip sondieren → 2–3 Identitäten aus dem Katalog in die engere Wahl nehmen → EINE mit einer einzeiligen Begründung empfehlen → der Benutzer wählt aus → die Datei dieser Identität erstellen. Identitäten sind Engine-gebunden (keine Querkombinationen; das Öffnen einer ist ein Validierungsereignis — siehe dna/README.md).
Präsentieren Sie immer Ihre Empfehlung und lassen Sie den Benutzer wählen, bevor Sie etwas erstellen. Nicht stillschweigend eine Voreinstellung verwenden.
(Die vollständige Identitätstabelle befindet sich in CATALOG.md — die einzige Quelle der Wahrheit für das Routing. Die Engine-Dokumente unten beschreiben den Autorenvertrag jedes Backends.)
Empfehlungsheuristik: Verwenden Sie die „Kurzlisten-Heuristiken“ in CATALOG.md — sie sind auf Identitätsebene (z. B. „炸“ kuratiert ordnance/stomp/terminal/loud und wählt basierend darauf, WAS explodieren soll), niemals auf Kategorieebene. Unsicher → anchor.
- Cinematic →
plan.jsonfür eine feste Vorlage schreiben, kompiliert vonmake-composition.cjs. - Theme → themes/README.md lesen,
theme.jsonerstellen,scripts/render-theme.shausführen (kompiliert + rendert + Tafel-Reaktion → final_fx.mp4).
Entscheidungs-Gate — ZUERST AUSFÜHREN
Das Video sondieren und die Szene klassifizieren, bevor ein Modus gewählt wird.
ffprobe <video.mp4> # Spezifikationen
ffmpeg -ss <t> -i <video.mp4> -vframes 1 sample.png # bei 20/50/80%
Die Samples lesen. Ablehnen, wenn:
- Mehrere Sprecher / harte Schnitte (jede Einstellung einzeln rendern oder ablehnen)
- Kein menschliches Subjekt (dieser Skill ist für Sprechervideos)
- Unter 3 Sekunden, keine Sprache, oder Gesicht nie deutlich sichtbar —
transcribe.cjswarnt, wenn Audio nahezu still ist (Whisper halluziniert Wörter wie „Vielen Dank.“ über Stille); dies beachten und ablehnen, anstatt erfundene Wörter zu untertiteln - Quelle hat bereits eingebrannte Untertitel / schwere Textgrafiken — ein zweites Untertitel-System erzeugt Konflikte, und das Filmmaterial wird unverändert ausgeliefert (kein Überdecken/Inpainting). Eingebrannter Text erscheint oft nur mitten im Clip: eine 1fps-Kontaktabzüge erstellen (
ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png), nicht 3 Einzelframes vertrauen. - Transkription ist Müll — nicht-muttersprachliche/stark akzentuierte Sprache kann in zuversichtlichen Unsinn transkribiert werden.
transcript.jsonvor dem Erstellen auf Plausibilität prüfen; wenn es sich nicht wie Sprache anhört, einmalWHISPER_MODEL=mediumversuchen, sonst ablehnen (eine wörtliche Rail aus erfundenen Wörtern ist schlimmer als keine Untertitel). - Hektische Handkamera mit schneller Bewegung (Matte flackert)
Pre-Flight-Überprüfungen (kosten nichts, verhindern die schlimmsten Fehler)
- Schnittmengen-Überprüfung. Einzelbilder bei 20 %, 50 %, 80 % entnehmen. Wenn ein anderes Subjekt/Szene erscheint, den Clip vor dem Schnitt zuschneiden.
- Letterbox-/Pillarbox-Überprüfung. Schwarze Balken im ersten Frame? Sicheren Inhaltsbereich berechnen und die Untertitelplatzierung darin einschränken.
- Luminanz-Überprüfung. Die durchschnittliche Luminanz des Untertitelbereichs abtasten —
unter 60→ heller Text bleibt lesbar,60-180→ den Glyphen-Schleier hinzufügen,180+→ deckender Text + Schleier (niemals nackten hellen Text). Cinematic-Vorlagen sind creme+screenund GESPERRT — diese Überprüfung verwenden, um eine passende Identität auszuwählen (helle Szenen →inkoder das deckende Rail-anchor-Thema), niemals um eine einzufärben. - Identitätsempfehlung nach Tonfall (Sie empfehlen; der Benutzer wählt — siehe Schritt 0 + CATALOG.md). Erklärvideo / Interview / muss-lesbare Worte → Rail/Panel-Oberflächen-Identitäten; poetisch / sozial / „cinematic“ → Spaltenfluss-Identitäten nach Register; „炸 / 特效 / VFX“ / benannte Welten → thematische Identitäten. Bei Unsicherheit →
anchor(Worte lesbar, Szene sicher) — aber eine Kurzliste präsentieren und den Benutzer wählen lassen.
Pipeline — 5 Schritte
1. hyperframes init <projekt> --non-interactive --video <video.mp4> --skip-skills
2. bash scripts/prepare.sh <projekt> # Matte ∥ Transkription (parallel) → Safe-Zones. Ein Befehl.
# → frames_fg/ transcript.json safe-zones.json
3. [AGENT-SCHRITT — der einzige kreative Schritt] ein kleines JSON erstellen; siehe unten nach Modus
Cinematic: plan.json erstellen → node scripts/fill-timings.cjs → fit-fonts.cjs → make-composition.cjs
Theme: theme.json erstellen → bash scripts/render-theme.sh <projekt> (kompiliert + rendert + Tafel-Effekte)
4. node scripts/preview-frames.cjs <projekt> # ~2s/Frame Composite-Vorschauen → § Visuelle Qualitätskontrolle (VOR dem Rendern)
5. bash scripts/render-and-composite.sh <projekt> # Gates → final.mp4 + history/ Schnappschuss
(Theme-Modus: Schritte 3b/5 ÜBERSPRINGEN — render-theme.sh führt bereits Kompilierung + Render-and-Composite
+ _postfx.sh aus; das Ergebnis ist final_fx.mp4, final.mp4 ist vor der Tafel-Reaktion)
Schritt 3 unterscheidet sich nach Modus:
Schritt 3 — Cinematic-Modus (reines Embed)
- Zuerst
safe-zones.jsonlesen. Erzählebenen kommen inzones.hugLeft/hugRight— saubere Streifen ANGRENZEND an die Silhouette (Text weit weg vom Körper wirkt schwebend, nicht eingebettet; entfernte Ecken sind der Notfall, nicht der Standard). Der Hero standardmäßig aufheroAnchor/heroBands.best(ZENTRIERT auf dem Subjekt, ~30–55 % verdeckt).recommendation:"fg"verschiebt die ERZÄHLUNG nach vorne für Lesbarkeit; der Hero bleibt eingebettet, wann immerheroBands.feasible