--- name: expocut-kinetic-captions description: Creates burned-in karaoke captions and kinetic typography in ExpoCut through the MCP server — on-device transcription straight to a styled caption layer, word-by-word highlight styles, the 2026 caption spec (1–3 word groups, 600–900 ms holds, one emphasized keyword), RTL Urdu/Arabic text, curved and path text, and broadcast lower thirds. Use when the user says captions, subtitles, auto captions, karaoke text, word-by-word, Hormozi-style, kinetic typography, animated text, lower third, name plate, or asks to make speech readable with sound off. Roughly 85% of social video plays muted — treat captions as mandatory. Do NOT use for generating the voiceover audio itself (use expocut-voice-narration). license: Free to use and redistribute with attribution to expocut.com. compatibility: Works standalone as guidance; becomes hands-on when paired with the ExpoCut in-app MCP server (private/loopback network only). metadata: author: ExpoCut (expotechin.com) version: "1.0.0" homepage: https://expocut.com/skill.html --- # Kinetic captions & typography You are the caption designer. Captions are retention machinery, not an accessibility afterthought — captioned videos are ~80% likelier to be watched to completion. ## The one-call pipeline add_caption_layer_from_audio { uri, language } Transcribes on-device and creates a speech-synced transcript layer in one step. For manual control: transcribe_audio { uri } first, inspect segments, then author text layers yourself. There is no translation tool — caption in the spoken language. ## The 2026 caption spec (apply as defaults) - Groups of **1–3 words**, each held **600–900 ms** (the flashy 200 ms emoji-storm style is dated — clean karaoke won). - ALL-CAPS heavy sans (Montserrat Black / Anton class), height ≈ 10–15% of frame, black stroke, white fill. - **One emphasized keyword per phrase** in a single accent color (classic: #FFD93D yellow) — never rainbow words. Use set_text_style_runs for the keyword color. - Position ~60–70% down the frame, always inside the universal safe zone (center 900×1400 of a 1080×1920 canvas). - Word-by-word "karaoke" highlight lifts engagement ~15% on educational content; pick a transcript style that highlights the active word. ## Styling the transcript layer Transcript layers accept every text tool: - set_text_font { layerId, fontFamily, fontWeight } · set_text_style · set_text_effect - Karaoke/word animation: patch the layer — update_layer { id, patch: { textAnimationStyleId } } (discover styles via list_text_animations / the app's Transcript panel styles). - Boxed captions: add_widget_layer { widgetId: "caption-box", config } for a styled backdrop. ## Kinetic typography (titles that move) - Entrance/exit/loop: set_text_animation { layerId, inId, inDurationSec, loopId }. - Per-character reveals: set_typewriter; ranges via set_text_animation_range. - Text on a path: set_text_path { layerId, ... } for arc / circle / wave. - Media-filled display type: set_text_media_fill { layerId, uri, type } — video playing inside the letters. - Keep ONE motion family per video (pop OR slide OR type); 300–500 ms entrances with easeOut. ## RTL & world scripts set_text_writing_direction { layerId, direction: "rtl" } for Urdu/Arabic; pair with an RTL-capable font (audit_font_coverage checks glyphs). RTL lower thirds exist as fx-* presets. ## Lower thirds add_lower_third_layer { presetId, lines: ["NAME", "Role"], duration } — slide in 300–500 ms, hold ≥ 3 s, exit mirrored, inside the safe zone. Browse list_lower_thirds (180 presets incl. RTL sets). ## Verify loop 1. capture_canvas { timeSec } at a mid-sentence moment — is the active word visibly highlighted, stroke legible on both light and dark footage? 2. capture_canvas { grid: true } — confirm captions sit inside the 900×1400 safe zone (platform UI covers the bottom ~350–400 px). 3. Read the transcript segments back (get_layer) and fix mis-heard words before styling — spelling errors in 120 px type are fatal.