B-Roll (Kling 3)

Generate B-roll environment and product shots with Kling 3 via fal.ai.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/b-roll, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit TheMattBerman/scrollclaw/b-roll#main ~/.claude/skills/b-roll

For one project only, change the path to .claude/skills/b-roll. This skill also uses -script.md, output-log.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of B-Roll (Kling 3)

Show the full text128 lines
namedescriptionmetadata
scrollclaw-brollGenerate B-roll environment and product shots with Kling 3 via fal.ai. Environment matching, cut timing, and visual-only clips that play under continuous voice. openclaw: emoji: "🎞️ user-invocable: true triggers: - "b-roll - "kling video - "environment shot - "product shot - "broll - "b roll

B-Roll (Kling 3)

Kling 3 generates B-roll — environment shots, product close-ups, lifestyle moments. These are visual-only clips that play under the continuous voice track. Voice never cuts. B-roll swaps visuals only.

Prerequisites

  • Script with [B-ROLL] segments tagged (from /persona)
  • A-roll clips generated (from /animate) — needed for environment matching

Environment Matching

Extract a frame from the A-roll and use it as Kling's start image. This ensures B-roll looks like the same room — same floor, same lighting, same vibe. See references/orchestrator.md.

Generate context-specific first frames per scene. Don't use the podcast frame (headphones) for gym B-roll.

Cut Timing

Cut from A-roll to B-roll at a script BEAT point — not mid-sentence. The viewer should see the face deliver the setup, then cut to B-roll for the payoff visual.

Example: If Sarah says "she finishes the whole bowl" → cut to dog finishing the bowl. Match the visual to the words. Leave 0.5-1s buffer before the cut so the face isn't visible in a non-talking state.

Generation

USE scripts/generate-broll.sh — do NOT construct Kling API calls manually.

# B-roll with environment-matched start frame (RECOMMENDED)
bash scripts/generate-broll.sh \
  --provider fal \
  --image workspace/campaigns/<slug>/frames/environment-frame.png \
  --prompt-file workspace/campaigns/<slug>/broll-prompt.txt \
  --output workspace/campaigns/<slug>/clips/b-roll-01.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label b-roll-01 \
  --seconds 5

# Faceless B-roll (no start frame needed)
bash scripts/generate-broll.sh \
  --provider fal \
  --prompt-file workspace/campaigns/<slug>/broll-prompt.txt \
  --output workspace/campaigns/<slug>/clips/b-roll-02.mp4 \
  --log-file workspace/campaigns/<slug>/output-log.md \
  --label b-roll-02 \
  --seconds 5

API Reference

Read references/kling-api.md for Kling 3 endpoint details, field names, and queue workflow on fal.ai.

Key Findings

  • Kling generates in ~100s vs Sora's 5-10 min. Use Kling for ALL B-roll.
  • Same character face image feeds both engines for identity consistency
  • AI cannot generate realistic app screens or UI text. For product/app demos: use real screenshots or screen recordings.
  • The orchestrator doc (references/orchestrator.md) has the full A/B-roll split methodology

Brand Memory Integration

Reads
File Purpose
workspace/campaigns/<slug>/frames/environment-frame.png Environment-matched start frame for Kling i2v
workspace/campaigns/<slug>/clips/a-roll-*.mp4 Source clips to extract environment frames from
workspace/campaigns/<slug>/scripts/<format>-script.md B-roll segments and visual cues
Writes
File Notes
workspace/campaigns/<slug>/clips/b-roll-01.mp4 One file per B-roll segment
workspace/campaigns/<slug>/output-log.md Kling prompt, duration, provider (append-only)
Context loading
🎞️ B-Roll context loaded:
  ✓ Environment frame: workspace/campaigns/ridge-q1/frames/environment-frame.png
  ✓ A-roll clips: 3 found (workspace/campaigns/ridge-q1/clips/)
  ✓ Script: talking-head (B-roll segments: 2)
  ✓ Campaign: ridge-q1

Contract

Input
  • Required: [B-ROLL] script segments plus either an environment frame or usable A-roll clips for extraction
  • Optional: product screenshots, faceless B-roll prompts, campaign brief for scene grounding
  • Format: workspace image/video files plus B-roll prompt text
  • Source: /animate, /persona, and references/orchestrator.md
Output
  • Produces: one visual-only B-roll clip per segment plus append-only generation logs
  • Format: MP4 files in workspace/campaigns/<slug>/clips/ and rows in output-log.md
  • Default behavior: use Kling with an environment-matched start frame; for app demos, use real screenshots or recordings instead of AI UI generation
  • Downstream use: /assemble
Validation
  • Pre-conditions: the cut point is clear in the script and there is enough scene context to match the A-roll environment
  • Post-conditions: clip visually fits the voice beat, feels like the same world as the A-roll, and saves locally
  • Failure checks: do not accept stock-looking B-roll, mismatched rooms, or fake app UI when the product needs a real screen

Output

  • B-roll clips (MP4) in workspace/campaigns/<slug>/clips/
  • Each clip named b-roll-<segment>.mp4 corresponding to a [B-ROLL] script segment
  • Clips are visual-only — no dialogue
  • Generation params logged to workspace/campaigns/<slug>/output-log.md

Next Step

B-roll done → run /assemble to stitch everything together with unified audio.

1---
2name: scrollclaw-broll
3description: "Generate B-roll environment and product shots with Kling 3 via fal.ai. Environment matching, cut timing, and visual-only clips that play under continuous voice."
4metadata:
5 openclaw:
6 emoji: "🎞️"
7 user-invocable: true
8 triggers:
9 - "b-roll"
10 - "kling video"
11 - "environment shot"
12 - "product shot"
13 - "broll"
14 - "b roll"
15---
16 
17# B-Roll (Kling 3)
18 
19Kling 3 generates B-roll — environment shots, product close-ups, lifestyle moments. These are visual-only clips that play under the continuous voice track. Voice never cuts. B-roll swaps visuals only.
20 
21## Prerequisites
22 
23- Script with `[B-ROLL]` segments tagged (from `/persona`)
24- A-roll clips generated (from `/animate`) — needed for environment matching
25 
26## Environment Matching
27 
28Extract a frame from the A-roll and use it as Kling's start image. This ensures B-roll looks like the same room — same floor, same lighting, same vibe. See `references/orchestrator.md`.
29 
30Generate **context-specific first frames** per scene. Don't use the podcast frame (headphones) for gym B-roll.
31 
32## Cut Timing
33 
34Cut from A-roll to B-roll at a script BEAT point — not mid-sentence. The viewer should see the face deliver the setup, then cut to B-roll for the payoff visual.
35 
36Example: If Sarah says "she finishes the whole bowl" → cut to dog finishing the bowl. Match the visual to the words. Leave 0.5-1s buffer before the cut so the face isn't visible in a non-talking state.
37 
38## Generation
39 
40**USE `scripts/generate-broll.sh` — do NOT construct Kling API calls manually.**
41 
42```bash
43# B-roll with environment-matched start frame (RECOMMENDED)
44bash scripts/generate-broll.sh \
45 --provider fal \
46 --image workspace/campaigns/<slug>/frames/environment-frame.png \
47 --prompt-file workspace/campaigns/<slug>/broll-prompt.txt \
48 --output workspace/campaigns/<slug>/clips/b-roll-01.mp4 \
49 --log-file workspace/campaigns/<slug>/output-log.md \
50 --label b-roll-01 \
51 --seconds 5
52 
53# Faceless B-roll (no start frame needed)
54bash scripts/generate-broll.sh \
55 --provider fal \
56 --prompt-file workspace/campaigns/<slug>/broll-prompt.txt \
57 --output workspace/campaigns/<slug>/clips/b-roll-02.mp4 \
58 --log-file workspace/campaigns/<slug>/output-log.md \
59 --label b-roll-02 \
60 --seconds 5
61```
62 
63## API Reference
64 
65Read `references/kling-api.md` for Kling 3 endpoint details, field names, and queue workflow on fal.ai.
66 
67## Key Findings
68 
69- Kling generates in ~100s vs Sora's 5-10 min. Use Kling for ALL B-roll.
70- Same character face image feeds both engines for identity consistency
71- **AI cannot generate realistic app screens or UI text.** For product/app demos: use real screenshots or screen recordings.
72- The orchestrator doc (`references/orchestrator.md`) has the full A/B-roll split methodology
73 
74## Brand Memory Integration
75 
76### Reads
77| File | Purpose |
78|------|---------|
79| `workspace/campaigns/<slug>/frames/environment-frame.png` | Environment-matched start frame for Kling i2v |
80| `workspace/campaigns/<slug>/clips/a-roll-*.mp4` | Source clips to extract environment frames from |
81| `workspace/campaigns/<slug>/scripts/<format>-script.md` | B-roll segments and visual cues |
82 
83### Writes
84| File | Notes |
85|------|-------|
86| `workspace/campaigns/<slug>/clips/b-roll-01.mp4` | One file per B-roll segment |
87| `workspace/campaigns/<slug>/output-log.md` | Kling prompt, duration, provider (append-only) |
88 
89### Context loading
90 
91```
92🎞️ B-Roll context loaded:
93 ✓ Environment frame: workspace/campaigns/ridge-q1/frames/environment-frame.png
94 ✓ A-roll clips: 3 found (workspace/campaigns/ridge-q1/clips/)
95 ✓ Script: talking-head (B-roll segments: 2)
96 ✓ Campaign: ridge-q1
97```
98 
99## Contract
100 
101### Input
102- Required: `[B-ROLL]` script segments plus either an environment frame or usable A-roll clips for extraction
103- Optional: product screenshots, faceless B-roll prompts, campaign brief for scene grounding
104- Format: workspace image/video files plus B-roll prompt text
105- Source: `/animate`, `/persona`, and `references/orchestrator.md`
106 
107### Output
108- Produces: one visual-only B-roll clip per segment plus append-only generation logs
109- Format: MP4 files in `workspace/campaigns/<slug>/clips/` and rows in `output-log.md`
110- Default behavior: use Kling with an environment-matched start frame; for app demos, use real screenshots or recordings instead of AI UI generation
111- Downstream use: `/assemble`
112 
113### Validation
114- Pre-conditions: the cut point is clear in the script and there is enough scene context to match the A-roll environment
115- Post-conditions: clip visually fits the voice beat, feels like the same world as the A-roll, and saves locally
116- Failure checks: do not accept stock-looking B-roll, mismatched rooms, or fake app UI when the product needs a real screen
117 
118## Output
119 
120- B-roll clips (MP4) in `workspace/campaigns/<slug>/clips/`
121- Each clip named `b-roll-<segment>.mp4` corresponding to a `[B-ROLL]` script segment
122- Clips are visual-only — no dialogue
123- Generation params logged to `workspace/campaigns/<slug>/output-log.md`
124 
125## Next Step
126 
127B-roll done → run `/assemble` to stitch everything together with unified audio.
128 

Discussion

Alternatives

Also in Video productionSee all 320 in Content creator →