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 edit processor's reframe operation offers manual centering via center_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_clip Claude Vision calls per clip), but more accurate.
  • Samples frames_per_clip frames per clip and uses the median of detected positions.
  • Use cache: true: position detection is deterministic for the same source frames.