B-Roll to A-Roll Ratio Checker for Video Edits
A strong edit uses supplementary footage with purpose, but it is difficult to judge the overall balance by looking at a timeline in fragments.
Run — free
This B-roll to A-roll ratio checker turns the total duration of primary footage and supplementary footage into a clear percentage, then compares that percentage with a practical guidance range for the selected content type. It gives editors, producers, and reviewers a consistent starting point for discussing pacing without pretending that one ratio can replace editorial judgment.
Measure the footage that appears in the finished edit
Start with the total screen time occupied by primary A-roll and supplementary B-roll in the current cut. A-roll usually means the interview, presenter, conversation, or principal action that carries the narrative. B-roll means the supporting images placed over or around that primary material: demonstrations, locations, details, archive shots, product views, cutaways, graphics treated as footage, or other visual evidence. Enter both totals in seconds, using the same timeline boundaries and counting only material that actually appears in the edit. Do not use the duration of every source clip in a bin, because unused takes would inflate the result. The checker adds the two durations and divides B-roll by that combined total. For example, 180 seconds of B-roll within a 600-second measured edit equals 30 percent. Overlaps need a consistent rule: if an inset or split screen shows A-roll and B-roll simultaneously, choose the dominant visual category and count that interval once. This prevents double counting and keeps comparisons between successive cuts meaningful.
Read the guidance as a pacing signal, not a creative law
The result is compared with a broad range selected for the content type. Interviews often preserve more face time and therefore use a lower B-roll range, while tutorials, documentaries, and short social videos commonly need more visual changes, demonstrations, context, or pattern interruption. A result within the range means the measured balance resembles that common pacing pattern. A result below guidance suggests that the edit may rely heavily on the primary shot; look for claims that need visual proof, pauses that need coverage, transitions that feel abrupt, or stretches where attention drops. A result above guidance suggests that supplementary visuals may be displacing the speaker, lesson, or central action. Neither status proves that an edit is wrong. A compelling performance can sustain long A-roll passages, and a visual essay may appropriately exceed a documentary range. Use the difference in percentage points to size the deviation, then watch the edit at normal speed before changing it. Rhythm, shot relevance, emotional continuity, accessibility, and audience expectations remain more important than hitting a target mechanically.
Use the ratio during review and revision
Record the calculation for each meaningful cut rather than treating it as a one-time score. Early assemblies often contain long A-roll sections because supporting footage has not been placed yet. A later cut may swing too far in the other direction when every sentence receives a literal illustration. Comparing the percentage across versions helps a team see what changed and gives reviewers precise language: instead of asking for vaguely more energy, they can identify a twelve-point shortfall against the selected pacing band and discuss where additional visuals would clarify the story. Segment-level checks are useful too. A ten-minute program can have a balanced total while one chapter contains no visual relief and another is overloaded with rapid cutaways. Run the same calculation for chapters, speakers, or scenes when local pacing matters. Keep the content type stable when comparing versions, and document any deliberate exception. The API price is $0.002 per request, making the same deterministic calculation suitable for edit reports, quality-control checklists, and automated review dashboards as well as individual browser checks.
What you can do with it
Review an interview cut
Measure whether supporting scenes and cutaways provide enough visual context without hiding the speaker for most of the story.
Check a tutorial timeline
Compare presenter footage with demonstrations, screen recordings, and close-ups before the final pacing review.
Track revisions across versions
Store the percentage and guidance status for each cut so editors and stakeholders can discuss pacing changes consistently.
FAQ
What counts as B-roll?
Count supplementary visuals that support or contextualize the primary narrative, including cutaways, demonstrations, locations, detail shots, archive material, and relevant screen recordings.
Should I count unused source footage?
No. Measure screen time in the edit being reviewed, not the total duration of clips available in the project.
What happens when both durations are zero?
The request returns an invalid input error because a percentage cannot be calculated from a zero total duration.
Is a result outside the guidance range bad?
Not necessarily. It is a review signal, not a quality verdict. Story, genre, performance, visual relevance, and intended audience can justify a different balance.
How much does the API request cost?
Each API request costs $0.002. The calculation is deterministic and uses no network service or generative model.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/video2/b-roll-ratio-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a_roll_seconds":420,"b_roll_seconds":180}'const res = await fetch("https://api.kit.forhosting.com/video2/b-roll-ratio-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a_roll_seconds": 420,
"b_roll_seconds": 180
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video2/b-roll-ratio-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a_roll_seconds": 420,
"b_roll_seconds": 180
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video2/b-roll-ratio-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a_roll_seconds":420,"b_roll_seconds":180}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a_roll_seconds":420,"b_roll_seconds":180}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video2/b-roll-ratio-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"a_roll_seconds": 420,
"b_roll_seconds": 180
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video2.b_roll_ratio_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |