oma-video

Generate narrated, captioned mp4 videos from briefs, READMEs, or screen captures via a key-optional provider router.

Updated Mar 26, 2026
One-click install
npx skills add https://github.com/javiruu/viru-air --skill oma-video-javiruu
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: oma-video
Source: https://github.com/javiruu/viru-air/tree/main/.agents/skills/oma-video
Command: npx skills add https://github.com/javiruu/viru-air --skill oma-video-javiruu

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires remotion, @remotion/cli, @remotion/captions, @remotion/fonts, react, react-dom, zod, playwright, and includes references (resource) components.

What problem does it solve? Turning a topic, README, or screen recording into a finished narrated video normally requires stitching together scripting, TTS, image generation, captions, and a renderer by hand. This Skill automates that entire pipeline through a single CLI with deterministic, reproducible run directories. ## Core Features & Use Cases - Three generation modes: shorts/reels (9:16) from a topic, explainers (16:9) from README/code/data, and demos from screen-capture files or supervised headed-browser web capture of any URL. - Key-optional 3-tier router: every capability (voice, visuals, captions, compositor) has a real provider path and a key-free fallback (oma-voice, oma-image, oma-slide, Remotion), so it works with zero API keys and upgrades automatically when keys like PEXELS_API_KEY are present. - Deterministic asset bus: each run produces script.json, timing.json, render-spec.json, captions, the mp4, and a manifest.json with hashes, providers, and cost breakdown; runs can be re-rendered byte-stably from render-spec.json. - Use Case: Ask for a 30-second vertical short about a product feature; the Skill infers the mode, generates the script, synthesizes narration, creates Ken Burns stills, adds TikTok-style captions, and renders a finished mp4 with a full reproducibility manifest. ## Quick Start Ask the agent to make a 30-second short about your topic, for example: create a 30s vertical short explaining this project's README with TikTok captions.

Frequently Asked Questions about oma-video

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I generate a short-form video from a text prompt?▼

Run oma video generate with your brief and --mode shorts to produce a 9:16 narrated clip with captions. The pipeline writes a script, synthesizes voice, creates visuals, and renders an mp4 via the Remotion compositor into a timestamped run directory.

Can I create videos without any API keys?▼

Yes, the router is key-optional: default providers (oma-voice, oma-image, oma-slide, Remotion) are key-free. Paid providers like Pexels and Pixelle activate only when their env keys are set, otherwise the chain falls back to key-free stills with Ken Burns motion.

How do I record a demo video of my web app?▼

Use --mode demo --source web --url <url> to open a headed browser that records while a human drives the flow, pressing ENTER to stop. Alternatively pass an existing recording with --source file --capture <path>. No credential automation is performed.

Does the video generation support languages other than English?▼

Yes, narration and on-screen text are authored in the requested --locale, with oma-translator handling non-source languages key-free. Image-generation prompts are sent to oma-image in English regardless of locale for better model results.

Why did my video render as a placeholder instead of a real mp4?▼

The Remotion toolchain (Node, Chromium, FFmpeg) was not bootstrapped, so the compositor fell back to a deterministic placeholder derived from render-spec.json. Run oma video doctor to install the toolchain, then re-render with oma video render <runDir>.

What are the limits on video length and scenes?▼

Videos are capped at 180 seconds (limits.max_duration_sec) and 40 scenes (limits.max_scenes) to bound wall time and memory. Runs estimated to cost $0.20 or more require confirmation unless bypassed with --yes.