M MotionSteer
O OpenBeat music → video
Back to MotionSteer
Step 01 · Audio analysis · Web Audio API

Bring me a track.

Drop a wav or mp3. The browser detects tempo, builds the beat grid, finds the downbeats (your cut points), and traces the energy curve — all locally, before any cloud call.

Drop an audio file
wav · mp3 · flac — analyzed in-browser, nothing uploaded
Step 02 · The director · gemini-3.5-flash

Set the brief.

Meta and style anchor every scene prompt. Lyrics let the director sync visuals to words; leave blank for instrumental. The LLM cuts on your downbeats and sets shot length by energy.

Title Artist Visual style — appended to every prompt Mood
Lyrics — line per cut, or leave blank

Generation models

9:16 · 15s
Keyframe model
~$0.04 / image
Video model
8s clip · 720×1280 · 24fps
Snap cuts to beat
≤52–56% F1 · editable after
POST /api/storyboard · temperature 0.2 · thinkingBudget 0
Step 03 · Storyboard · gapless scenes on the downbeat

The cut list.

Five gapless scenes covering 0–15s, boundaries snapped to downbeats. Edit any visual prompt before you spend a cent on rendering. Timings are a suggestion — adjust them.

Visual anchor · appended to every prompt
Desert noir music video, neon-lit gas station at midnight, 35mm anamorphic film grain, deep shadows, magenta & amber practicals, lonesome dark-trap atmosphere.

Timeline

0:00 → 0:15cuts on 94 BPM
0s3s6s9s12s15s
5 scenes · gapless · 2–5s each
Step 04 · Keyframes → Veo clips

Render the scenes.

Each scene gets a keyframe (Nano Banana) then an image-to-video clip (Veo). Trial image quota is ~2/min, so the server backs off on 429 — generating all takes a few minutes.

keyframes 0/5 · clips 0/5 est. $5.04
POST /api/keyframe · POST /api/clip · Veo polls ~8s × up to 60
Step 05 · ffmpeg merge → finished MP4

Ship the clip.

Each Veo clip is trimmed to its scene length, concatenated, then muxed with your original audio. Out comes a 720×1280 vertical MP4 — beat-synced, cuts on the downbeat.

Coyote_Radio_1-33_15s.mp4
9:16 · 720×1280 · 24fps · 15.0s · 8.4 MB

ffmpeg merge

complete
Cut segment → segment.wav
ffmpeg -ss 93 -t 15 -ac 2 -ar 48000 -c:a pcm_s16le
Trim each clip to scene length · 720×1280@24
scale=720:1280:force_original_aspect_ratio=increase,crop=720:1280
Concat clips (stream copy)
ffmpeg -f concat -safe 0 -i concat.txt -c copy
Mux video + original audio
ffmpeg -i montage.mp4 -i segment.wav -c:v copy -c:a aac -b:a 192k -shortest
Export package
MP4
Final video
720×1280 · h.264 · muxed audio
ZIP
CapCut package
clips + keyframes + assembly
JSON
Project + storyboard
full Project object · re-importable
SRT
Lyric subtitles
timed to scene boundaries
scenes rendered5 / 5 total veo seconds15.0 s keyframe spend$0.20 veo spend$6.00 · 15s × $0.40 total compute$6.20
output/ · gitignored · ffprobe to verify 720×1280