video_director
AI agent that reads a transcript and produces a SegmentPlan: time range assignments of content types (speaker, drawings, broll, empty) that downstream processors use to know what kind of content to place where.
When to use
Use after you have a transcript, before running drawings_ai_placer, broll_place, or broll_imagen_generate. The segment plan constrains those processors so they only fill the time ranges assigned to their content type.
In the editor
Add it from the Library (AI group), or with + add step and a search for video_director, after your transcript step and before the steps that fill the video with b-roll or overlays.
Under Inputs, add transcript as a step input pointing at any transcript step. Set backbone_step to the ID of the step that establishes how long the video is, usually your main cut. min_segment_sec stops it from proposing sections too short to be worth cutting to. content_types is where you tell it what kinds of section exist in your video and what each means; the default set covers a presenter, animated overlays, b-roll, and gaps.
Nothing lands on the timeline. What you get is a plan: this stretch is the presenter, this one wants b-roll, this one wants a diagram. Steps that place content read that plan through their own segment_plan input, so wire this step into each of them. Without that wiring they will still run, but they will decide placement on their own rather than following the plan.
YAML Example
- id: direct
processor: video_director
input:
- id: transcript
step: transcript
params:
backbone_step: assemble
min_segment_sec: 3.0
content_types:
- name: speaker
description: "Talking head / on-camera presenter"
- name: drawings
description: "Animated data viz or diagrams"
- name: broll
description: "Background footage"
- name: empty
description: "Gap, no overlay needed"
cache: true
Inputs
| ID | Source | Description |
|---|---|---|
transcript |
step | Any transcript step output |
Params
| Param | Type | Default | Description |
|---|---|---|---|
backbone_step |
string | none | Step ID to derive total timeline duration from |
min_segment_sec |
duration (s) | 2 |
Minimum segment length: shorter proposed segments are merged |
system_prompt |
text | none | Optional extra context appended to the system prompt |
content_types |
text | none | Custom content type definitions. Each item: {name, description} |
Output
SegmentPlan: an ordered list of time ranges with assigned content type labels and optional notes.
Notes
- Uses Puffin Ship's built-in AI: no API key required.
- Downstream processors that respect the segment plan:
broll_place,drawings_ai_placer,broll_screenshot_websource,broll_imagen_generate. - The segment plan is accessed by those processors via a
segment_planinput wired to this step. (backbone_stepis only used to compute total timeline duration, not to read the plan.)