--- name: yuv-video-director description: > Yuval's all-in-one AI video pipeline. Turns an idea/script into a finished, on-brand MP4 by orchestrating HyperFrames (HTML→deterministic video render), Lottie (branded motion graphics), ManimCE (math / neural-network / concept animations), and a transcribe→approve caption flow — all wrapped in the YUV.AI Neon Phoenix brand via a frame.md. Use whenever Yuval wants to make, edit, or explain something as a video: promo, explainer, launch, social reel, "make a video about X", "explain X as a video", "neural network animation", "turn this into a video", captioned tutorial, 16:9 or 9:16. Triggers: video, explainer, promo, reel, manim, lottie, hyperframes, animation, "make a video", "explain ... as a video", מצגת וידאו, סרטון, הסבר וידאו. Routes each beat to the right engine, wraps in brand, self-verifies, and renders. --- # yuv-video-director The conductor for YUV.AI video. You (the agent) decide **what each beat needs**, route it to the right **engine**, compose everything into **one HyperFrames composition**, wrap it in the **YUV.AI Neon Phoenix** brand, **self-verify**, and **render** to MP4. This skill is the router + the working reference implementations; load a reference file only when that engine is in play. > **Design source of truth:** the `yuv-design-system` skill (Neon mode — pink `#FF1464`, cyan > `#00E5FF`, rich-black/white, Anton+Inter+JetBrains Mono, neural-net phoenix motif). The video > form of it is **`frame.md`** — see [references/frame-md.md](references/frame-md.md). Bundled > template: [assets/FRAME.md](assets/FRAME.md). Drop it in the project root; HyperFrames reads it. ## The one law (decides everything) HyperFrames renders by **seeking each frame in headless Chrome → FFmpeg** (`frameIndex = floor(t·fps)`, same input → same output). So every visual is one of two kinds: | Pattern | Runs… | Engines | Rule | |---|---|---|---| | **Live seekable adapter** | *inside* the render, driven to time `t` per frame | GSAP, Lottie (`window.__hfLottie`), Three.js, a canvas driven by a GSAP proxy `onUpdate` | must be **clock-driven** — no `Date.now()`, `Math.random()` (seed a mulberry32), `setTimeout`, or `.play()` | | **Pre-rendered asset** | *offline*, outputs a file, imported as a clip | **ManimCE** (Python→MP4/alpha), TTS audio, background-removal | render first, then drop in as a `