speaker_center
Uses Claude Vision to identify the horizontal position of the main speaker in each backbone clip, then emits PositionX patches to center them in the output frame.
When to use
Use after reframe for accurate per-clip speaker centering. More accurate than motion_center because it uses vision to find the speaker specifically, rather than motion. See Portrait Video guide.
Tip: The
editprocessor'sreframeoperation offers manual centering viacenter_fraction. This processor remains the option for automatic speaker detection.
In the editor
Add it from the Library (Transforms group), or with + add step and a search for speaker_center, after your reframe step.
Under Inputs, add source as a step input pointing at the step that placed the clips you want centered, usually your main cut. That is the one wiring it needs. backbone_level limits it to a single level (main by default), and frames_per_clip is how many frames it looks at before deciding, so higher numbers cost more and steady the answer. center_fraction is an escape hatch for when it keeps choosing the wrong person or object: set it and the detection is ignored.
It adds no clips, so the run timeline looks the same. What changes is the framing of the existing clips in the preview and the export, clip by clip, so a speaker who moves between takes stays centered in each one. It costs an AI call per sampled frame, which is why motion_center exists as the cheaper, blunter alternative.
YAML Example
- id: center
processor: speaker_center
input:
- id: source
step: ai_cut # edit decisions to center
params:
backbone_level: main
frames_per_clip: 3
cache: true
Inputs
| ID | Source | Description |
|---|---|---|
source |
step | Edit decisions to apply centering to |
Params
| Param | Type | Default | Description |
|---|---|---|---|
backbone_level |
level | "main" |
Only center clips on this level |
frames_per_clip |
number | 3 |
Frames to sample per clip for position detection |
center_fraction |
number | none | Override the detected position (0–1). 0.5 = center. Use when Claude Vision consistently detects the wrong position. |
Output
TransformPatches: per-EditDecision PositionX adjustments.
Notes
- Uses Puffin Ship's built-in AI: no API key required.
- More API cost than
motion_center(frames_per_clipClaude Vision calls per clip), but more accurate. - Samples
frames_per_clipframes per clip and uses the median of detected positions. - Use
cache: true: position detection is deterministic for the same source frames.