B-Roll
Voiceover-driven B-roll editing. Drop in footage and a narration track, and the agent works out what each part of your script should show.
B-Roll
A B-roll project is the format where you hear someone narrating over footage of the thing they're describing, travel, product, lifestyle. You supply raw footage and a voiceover; the agent decides what each stretch of narration should show and cuts the visuals to match.
The narration is the spine. Footage illustrates what's being said, and the edit's timing follows the words rather than the other way round.
What You Provide
| Input | Notes |
|---|---|
| Footage | Raw video the agent selects shots from. Multiple files. Horizontal clips are fine. They're centre-cropped to vertical automatically. |
| Assets | Optional. Images and screenshots the agent can use as shots alongside the video. |
| Voiceover | An audio file, or a video you talked to camera in. Only the audio is used: a video's picture is discarded. |
| Prompt | Pacing, mood, which shots to favour, whether you want overlays. |
What Happens
The voiceover and the footage are processed independently, then meet at the assembly step.
The voiceover path. Your narration runs through the same cleaning chain as clean_cut, dead air, repeated takes, and filler words are all removed. The result is encoded to a single audio file that becomes the project's audio spine, and transcribed so the agent has word-level timings for the cleaned narration.
The footage path. Every clip is probed for its dimensions, then split into individual shots by ffmpeg scene detection, and sample frames from each shot are tiled into contact sheets. This is what lets the agent actually look at your footage. It needs no API key, shot detection and frame sampling are local ffmpeg operations, and the agent driving Montaj reads the frames itself.
Assembly. The agent segments the narration into beats (contiguous spans with a single visual subject) and assigns shots to them, placing each cut on a word onset so the visual arrives with the emphasis. Then montaj/overlay decides what overlays the video needs, based on your prompt.
You get an ordinary Montaj draft: muted footage on the primary track, cleaned voiceover on the audio track. Trimming, undo, preview, and export all behave exactly as they do in any other project.
Coverage Gaps Never Block
The agent decides what to show and for how long, and it will sometimes be wrong. Rather than stopping when it can't find a good match for a beat, it fills the gap with the best atmospheric shot it has and writes a broll_coverage.md report naming every place it was unsure: one row per beat, with a confidence of good, weak, or filler.
So the draft is always complete and watchable, and you know exactly where to look. Read the report first, fix those beats in the editor.
Reframing
Horizontal footage is centre-cropped to vertical rather than letterboxed, using the same sourceCrop primitive the clips workflow uses. When a centre crop cuts off the subject, drag it back with the editor's existing crop tool. It's a per-shot override, not a re-run.
Creating a B-Roll Project
From the UI
/projects/new → pick broll as the workflow → drop your footage, any image assets, and your voiceover file, write a prompt, and hit Assemble b-roll.
From the CLI
montaj init --workflow broll \
--clips footage/*.mp4 \
--voiceover-asset narration.wav \
--prompt "energetic, favour wide establishing shots, no overlays"--voiceover-asset is required for broll and rejected for every other workflow. The file is copied into the project workspace, so the original is left untouched.
The Voiceover Is Audio Only
This is worth stating plainly because it's the one thing people expect to work differently: if you hand Montaj a video as your voiceover, its picture is never used. Only the audio becomes part of the project. That's deliberate: the format is narration over footage, not a talking head with cutaways.
If you do want the speaker on screen, say so explicitly in your prompt.
Music
Out of scope for this workflow. Add a music track in the editor after the draft is built.