name: embedded-captions
beschreibung: >
Füge einem vorhandenen Ein-Personen-Talking-Head-Video Untertitel oder Bildunterschriften hinzu, ohne das
Filmmaterial zu bearbeiten. Verwende es für einfache wörtliche Untertitel, kinematografische Untertitel, die hinter der Person eingebettet sind, VFX-Untertitel,
„炸/特效/酷炫字幕“ oder eine benannte Identität aus dem 35-Stile-Katalog. Die Auswahl erfolgt über die visuelle Identität,
nicht über die Backend-Engine. Die leise anchor-Schiene ist die Standardeinstellung; bette jedes Wort nur dann ein,
wenn der Benutzer explizit eine vollständig kinematografische Behandlung wünscht. Der Workflow läuft lokal von Anfang bis Ende,
einschließlich Transkription und Freistellung der Person; teile Aufnahmen mit mehreren Einstellungen auf, bevor du ihn anwendest.
Wichtig: Halte dieses Skill aktuell – frage den Benutzer vor der Ausführung:
npx hyperframes skills update embedded-captions. Eine schnelle No-Op, wenn alles aktuell ist; andernfalls wird dieses Skill sowie die darauf angewiesenen Kernbereich-Skills aktualisiert, bevor du sie verwendest.
Was macht eingebettete Untertitel?
Ein Katalog, vorab ausgewählt (CATALOG.md – 35 Identitäten; die dahinterliegenden Engines sind Backend-Details). Standard (Standard) erzeugt eine saubere wörtliche Schiene (unteres Drittel Untertitel, die den Großteil des Textes tragen) + einen Embed-Höhepunkt, der in die Szene hinter der Person komponiert wird. Cinematic ist reines Embed – keine Schiene, jeder Untertitel wird hinter der Person komponiert (heroische Typografie, Akkumulation, Verdeckung als Effekt). Theme ist eine vollständige thematische Zusammenstellung – Körper-Paradigma × Hero-Setpiece × Front-Effekt × Plattenreaktion, zusammengesetzt aus Registern (themes/README.md): ordnance terminal neonsign stardust stomp. Die meisten Erklär-/Voiceover-Videos sind Standard; Embed ist der seltene, verdiente Höhepunkt – jedes Wort einzubetten ist der häufige Fehler; Theme ist für VFX-Anfragen („炸“, „特效“, „wie von AE gemacht“).
Ablauf (Kurzfassung)
Gesteuert über /hyperframes bestätigt die Intentionsebene nur die Eingabe (welcher Clip) und kündigt die Identitätsauswahl als verzögerte Frage an – die Shortlist benötigt den analysierten Clip, daher bleibt es bei Schritt 1 unten; die Ablaufform-Fragen der Ebene gelten nicht (das Filmmaterial ist unberührt, es gibt kein Storyboard zu prüfen). Eine BRIEF.md, falls vorhanden, enthält die bestätigte Eingabe und etwaige Benutzernotizen – lies sie zuerst.
Der folgende Handwerkstext ist lang; die Pipeline selbst ist kurz – und alles Determinative wird berechnet oder kompiliert, niemals von Hand geschrieben:
- Entscheidungs-Gate (schlechte Clips ablehnen) → EINE Identität aus CATALOG.md auswählen (35 Identitäten; Engine/Compiler werden per Nachschlage abgeleitet – niemals eine Modus-/Kategoriefrage stellen)
hyperframes init(überspringen, wenn das Projektverzeichnis bereits existiert und das Video enthält –matte.cjs/transcribe.cjsübernehmen jedes Video im Verzeichnis als source.mp4) →bash scripts/prepare.sh <projekt>(Matte ∥ Transkription ∥ Audio-Hüllkurve parallel, dann sichere Zonen 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(Schienen-/Panel-/Gedicht-/Übernahme-Paradigmen;anchorist die leise Schienen-Standardeinstellung) - Visuelle Qualitätskontrolle:
node scripts/preview-frames.cjs <projekt>→ originalgetue Composite-Vorschauen in ~2s/Bild (kein Rendering). Überprüfe § Visuelle Qualitätskontrolle, bevor du für ein Rendering zahlst. render-and-composite.sh→ Gates (Timing / Verdeckung+Hero / Überlauf / Übergabe) →final.mp4
Wichtige Regeln, die oft übersehen werden:
- Schiene (Standard) + Embed (Höherstufung).
drop(Füllmaterial, nicht angezeigt) /rail(wörtlicher Untertitel im unteren Drittel, im Vordergrund, trägt den meisten Text) /embed(ein Höhepunkt-Wort, das hinter die Person komponiert wird). Der Standardmodus macht beides, wobei nur die Höhepunkte eingebettet werden. Siehe § Untertitel-Modell. - Das Video wird UNVERÄNDERT geliefert (Standard/Cinematic; der PLATE-Budget im Theme-Modus ist die einzige genehmigte Ausnahme – registergesteuerte Reaktionsbeats (Ladungsabdunklung, Schlag, Erschütterung, Körnung) definiert pro Theme-DNA und NACH dem Matte-Composite angewendet, sodass Person+Text+Platte sich als ein Rahmen bewegen) – Untertitel sind das einzige, was hinzugefügt wird; das Matte dient nur dazu, dass die Person die Embed-Spur verdecken kann. Niemals das Filmmaterial gradieren/umfärben/Scanlines hinzufügen.
- Zwei Regelwerke: Schiene → references/rail.md (dünn), Embed-Handwerk → references/composition-craft.md (umfangreich, nur Embed). Nach Bedarf überfliegen.
Untertitel-Modell – Schiene + Embed
Jeder gesprochene Satz ist eines von drei Dingen:
| Was | Wie es angezeigt wird | |
|---|---|---|
| drop | Füllmaterial – ähm/ähm, Stottern, Selbstkorrekturen | nicht angezeigt |
| rail | Standard – gewöhnlicher gesprochener Inhalt (wörtlich) | sauberer Untertitel im unteren Drittel, im Vordergrund, lesbar. Ein betontes Wort kann eine emphasis-Hervorhebung erhalten (Akzentfarbe / aktives Wort Pop) – es bleibt auf der Schiene. |
| embed | ein hervorgehobener Höhepunkt – der wichtigste Beat | ein großes Wort, das hinter die Person komponiert wird (Matte-Verdeckung), mit gestaltetem Ein- und Ausgang |
Die Schiene trägt den meisten Text; Embed ist der seltene, verdiente Höhepunkt. Knappheit 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; ein langes Erklärvideo → ~einer pro Abschnitt. Bei mehreren Heroes ist der größte erstellte der APEX (er allein erhält das vollständige Lockup-Embed + Breitenanpassung); kleinere sind MINOR-Höhepunkte, die in ihrer Spalte als überdimensionierte Betonungszeilen (Vordergrund, gedämpfte Bewegung) reiten – nicht jeder Beat braucht die Matte-Inszenierung, genau das macht den Apex zu einem Ereignis. Jedes Wort einzubetten ist immer noch der häufige Fehler.
Schienen-Oberflächenidentitäten bauen genau das (Schiene = rail.html, Embed = Höhepunkt in index.html). Spaltenfluss-Identitäten lassen die Schiene weg und machen alles im Embed-Stil – empfehle sie nur für stimmungsbetonte, nicht wörtliche Anfragen, niemals für Erklär-/Voiceover-Videos, bei denen die Wörter lesbar sein müssen (CATALOG.md kodiert 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 (35 Einträge: 10 klassische + 25 thematische); die Engine, der Compiler und die Authoring-Datei werden per Nachschlage aus der Katalogzeile abgeleitet. Stelle niemals „Standard vs. Cinematic vs. Theme“ als Frage – das sind Backend-Namen (ein Produkt hat eine UX, auch mit mehreren Engines). Der Katalog kodiert alles, was für das Routing benötigt wird: Leseoberfläche, Stimme, Empfehlung für, Szenenbedarf, Hinweise zur Nähe für die wirklich nahen Paare (loud↔ordnance, neon↔neonsign, cream↔stardust).
Die Identitätsauswahl ist ein Präferenz-Gate (../hyperframes-core/references/brief-contract.md § 1): im autonomen Modus („überrasche mich“ / „entscheide für mich“) wähle selbst aus deiner Shortlist aus und nenne den einzeiligen Grund, anstatt zu fragen.
Vorgehen: Clip analysieren → 2–3 Identitäten aus dem Katalog in die Shortlist aufnehmen → EINE mit einzeiligem Grund empfehlen → der Benutzer wählt (autonomer Modus: du wählst und nennst den Grund) → die Datei dieser Identität erstellen. Identitäten sind engine-gebunden (keine Querkombinationen; das Öffnen einer Identität ist ein Validierungsereignis – siehe dna/README.md).
Präsentiere immer deine Empfehlung und lass den Benutzer vor dem Authoring wählen.
(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 Authoring-Vertrag jedes Backends.)
Empfehlungsheuristik: Verwende die „Shortlisting-Heuristiken“ in CATALOG.md – sie sind identitätsspezifisch (z. B. „炸“ shortlistet ordnance/stomp/terminal/loud und wählt danach, WAS explodieren soll), niemals kategorieübergreifend. Unsicher → anchor.
- Cinematic → schreibe
plan.jsonfür eine feste Vorlage, kompiliert durchmake-composition.cjs. - Theme → lies themes/README.md, erstelle
theme.json, führescripts/render-theme.shaus (kompiliert + rendert + Plattenreaktion → final_fx.mp4).
Entscheidungs-Gate – ZUERST AUSFÜHREN
Analysiere das Video und klassifiziere die Szene vor beiden Modi.
ffprobe <video.mp4> # Spezifikationen
ffmpeg -ss <z> -i <video.mp4> -vframes 1 sample.png # bei 20/50/80%
Lies die Samples. Lehne ab, wenn:
- Mehrere Sprecher / harte Schnitte (teile auf und rendere jede Einstellung einzeln, oder lehne ab)
- Kein menschliches Motiv (dieses Skill ist für Talking-Head)
- Unter 3 Sekunden, keine Sprache, oder das Gesicht nie klar sichtbar –
transcribe.cjswarnt, wenn Audio fast still ist (Whisper halluziniert Wörter wie „Thank you.“ über Stille); beachte die Warnung und lehne ab, anstatt erfundene Wörter zu untertiteln - Quelle hat bereits eingebrannte Untertitel/Bildunterschriften/schwere Textgrafiken – das Hinzufügen eines zweiten Untertitelsystems führt zu Konflikten, und das Filmmaterial wird unverändert ausgeliefert (kein Überdecken/Inpainting). Eingebrannter Text erscheint oft nur in der Mitte des Clips: nimm ein 1fps-Kontaktblatt (
ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png), verlasse dich nicht auf 3 Einzelbilder. - Transkription ist Müll – nicht-muttersprachliche/stark akzentbelastete Sprache kann in selbstbewussten Unsinn transkribiert werden. Lies
transcript.jsonvor dem Authoring auf Vernunft; wenn es sich nicht wie Sprache anfühlt, versuche es einmal mitWHISPER_MODEL=medium, sonst lehne ab (eine wörtliche Schiene aus erfundenen Wörtern ist schlimmer als keine Untertitel). - Hektische Handkamera mit schneller Bewegung (Matte flackert)
Vorflug-Checks (kosten nichts, verhindern die schlimmsten Fehler)
- Einstellungsschnitt-Check. Nimm Samples bei 20%, 50%, 80%. Wenn ein anderes Motiv/Szene erscheint, schneide den Clip vor dem Schnitt zu.
- Letterbox-/Pillarbox-Check. Schwarze Balken im ersten Bild? Berechne den sicheren Inhaltsbereich und beschränke die Untertitelplatzierung darauf.
- Luminanz-Check. Nimm die durchschnittliche Luminanz des Untertitelbereichs –
unter 60→ heller Text liest sich wie er ist,60-180→ füge die Glyphen-Schattierung hinzu,180+→ deckender Text + Schattierung (niemals nackten hellen Text). Cinematic-Vorlagen sind creme+screenund FEST – verwende diesen Check, um eine passende Identität auszuwählen (helle Szenen →ink, oder das deckende Schienen-anchor-Theme), niemals um eine einzufärben. - Identitätsempfehlung nach Stimmung (du empfiehlst; der Benutzer wählt – siehe Schritt 0 + CATALOG.md). Erklär-/Interview-/wörtlich-lesen-muss → Schienen-/Panel-Oberflächenidentitäten; poetisch/sozial/„cinematic“ → Spaltenfluss-Identitäten je nach Register; „炸 / 特效 / VFX“ / benannte Welten → thematische Identitäten. Bei Unsicherheit →
anchor(Wörter lesbar, Szene sicher) – aber präsentiere eine Shortlist und lass den Benutzer wählen.
Pipeline – 5 Schritte
1. hyperframes init <projekt> --non-interactive --video <video.mp4> --skill=embedded-captions
2. bash scripts/prepare.sh <projekt> # Matte ∥ Transkription (parallel) → sichere Zonen. Ein Befehl.
# → frames_fg/ transcript.json safe-zones.json
3. [AGENT-SCHRITT – der einzige kreative Schritt] erstelle ein kleines JSON; siehe unten nach Modus
Cinematic: erstelle plan.json → node scripts/fill-timings.cjs → fit-fonts.cjs → make-composition.cjs
Theme: erstelle theme.json → bash scripts/render-theme.sh <projekt> (kompiliert + rendert + Platten-FX)
4. node scripts/preview-frames.cjs <projekt> # ~2s/Bild Composite-Vorschauen → § Visuelle Qualitätskontrolle (VOR dem Rendern)
5. bash scripts/render-and-composite.sh <projekt> # Gates → final.mp4 + history/ snapshot
(Theme-Modus: Schritte 3b/5 ÜBERSPRINGEN – render-theme.sh führt bereits Kompilierung + render-and-composite
+ _postfx.sh aus; das ausgelieferte