Communitygithub.com

OpenCaptions Erweiterung

Fügt CWI (Caption With Intent) Untertitel in die Post-Production Pipeline von Content Engine ein – für Untertitel, die die Absicht und Emotion der Sprache visuell vermitteln.

Was ist OpenCaptions Erweiterung?

Die OpenCaptions Erweiterung integriert den Oscar-prämierten (2025) CWI-Untertitelstandard von FCB Chicago und Chicago Hearing Society in die Post-Production Pipeline von Content Engine. Statt statischer Untertitel codiert CWI die gefühlte Erfahrung der Sprache: Tonhöhe steuert die Schriftstärke, Lautstärke die Schriftgröße, Betonung löst Glow-Animationen aus und die Sprecheridentität wird auf WCAG-AA-konforme Farben abgebildet. Das Ergebnis sind Untertitel, die nicht nur zeigen, was gesagt wurde, sondern auch wie. Die Erweiterung funktioniert als sechsstufige Pipeline, die mit der Transkription (faster-whisper) und Diarisierung (pyannote-audio) beginnt, dann die Absicht aus Audio und Video extrahiert (z. B. Tonhöhe, Lautstärke, Emotion, Betonung), diese in CVI-Visualparameter umsetzt, gemäß 12 Regeln validiert und schließlich über Remotion oder ffmpeg rendert. Sie wird per CLI oder MCP-Server (für Agenten wie Claude Code) gesteuert und lässt sich nahtlos in compose-video.py einbinden. Bei fehlenden Abhängigkeiten degradiert sie anmutig zu einfacheren Textüberlagerungen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/broomva/skills/tree/main/skills/video/content-engine/extensions/opencaptions

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht OpenCaptions Erweiterung?

Binde CWI (Caption With Intent) Untertitel in die Post-Production Pipeline von Content Engine ein. Anstelle von flachen, statischen Untertiteln codiert CWI die gefühlte Erfahrung von Sprache – Tonhöhe steuert die Schriftstärke, Lautstärke die Schriftgröße, Betonung löst Glow-Animationen aus und die Sprecheridentität wird auf WCAG-AA-konforme Farben abgebildet. Das Ergebnis sind Untertitel, die nicht nur vermitteln, was gesagt wurde, sondern auch wie.

CWI ist der Oscar-prämierte (2025) Untertitelstandard von FCB Chicago und Chicago Hearing Society. OpenCaptions ist die erste quelloffene, programmatische Toolchain dafür.

Pipeline-Hakenpunkt

Phase: Post-Production (Phase 3) Position: Nach Upscaling und Color Grading, vor dem finalen Export.

Post-Production-Kette:
  1. Upscaling (Real-ESRGAN / Topaz)   --> Höhere Auflösung
  2. Color Grading (Brand LUT / ffmpeg) --> Markenkonforme Farben
  3. OpenCaptions (CWI)               --> Intent-gesteuerte Untertitel
  4. Finaler Export (ffmpeg)           --> Produktionsreife Datei

Die Erweiterung erhält eine fertig gradierte Videodatei und erzeugt:

  1. Ein CWI-Dokument (.cwi.json) mit wortgenauen Intent-Annotationen
  2. Ein WebVTT-Fallback (.vtt) für Plattformen, die Standard-Untertitel benötigen
  3. Einen Validierungsbericht (JSON) mit Pillar-Scores
  4. Ein untertitelte Video (.mp4) gerendert via Remotion oder ffmpeg-Burn-in

Funktionsweise

Gradiertes Video + Szenenbeschreibung
  |
  ├── [1] Transkription (faster-whisper) --> Wortgenaue Zeitstempel
  ├── [2] Diarisierung (pyannote-audio)  --> Sprecherzuordnung
  ├── [3] Intents extrahieren            --> Tonhöhe, Lautstärke, Emotion, Betonung pro Äußerung
  |       V1: parselmouth + FER (Audio+Video)
  |       V2: V-JEPA2 World Model
  |       V3: TRIBE v2 neuronale Vorhersage
  ├── [4] Intent → CWI abbilden         --> Schriftstärke, Größe, Betonung, Animation pro Wort
  |       V1: RulesMapper (Tonhöhe→Stärke, Lautstärke→Größe)
  |       V2: LearnedMapper (trainiert auf Korrekturdaten)
  |       V3: NeuralMapper (Gehirnregion-Aktivierungen steuern Styling)
  ├── [5] Validieren (12 Regeln)        --> Attributions-, Synchronisations- und Intonations-Scores
  └── [6] Rendern                       --> Remotion-Overlay ODER ffmpeg-Burn-in

Schritt 1–2: Transkription + Diarisierung

Die Pipeline ruft die OpenCaptions-CLI oder den MCP-Server auf, der faster-whisper für wortgenaue Zeitstempel und pyannote-audio für die Sprechererkennung verwendet. Diese Phasen erzeugen ein DiarizedTranscript, in dem jedes Wort einem Sprecher zugeordnet ist.

Schritt 3: Intent-Extraktion

Der Intent-Extraktor analysiert Audio und Video, um den gefühlten Register jeder Äußerung zu bestimmen:

  • Stimm-Signale: Tonhöhe (Hz), Lautstärke (dB), Sprechgeschwindigkeit (WPM), Pausen-Timing
  • Affekt-Signale: Valenz (-1 bis 1), Erregung (0 bis 1), vorherrschende Emotion
  • Semantische Signale: Sarkasmus-Wahrscheinlichkeit, Betonungswörter, rhetorische Mittel

Diese Signale bilden einen IntentFrame für jede Äußerung. Wörter, die von der Äußerungsbasislinie abweichen, erhalten WordIntent-Überschreibungen.

Schritt 4: Intent-Abbildung

Der Mapper wandelt Intentsignale in visuelle CWI-Parameter um:

Intent-SignalCWI-EigenschaftAbbildung (V1 RulesMapper)
Tonhöhe (normalisiert 0–1)weight (100–900)Lineare Interpolation: 100 + pitch_norm * 800
Lautstärke (normalisiert 0–1)size (0,7–1,5)Lineare Interpolation: 0,8 + volume_norm * 0,55
Semantische Betonung + hohe Lautstärkeemphasis (boolesch)Wort in emphasis_words ODER Lautstärke > p90
Sprecheridentitätcolor des SprechersAus 12-Farben-WCAG-AA-Palette zugewiesen
Flüstern (leise)weight < 300Überschreibung: Stärke auf 100–250 begrenzt
Schreien (laut)size > 1,3 + emphasisÜberschreibung: Größe 1,35–1,5, emphasis true

Schritt 5: Validierung

Der @opencaptions/spec-Validator prüft das CWI-Dokument gegen 12 Regeln, verteilt auf drei Säulen:

Attribution (3 Regeln):

  • ATT_001: Jeder Untertitel hat einen Sprecher im Cast
  • ATT_002: Sprecher haben eindeutige Farben
  • ATT_003: Farben erfüllen WCAG-AA-Kontrast (4,5:1 gegen #1a1a1a)

Synchronisation (5 Regeln):

  • SYN_001: Alle Wörter haben Zeitstempel
  • SYN_002: Zeitstempel sind monoton steigend
  • SYN_003: Untertitelereignisse überlappen sich nicht
  • SYN_004: Animationsdauer 600 ms gemäß Spezifikation
  • FCC_001: Keine Lücken > 3 s während Sprache
  • FCC_002: Max. 42 Zeichen pro Zeile (FCC-konform)

Intonation (3 Regeln):

  • INT_001: Stärke im gültigen Bereich (100–900)
  • INT_002: Größe im gültigen Bereich (0,7–1,5)
  • INT_003: > 20 % der Wörter haben nicht-standardmäßige Stärke (Untertitel variieren tatsächlich)

Jede Säule wird mit 0–100 bewertet. Ein CWI-Dokument gilt als bestanden, wenn alle drei Säulen >= 80 erreichen.

Schritt 6: Rendern

Zwei Rendering-Pfade:

Remotion-Pfad (bevorzugt für Content Engine): CWI-Wörter werden zu React-Komponenten in einer <CaptionOverlay>-Komposition. Jedes Wort erscheint zu seinem Zeitstempel mit einer spring()-Eingangsanimation, Sprecherfarbe, variabler Schriftstärke und einem Betonungs-Glow. Siehe references/cwi-remotion-bridge.md für die vollständige Abbildung.

ffmpeg-Burn-in (Fallback): Erzeuge eine ASS-Untertiteldatei aus dem CWI-Dokument und brenne sie mit ffmpeg -vf ass=captions.ass in das Video ein. Verliert wortgenaue Animationen, behält aber Sprecherfarben und Schriftstärken-Variation.

CLI-Verwendung

# CWI-Untertitel aus einem Video erzeugen
npx opencaptions generate video.mp4 --output captions.cwi.json

# Mit TRIBE v2 neuronalem Backend erzeugen
npx opencaptions generate video.mp4 --backend tribe --output captions.cwi.json

# Ein CWI-Dokument validieren
npx opencaptions validate captions.cwi.json

# Untertitel im Terminalvorschau (ANSI-farbig)
npx opencaptions preview captions.cwi.json

# Nach WebVTT exportieren
npx opencaptions export captions.cwi.json --format webvtt

# Nach After Effects ExtendScript exportieren
npx opencaptions export captions.cwi.json --format ae-json

# Nach Premiere Pro XML exportieren
npx opencaptions export captions.cwi.json --format premiere-xml

# Systemabhängigkeiten prüfen
npx opencaptions doctor

# Python-Abhängigkeiten installieren
npx opencaptions setup

MCP-Server-Verwendung

Der OpenCaptions MCP-Server stellt vier Tools für die Agentenintegration bereit:

ToolBeschreibung
generate_captionsFührt die gesamte Pipeline für eine Videodatei aus
validate_captionsValidiert ein CWI-Dokument gegen 12 Regeln
preview_captionsTerminalformatierte Vorschau zu einem bestimmten Zeitpunkt
export_captionsExportiert in das WebVTT-Format

Zur Verwendung mit Claude Code fügen Sie den MCP-Server zu Ihren Einstellungen hinzu:

{
  "mcpServers": {
    "opencaptions": {
      "command": "npx",
      "args": ["@opencaptions/mcp"]
    }
  }
}

Rufen Sie es dann im Gespräch auf: "Generiere CWI-Untertitel für video.mp4" löst generate_captions aus.

compose-video.py-Integration

compose-video.py von Content Engine akzeptiert ein --captions-Flag:

python3 scripts/compose-video.py storyboard.md --brand arcan-studio --captions

Wenn --captions übergeben wird, führt die Pipeline nach der Generierung und dem Zusammensetzen aller Clips Folgendes aus:

  1. npx opencaptions generate {final-video}.mp4 --output {output-dir}/captions.cwi.json
  2. Validiert das CWI-Dokument (warnt bei Score < 80, blockiert aber nicht)
  3. Wenn auch --remotion übergeben wird, wird das CWI-JSON als <CaptionOverlay>-Props in die Remotion-Komposition injiziert
  4. Andernfalls wird WebVTT als Sidecar-Datei neben dem finalen Video erzeugt

Wenn OpenCaptions nicht installiert ist (npx opencaptions doctor schlägt fehl), degradiert die Pipeline anmutig:

  • Fallback: Textüberlagerung aus der Szenenbeschreibung (statischer Text aus den ## Shot-Beschreibungen des Storyboards)
  • Loggt eine Warnung: "OpenCaptions not available, using scene brief text overlay"
  • Erzeugt dennoch eine .vtt-Datei mit aus Clip-Grenzen abgeleiteten Zeitangaben

Untertitel-Stile

Drei integrierte Untertitel-Stilvorlagen, auswählbar über Konfiguration:

1. Wort-für-Wort (brainrot)

Stil mit hoher Merkfähigkeit: Jedes Wort erscheint einzeln, zentriert, maximale Größenvarianz. Optimiert für Social/TikTok/Reels-Inhalte mit Dopamin-Hooks.

  • Ein Wort gleichzeitig sichtbar
  • Große Basisgröße (64px bei 1080p)
  • Extreme Stärkevariation (100–900, voller Bereich)
  • Betonungswörter skalieren auf 1,5x mit Glow
  • Hintergrund: keiner (Wörter schweben über Video)
  • Schriftart: Roboto Flex variable

2. Narrativ (editorial)

Ganze Satzanzeige mit wortgenauem Styling. Optimiert für Langform-Inhalte, Dokumentationen, Blog-Video-Einbettungen.

  • Vollständiges Untertitelereignis sichtbar, Wörter inline gestylt
  • Mittlere Basisgröße (48px bei 1080p)
  • Mäßige Stärkevariation (300–700)
  • Betonungswörter erhalten subtile Größenanpassung (1,15x)
  • Hintergrund: halbtransparente Tablette (rgba(0,0,0,0,6))
  • Schriftart: Roboto Flex variable

3. Minimal (unteres Drittel)

Saubere Präsentation im unteren Drittel. Sprechername + Text. Minimale visuelle Ablenkung. Optimiert für Interviews, redende Köpfe, Konferenzaufzeichnungen.

  • Sprechername-Label in Sprecherfarbe, Untertiteltext in Weiß
  • Kleine Basisgröße (36px bei 1080p)
  • Stärkevariation nur für Betonung (400 Standard, 700 Betonung)
  • Keine Größenvarianz
  • Hintergrund: Verlaufsbalken (untere 15 % des Bildes)
  • Schriftart: system sans-serif

Datenvertrag

Liest (unveränderlich)

  • Gradiertes Video-Asset aus vorherigem Post-Production-Schritt
  • knowledge/compiled/brands/{brand_slug}.md – für Untertitel-Farbpalette und Typografie-Präferenzen
  • Szenenbeschreibung (Laufzeitparameter) – für Kontext des beabsichtigten emotionalen Tons

Schreibt (nur eigener Namespace)

  • extensions/opencaptions/output/{asset_id}.cwi.json – CWI-Dokument
  • extensions/opencaptions/output/{asset_id}.vtt – WebVTT-Fallback
  • extensions/opencaptions/output/{asset_id}-report.json – Validierungsbericht
  • extensions/opencaptions/output/{asset_id}-captioned.mp4 – gerendertes Video (nur Remotion-Pfad)

Konfiguration

opencaptions:
  # Stilvorlage für Untertitel
  style: "narrative"              # word-by-word | narrative | minimal

  # Visuelle Parameter
  font_family: "Roboto Flex"      # Variable Schriftart für Gewichtsachse
  base_font_size: 48              # Pixel bei 1080p
  position: "bottom"              # top | center | bottom
  max_chars_per_line: 42          # FCC-Konformität
  background: "pill"              # pill | shadow | gradient | none
  background_opacity: 0.6         # 0.0 - 1.0

  # Pipeline-Backend
  backend: "av"                   # av (V1) | jepa (V2) | tribe (V3)
  language: "en"                  # ISO 639-1 Hinweis für Transkription

  # Sprecher-Überschreibungen (optional, standardmäßig automatisch erkannt)
  speakers:
    - name: "Narrator"
      color: "#6B8AFF"
    - name: "Guest"
      color: "#FF6B6B"

  # Rendering
  render_mode: "remotion"         # remotion | ffmpeg | sidecar-only
  output_format: "mp4"            # mp4 | webm
  fps: 30                         # Muss Quellvideo entsprechen

  # Validierung
  min_score: 80                   # Minimale Gesamtpunktzahl zum Fortfahren
  fail_on_low_score: false        # Wenn true, Pipeline bei niedrigem Score blockieren

  # TRIBE v2 neuronale Abbildung (nur V3-Backend)
  neural_mapping: false           # Vorhersage von neuronalen Antwort-styling aktivieren

Anmutige Degradierung

Die Erweiterung blockiert niemals die Content Engine Pipeline. Degradierungsleiter:

ZustandVerhalten
OpenCaptions CLI installiert + alle Python-AbhängigkeitenVollständige CWI-Pipeline (Transkription, Diarisierung, Intent, Abbildung)
OpenCaptions CLI installiert, keine Python-AbhängigkeitenMock-Backends mit Platzhalter-Untertiteln + Validierung
OpenCaptions CLI nicht installiertSzenenbeschreibungs-Textüberlagerung als statische Untertitel an Clip-Grenzen
Video hat keine AudiospurÜberspringe Untertitelgenerierung, logge Info-Nachricht
Validierungs-Score < 80Warne, fahre aber fort (außer fail_on_low_score: true)
Remotion nicht verfügbarFallback auf ffmpeg ASS-Burn-in
ffmpeg nicht verfügbarGebe CWI-JSON + WebVTT nur als Sidecar aus (kein gerendertes Video)

Verwandte Themen

  • OpenCaptions-Projekt: ~/broomva/apps/opencaptions/
  • CWI-Remotion-Brücke: references/cwi-remotion-bridge.md
  • Integrationsanleitung: references/integration-guide.md
  • Content Engine SKILL.md: ../../SKILL.md
  • Erweiterungs-Framework: ../README.md

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

broomva/skills

Local TTS, voice cloning, voice design, and video dubbing via the OmniVoice Studio MCP server (open-source ElevenLabs alternative; nothing leaves the machine, runs on MPS/CUDA/CPU). Use when: (1) generating speech from text in any of 646 languages, (2) cloning a voice from a 3-second reference clip, (3) designing a voice by gender/age/accent/pitch/style, (4) dubbing a video into another language, (5) listing voice profiles or personality presets, (6) producing narration where privacy, cost, or absent API keys matter, (7) non-English narration where Edge TTS/kokoro fall short, (8) batch audio for blog posts or content pipelines. Triggers: 'omnivoice', 'voice clone', 'clone this voice', 'tts', 'narrate', 'generate speech', 'voice synthesis', 'dub video', 'voice design', 'local tts', 'multilingual voice', 'narrate this post', 'elevenlabs alternative'.

broomva/skills

>- Speak an explanation out loud while working in any project — tiered text-to-speech with a pluggable backend (ElevenLabs by default and quota-guarded, macOS `say` via `--fast` for free instant local speech, local OmniVoice as an unlimited private tier). Markdown-aware, so code fences, URLs and deep paths collapse to short spoken placeholders instead of being dictated character by character, while snake_case identifiers survive intact so the listener can still search for them. Every utterance is saved to disk for later replay. Also carries a **talk mode** toggle: turn it on and the agent speaks a full readback of every turn, for as long as that session lasts — the whole response, not a summary of it, with `brief` and `marker` levels for when you want less. Talk mode is off by default and scoped to the single session that enabled it, so parallel agents in other worktrees stay silent. Use when the user asks to hear something rather than read it — an explanation of a change, a walkthrough of what just happen...

broomva/skills

Shop Tiendas D1 (Colombia, d1.com.co) from the command line — search the catalogue, resolve your nearest physical store, price a basket against that store's real stock, and quote delivery. D1 runs VTEX IO (account `d1tiendas`), so this drives its public storefront API with no admin key at all — catalogue and cart work fully anonymously, and a one-time emailed code unlocks order history. Handles the two traps that make naive D1 automation wrong — availability is regionalized (an unregioned query reports a national catalogue nobody can actually buy from) and prices arrive in two different units (search reports whole pesos, checkout reports hundredths, a silent 100x). Builds and prices baskets; it deliberately cannot pay, handing a checkout URL to a human instead. USE WHEN the user wants to find D1 products or prices, check whether D1 delivers somewhere, build or cost a D1 grocery basket, compare D1 items, or review their D1 orders. NOT FOR other Colombian retailers (Éxito, Jumbo, Ara, Alkosto), and not for c...

broomva/skills

Stateful, local-first household toxics inventory + swap engine. Identify the items in a home that carry endocrine disruptors and persistent chemicals (BPA/BPS, phthalates, PFAS/PTFE, parabens, flame retardants, VOCs, microplastics), score each by *real* exposure (severity x presence x how it's used x condition), and track the swap to a safer alternative from "flagged" -> "sourced" -> "swapped". Ships a grounded, cited knowledge graph of ~20 hazards, ~40 item-classes, and ~40 alternatives. Hands sourcing off to the `procurer` skill. The skill's state is the source of truth — the agent is the app.

broomva/skills

Tekton — the shared architecture-intent substrate for co-designing systems with the agent. One typed graph across six tiers (system / journey / data / infra / decisions / qualities); views are queries, not separate diagrams. The canonical artifact is a diff-friendly YAML model both human and agent read and write; it renders to Mermaid (agent-legible, GitHub-native) and a self-contained tabbed HTML viewer (human-visual). Cross-tier traceability (`tekton query <from> <to>`) answers "which infra does this user-journey step touch?" as a path query. USE WHEN: designing or thinking deeply about architecture, a system, a data model, user journeys/flows, or a technical plan WITH the agent; when a Category-C HTML doc isn't enough because you need to see AND edit AND traverse the design across tiers; "let's design X", "architect this", "model the system", "draw the flow", "how does this fit together", "diagram this", "/tekton". NOT FOR: a one-off throwaway diagram (use Mermaid inline); prose-only ADRs (write the ADR...

broomva/skills

Generate a polished Remotion video and X thread showcasing the full agent skills inventory. Use when creating social media content about skills, rendering category-based skill visualizations, or producing animated showcases of agent capabilities. Triggers on "skills video", "showcase skills", "skills thread", "render skills", "social content for skills", or requests to visualize the skills inventory.

broomva/skills

Produce polished product launch videos using the Liquid Glass aesthetic — dark void backgrounds, 3D perspective floating UI panels, particle effects, spring animations, and cinematic pacing. Built on Remotion with Imagen 4.0 for frames and Veo 3.1 for B-roll. Use when: (1) creating a product demo or launch video, (2) showcasing a UI/app/tool with cinematic polish, (3) building a social-ready video from screenshots and renders, (4) applying the liquid glass floating panel style, (5) composing Remotion videos with 3D transforms and spring animations. Triggers on: 'launch video', 'product video', 'liquid glass video', 'demo video', 'showcase video', 'remotion video', 'floating panel', 'glass aesthetic'.

Verwandte Skills