VibeFrame Recipes

July 26, 2026 · View on GitHub

Verified recipes for common VibeFrame workflows.

These examples use the current top-level CLI surface: vibe init, vibe build, vibe render, vibe generate, vibe edit, vibe remix, and vibe run. Run vibe doctor first to confirm FFmpeg, Chrome/Chromium, and configured API keys.

vibe doctor

1. Clean Up An Interview

Use this when you already have a recording and want a cleaner edit with captions.

Requires:

  • FFmpeg for silence cutting and noise reduction
  • OPENAI_API_KEY for Whisper captions
vibe edit silence-cut interview.mp4 -o interview-trimmed.mp4
vibe edit noise-reduce interview-trimmed.mp4 -o interview-clean.mp4
vibe edit caption interview-clean.mp4 -o interview-captioned.mp4

Preview paid or destructive-looking steps before running them:

vibe edit caption interview-clean.mp4 -o interview-captioned.mp4 --dry-run

2. Generate An Image, Then Animate It

This is the recommended AI media generation path: create a still frame first, then use it as the reference image for image-to-video.

Requires:

  • OPENAI_API_KEY, GOOGLE_API_KEY, XAI_API_KEY, or another supported image provider key
  • FAL_API_KEY for Seedance via fal.ai
  • IMGBB_API_KEY when the selected video provider needs an HTTPS image URL
vibe generate image \
  "A cinematic product demo frame, clean terminal UI, blue highlights" \
  -p openai \
  -s 1536x1024 \
  -o frame.png

vibe generate video \
  "Slow camera push-in, subtle interface motion, polished product demo" \
  -p seedance \
  -i frame.png \
  -d 8 \
  -r 16:9 \
  -o motion.mp4

Notes:

  • seedance is the explicit provider name. fal remains a compatibility alias.
  • Seedance currently accepts -d values from 4 to 15 seconds.
  • Other video providers have different duration constraints; run vibe generate video --help before switching providers.

3. Build A Storyboard Video

Use this when you want to author a video from STORYBOARD.md and DESIGN.md. This is the main "storyboard to final video" workflow.

Requires:

  • Chrome or Chromium for HTML scene capture
  • FFmpeg for final media assembly
  • Provider keys only for the generation steps you use
  • Kokoro can be used for local narration when available
vibe init my-video --profile agent --visual-style "Swiss Pulse" -r 16:9 -d 18

Edit:

  • my-video/STORYBOARD.md
  • my-video/DESIGN.md

Then build and render:

vibe build my-video --dry-run
vibe build my-video --tts kokoro
vibe render my-video -o renders/my-video-final.mp4 --quality standard

Use these flags to control cost and regeneration:

vibe build my-video --skip-narration
vibe build my-video --skip-backdrop
vibe build my-video --force

vibe build prepares assets and scene composition. vibe render exports the final MP4/WebM/MOV.

4. Turn Long Video Into Shorts

Use this when you have existing long-form content and want highlights or vertical clips.

Requires:

  • FFmpeg for clipping/reframing
  • GOOGLE_API_KEY when using Gemini visual+audio analysis
  • OPENAI_API_KEY when captions/transcription are needed

Extract highlight metadata:

vibe remix highlights long-video.mp4 \
  -n 3 \
  -d 60 \
  --use-gemini \
  -o highlights.json

Generate vertical shorts:

vibe remix auto-shorts long-video.mp4 \
  -n 3 \
  -d 45 \
  -a 9:16 \
  --add-captions \
  -o ./shorts/

Manual path for one selected clip:

vibe edit reframe highlight-clip.mp4 -a 9:16 -o vertical.mp4
vibe remix animated-caption vertical.mp4 -s bounce -o vertical-captioned.mp4

5. Run A Video-As-YAML Pipeline

Use vibe run when you want a reproducible workflow with step references, budgets, dry-runs, and checkpoints.

Create promo.yaml:

name: promo
budget:
  costUsd: 5
  maxToolErrors: 2
steps:
  - id: image
    action: generate-image
    prompt: "A cinematic developer-tool hero frame"
    provider: openai
    output: frame.png

  - id: video
    action: generate-video
    prompt: "Slow camera push-in, subtle interface motion"
    image: $image.output
    provider: seedance
    duration: 8
    output: motion.mp4

  - id: grade
    action: edit-grade
    input: $video.output
    preset: cinematic-warm
    output: final.mp4

Run it:

vibe run promo.yaml --dry-run
vibe run promo.yaml --budget-usd 5
vibe run promo.yaml --resume

Checkpoints are written next to the YAML file. Use --resume after fixing a failed provider key, network issue, or invalid step input.

6. Add A Lottie Animation Overlay

Use this when you have a Lottie animation (.json or .lottie from LottieFiles or your own exports) and want to composite it over an existing video.

Requires:

  • Chrome or Chromium (Hyperframes renderer)
  • FFmpeg for final compositing
  • A .json or .lottie animation file

Overlay a Lottie logo on a product demo:

vibe edit motion-overlay demo.mp4 \
  --asset logo.lottie \
  --position bottom-right \
  --scale 0.25 \
  --opacity 0.9 \
  -o demo-branded.mp4

Preview the parameters first:

vibe edit motion-overlay demo.mp4 \
  --asset logo.lottie \
  --position bottom-right \
  --scale 0.25 \
  --dry-run

Full-screen animated intro card:

vibe edit motion-overlay intro.mp4 \
  --asset intro-card.json \
  --position full \
  --duration 3 \
  --no-loop \
  -o intro-with-card.mp4

Available positions: full, center, top-left, top-right, bottom-left, bottom-right. The overlay loops by default; pass --no-loop for one-shot animations. Use --start <sec> to delay when the overlay appears.

7. Compose VibeFrame Footage With HyperFrames

VibeFrame and upstream HyperFrames each own half of a narrated, footage-led video: VibeFrame generates the frontier clips (cast continuity, keyframe review, a hard --max-cost), and HyperFrames' faceless-explainer workflow owns narration timing, word-synced captions, a designed frame system, and transitions. This recipe runs them together. It was validated end to end on 2026-07-26; the sharp edges below are all from that run.

Requires:

  • image + video provider keys for the vibe side (e.g. GOOGLE_API_KEY, FAL_API_KEY, and RUNWAY_API_SECRET for the face-shot fallback)
  • npx hyperframes ≥ 0.7.72 with its skills installed
  • for local TTS: a Python ≥ 3.10 venv with kokoro-onnx (see step 3)

1. Generate the footage with vibe. Author scenes with keyframe: + video: cues and a characters: pool, then build assets only - narration, music, and composition belong to the other side:

vibe init film --from brief.md
vibe build film --dry-run --max-cost 8 --json     # price gate
vibe build film --stage assets --skip-video \
  --skip-narration --skip-music --skip-backdrop   # stills first - review them
vibe build film --stage assets \
  --skip-narration --skip-music --skip-backdrop   # animate approved stills

Review the keyframes before animating: cross-scene prop drift (a kettle changing color between scenes) is cheap to fix at the still stage and expensive after. If Seedance rejects a face-visible keyframe (HTTP 422 likeness filter - see MODELS.md), route that shot through Runway:

vibe generate video "<the scene's motion prompt>" \
  -p runway -i film/assets/keyframe-<beat>.png -d 5 \
  -o film/assets/video-<beat>.mp4

2. Hand the clips to a HyperFrames project. Scaffold with the faceless-explainer skill, copy the clips into public/, and write its SCRIPT.md with the same narration your scenes carried (VO_MODE: verbatim). One script, both sides - if they drift, visuals and voice disagree.

3. Let upstream own the timing. Its audio.mjs synthesizes narration (Kokoro locally - a Python dependency, unlike vibe's built-in Kokoro: uv venv --python 3.12 && uv pip install kokoro-onnx soundfile, then export HYPERFRAMES_PYTHON=<venv>/bin/python), and sync-durations sets each frame's length from the measured voice.

Three sharp edges, all hit in the validation run:

  • Duration has no floor upstream. sync-durations REPLACES a frame's duration with the voice length (vibe keeps max(declared, voice)), so a 5s clip under a 2s narration line gets hard-trimmed. Write narration long enough for the shot, or add silent frames - upstream keeps their estimates.
  • Frame ids start with digits (01-grind), and .01-grind-x is an illegal CSS/querySelector selector. Prefix authored classes with a letter (f01-) or gsap throws before registering the timeline and the render "completes" with frozen motion.
  • Give every <video> an id. Upstream lint enforces it (media_missing_id) - without one the renderer cannot drive the video and it renders frozen.

4. Render upstream (npx hyperframes lint && npx hyperframes render) and you get the hybrid: your generated footage under their word-synced captions and design system.

Tips

  • Use --dry-run before provider-backed steps.
  • Add --json where available when an agent needs structured output.
  • Use vibe schema --list --surface public to inspect the first-run command surface.
  • Use vibe guide for built-in step-by-step guides.
  • Prefer explicit providers in docs and demos, for example -p openai or -p seedance, so new users can see which API key is required.