Skip to main content

Add AI-generated b-roll clips

Goal: add short AI-generated video clips ("b-roll") to an edited video: a cutaway shown while someone keeps talking, a cold open before the video starts, or an end card after it ends. A shot-director AI plans the clips, a generation step pays a video-generation service to make them, and the compile step places them.

This costs real money. Every generated clip is billed by the provider (MiniMax). ReelBolt caps spending at several levels, described below, and never buys anything that would go over a cap.

Prerequisites for generated b-roll​

  • The video uploaded to the project.
  • A chat AI provider.
  • A video-generation provider: an admin adds one under Admin, Inference Providers with kind MiniMax, capability VideoGeneration, endpoint https://api.minimax.io and a MiniMax API key, and marks it default (or the step names it with providerId). Testing the provider from the admin page does not cost anything.
  • Funds on the MiniMax account.

What generated clips cost​

Prices per second of generated video, as published by MiniMax and built into ReelBolt:

Model (model)Resolution (resolution)Price per second
MiniMax-H3 (default)768P (default)$0.08
MiniMax-H32K$0.13
MiniMax-H3-Max480P$0.05
MiniMax-H3-Max768P$0.08

A 6-second clip at the default settings is estimated at $0.48. Clip lengths: 4 to 15 seconds for MiniMax-H3, 5 to 15 for MiniMax-H3-Max.

Spending caps for generated clips​

Three caps protect you; a purchase must fit under all of them:

  1. Per step: maxSpendUsd on the VideoGenerate step (required, must be above 0). The whole plan's estimated cost is checked against it before anything is bought.
  2. Per project per day: set by the administrator (default $20 per project per day, counted from midnight UTC).
  3. Whole platform per day: set by the administrator (default $50 per day across all projects).

If any cap would be exceeded, nothing at all is bought and the step fails with BUDGET_EXCEEDED. There is no partial purchase. maxClips (1 to 4) also limits how many clips one step can make; planned shots beyond it are skipped, not bought.

The generated b-roll workflow​

Add the Footage edit with AI-generated b-roll template (video-derush-edit-broll) and select your video in step 1.

#LabelStep typeAgent
1Analyze source videoVideoAnalyzeVideoTransform (not an AI)
2Decide which spans to keepAgentVideoStoryEditor
3Plan generated b-roll shotsAgent (context FullWorkflow)ShotDirector
4Generate planned b-roll clipsVideoGenerateVideoTransform (calls the paid service)
5Compile edited video with generated clipsVideoCompileVideoTransform (not an AI)
6Review edit qualityReviewLoopVideoReviewAgent

Step 4 as shipped:

{"planSource": "StepRef", "plan": {"from": "Step", "stepOrder": 3},
"analysis": {"from": "Step", "stepOrder": 1},
"model": "MiniMax-H3", "resolution": "768P", "durationSeconds": 6, "ratio": "16:9",
"takes": 1, "maxClips": 4, "maxSpendUsd": 5.0,
"pollIntervalSeconds": 10, "timeoutSeconds": 1800}
  • "planSource": "StepRef" makes one clip per planned shot from step 3.
  • takes — versions per shot (1 to 4, never more than maxClips).
  • ratio — one of 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; match your footage.
  • timeoutSeconds — how long to wait for each clip (60 to 7200).

Step 5:

{"version": 1, "decision": {"from": "Step", "stepOrder": 2}, "analysisStepOrder": 1,
"enableGeneratedClips": true, "generatedClips": {"from": "Step", "stepOrder": 4},
"maxGeneratedClips": 4, "transitionPolicy": "Auto", "programFadeInMs": 500,
"programFadeOutMs": 800, "programAudioFadeInMs": 300, "programAudioFadeOutMs": 900,
"minSegmentMs": 800}

What the shot director plans​

The ShotDirector plans zero or more shots. For each it chooses:

  • a purpose: Cutaway (replaces the picture for a moment while the sound continues), ColdOpen (added before the start) or EndCard (added after the end). SeamBridge, Extend and ScreenContent are accepted words but are not placed in this version; such clips are reported as not supported;
  • where it goes: one of the offered shot, pause or phrase ids;
  • a camera word and a length word (Short, Medium, Long), which ReelBolt turns into real settings;
  • a written prompt describing the clip. This is the only text sent to the provider, after cleaning.

The shot director cannot spend money; only step 4 can, and only within the caps. Steer it through the run's brief (the Your brief box when you click Run), for example "One cutaway of a busy coffee shop when I mention the café, and an end card with a sunset over the city".

Running and re-running generated b-roll​

When you run or retry this workflow, ReelBolt asks:

  • Run and reuse previous clips (default, free): any clip with exactly the same prompt and settings that was already generated in this project, and still exists, is reused.
  • Regenerate (costs money): pay for fresh clips. The dialog shows the most it could cost.

When the review step sends the run back to step 2, unchanged clips are reused too; set step 4's "loopBackBehavior": "Regenerate" to pay for new ones on every round instead.

What to check: step 4's result lists every clip, whether it was delivered, reused or skipped, and its cost. Its detailed record (data view) is the full clip list. Step 5's result reports which clips were placed and any dropped with a reason.

Privacy: sending your own footage to the provider​

The shot director may ask for a clip to start or end on a frame from your own footage, so the clip matches visually. That frame is your footage, and once sent to a provider it cannot be called back. So:

  • allowSourceMediaEgress on step 4 is false by default. If any planned shot asks for a frame from your footage while this is false, the whole step stops with EGRESS_REFUSED before anything is bought. Either set it to true (your explicit permission) or ask for shots without frames.
  • In this version, even with permission, the frame is not actually sent: the clip is generated from its prompt alone, and the clip list records that the frame could not be used.

Variation: one clip from your own prompt​

For a single clip described by you, without the shot director, use a VideoGenerate step on its own with "planSource": "Inline":

{"planSource": "Inline", "inlinePrompt": "Slow dolly shot through a sunlit greenhouse full of ferns",
"model": "MiniMax-H3", "resolution": "768P", "durationSeconds": 6, "ratio": "16:9",
"takes": 1, "maxClips": 1, "maxSpendUsd": 1.0}

The first clip becomes the step's output video (visible in Renders). A later VideoAnalyze step can use it as its source with {"kind": "PreviousStepOutput"} or {"kind": "StepOutput", "stepOrder": 1} (the generation step's number), so it can be edited like any other footage.

Pitfalls with generated b-roll​

  • CONFIG_INVALID before anything happens: maxSpendUsd missing or 0, takes above maxClips, an unsupported resolution or ratio for the model, or planSource "StepRef" without plan.
  • BUDGET_EXCEEDED: the plan costs more than maxSpendUsd, or a daily cap is reached. Nothing was bought. Raise the step cap, ask for fewer or shorter clips, or wait for the next UTC day.
  • EGRESS_REFUSED: see the privacy section above.
  • INVALID_PROMPT: an empty prompt or one over 7000 characters (inline mode).
  • POLL_TIMEOUT: the provider took longer than timeoutSeconds. The clip may still be charged.
  • Clips not in the video: step 5 needs "enableGeneratedClips": true, generatedClips pointing at step 4, and "mode": "Reencode" (otherwise GENERATED_CLIPS_REQUIRE_REENCODE). A cutaway whose moment was cut out of the edit is dropped.
  • Unexpected re-spend: choosing Regenerate, setting loopBackBehavior to "Regenerate", or changing a clip's prompt or settings (including the shot director planning different shots) all buy new clips.