name: vibe-scene description: Author, repair, render, and inspect VibeFrame scene projects built from STORYBOARD.md and DESIGN.md.
Vibe Scene
VibeFrame scene projects are editable video projects built from:
STORYBOARD.md- beats, narration, backdrop cues, duration hintsDESIGN.md- visual identity, palette, typography, motion rulescompositions/scene-*.html- per-beat HTML compositionsindex.html- root timeline that references scene compositionsassets/andrenders/- generated inputs and final outputs
Use this skill when the user wants editable HTML-based scene composition, storyboard-to-MP4 work, or a host-agent authoring loop.
Use the top-level commands for the main project lifecycle:
vibe init my-video --profile agent --ratio 16:9
vibe build my-video
vibe render my-video -o renders/final.mp4
The vibe scene ... namespace is the lower-level authoring surface:
install-skill, compose-prompts, list-styles, add, and lint.
Pick The Right Path
| Path | Use when | Commands |
|---|---|---|
| Self-contained batch build | A human is running the demo or CI should produce scene HTML without a host coding agent | vibe build --mode batch --composer openai |
| Host-agent authoring | Claude Code/Codex/Cursor should write the scene HTML from a plan | vibe build --mode agent, then vibe scene compose-prompts |
| Single-scene draft | You need a quick template scene or fallback HTML | vibe scene add |
Default recommendation for public demos and reproducible dogfood runs:
vibe init my-video --profile agent --ratio 16:9
# edit DESIGN.md and STORYBOARD.md
vibe build my-video \
--mode batch \
--composer openai \
--tts kokoro \
--skip-backdrop \
--skip-render
vibe scene lint index.html --project my-video --fix
vibe render my-video -o renders/final.mp4 --quality standard
Use --skip-backdrop when you want a low-cost composition test. Remove it when
the demo should exercise OpenAI image generation from each beat's backdrop
cue.
Host-Agent Loop
Use this when Claude Code or another coding agent should be the reasoner that
authors compositions/scene-*.html.
vibe build my-video \
--mode agent \
--tts kokoro \
--skip-backdrop \
--skip-render
vibe scene compose-prompts my-video --json
If vibe build --mode agent returns a needs-author plan:
- Read the compose plan.
- Author each missing
compositions/scene-<id>.html. - Run
vibe scene lint index.html --project my-video --fix. - Fix remaining lint errors by editing the HTML.
- Run
vibe render my-video.
Hard rules for authored scene HTML:
- Every timed element needs
data-start,data-duration, anddata-track-index. - Timed elements must have
class="clip". - GSAP timelines must be paused and registered on
window.__timelines. - Do not use
Date.now(),Math.random(), or network fetches in render paths. - Route final audio through root-level
<audio>elements when possible. - For factual, typography-heavy videos, keep claims and layout in HTML/CSS/JS; treat provider assets as inputs rather than the whole product.
Low-Level Scene Commands
vibe scene install-skill my-video --host auto
vibe scene compose-prompts my-video --json
vibe scene list-styles
vibe scene add intro --project my-video --style announcement --headline "Hello"
vibe scene add badge --project my-video --style simple --lottie assets/logo.lottie --lottie-position bottom-left
vibe scene lint index.html --project my-video --json --fix
Run vibe schema scene.<subcommand> before using less common flags.
Overlay a Lottie animation (.json/.lottie) on a scene with --lottie <path>,
tuned by --lottie-position (full|center|top-left|top-right|bottom-left|bottom-right),
--lottie-scale, --lottie-opacity, and --lottie-no-loop. It renders as a
<dotlottie-wc> overlay (no provider call — free).
Narration Word-Sync
During vibe build, generated narration is transcribed at the word level
(Whisper) to assets/transcript-<beat>.json whenever narration exists and an
OpenAI key is configured. Those word timings are passed into each beat's compose
prompt so captions / kinetic typography can be synced to speech.
- On by default; pass
--skip-transcriptto opt out (no transcription cost). - No OpenAI key → silently skipped; narration still plays, just without word-level animation timing.
- Timings are advisory and visual-only — the composer never adds audio/SFX from them. For long narration the prompt downgrades to coarse phrase-level anchors.
STYLE And STORYBOARD Guidance
Never author scene HTML before DESIGN.md exists. Treat it as the hard gate
for visual decisions:
- palette and contrast
- typography and hierarchy
- layout density
- animation timing and transition style
- what to avoid
For STORYBOARD.md, prefer compact beat blocks:
## Beat hook - First claim
```yaml
narration: "The first sentence the viewer hears."
backdrop: "Specific visual prompt for the scene backdrop"
duration: 5
```
What the scene should show.
Lint Feedback Loop
vibe scene lint index.html --project my-video --json --fix
Recommended loop:
- Run lint with
--json --fix. - Fix any
errorfindings in the referenced scene file. - Re-run lint.
- Cap retries at 3; if errors persist, replace the scene with a simpler
vibe scene add ... --style simple --forcedraft and explain the tradeoff.
Warnings can be acceptable for demos only when the final render is visually correct and deterministic.
Render Checklist
vibe doctorreports Chrome and FFmpeg as available.vibe scene lintexits 0 or only acceptable warnings remain.index.htmlreferences everycompositions/scene-*.htmlfile needed.vibe render my-video -o renders/final.mp4writes the expected MP4.- Final
media infoorffprobeconfirms the intended duration, fps, and codec shape.
Common Failures
Root composition not found: runvibe buildonce so the render scaffold is created, or usevibe init --profile full.needs-author: expected in--mode agent; author the listed scene files and rerun build.OPENAI_API_KEY not set: use--skip-backdropfor a local composition test, or configure the key before generating backdrops.- Render hangs at 0%: run
vibe doctor; install Chrome or setCHROME_PATH.