Skip to content

Cameras

My generated shots look random — the camera doesn't point at whoever's talking

Make sure the camera rules are wired: a rule preset drives which camera films each shot, and each camera must declare the role it frames. Libretto doesn't hardcode the framing — for every cut it scores the stage's cameras and picks the highest. If no preset is resolved, or your cameras have no roles, that scoring has nothing to go on and the result looks arbitrary.

A stage camera's Focused Roles set to a Libretto.Stage.Roles.* value

  1. Give each stage camera its FocusedRoles — the role(s) it frames (Libretto.Stage.Roles.*), or a framing tag (Libretto.Stage.Framing.Wide / Group) for a shot not tied to a participant. This is what lets BP_CameraRule_FocusedCharacter aim a shot at the current speaker.
  2. Make sure a rule preset is resolved. The plugin wires BasePreset by default (via DefaultLibretto.ini), so this usually just works. You can override it, first non-empty wins: Dialogue Instance → Stage (CameraRulesStageOverride) → Project Settings.
  3. Generate Sequences and check the generation log (Saved/GenerationLog/Cameras/<Dialogue>.txt) to see, per shot, which rule scored which camera and why one was selected.

Gotcha

Two silent causes of "random" shots: cameras with empty FocusedRoles (the focus rule has nothing to reward), and a subdialogue whose preset resolves to empty (no rule runs, so the first candidate is taken). The log tells you which: if every camera scores 0, your rules aren't firing; if scores look right but the wrong camera wins, a competing rule is out-weighing the focus rule.

See also: Camera rules — picking a preset · Staging — create your own stage

I want to control the framing — close-ups, mediums, over-the-shoulder

Give the stage several cameras per role with different Shot Types, then bias the choice with a rule. Framing is emergent: the more framing options a role has, the more the rules can vary and shape the coverage. A role with a single camera always gets the same shot.

Two cameras on one role with different Shot Types

  1. Add several ULBRStageCameraComponent per role and set each one's ShotType — nine values from FullShot and MediumShot through CloseUpShot, ExtremeCloseUpShot and the OTS_* (over-the-shoulder) variants. Point them all at the same role via FocusedRoles.
  2. For an establishing or two-shot not tied to one participant, use a framing camera (FocusedRoles = Libretto.Stage.Framing.Wide or Group).
  3. Steer which framing is chosen when by authoring a rule (e.g. alternate close-up ↔ medium, favour close-ups on emotional beats). Rules score cameras by their ShotType; see Authoring a custom rule.
  4. Tune shot pacing globally with Min Shot Length / Max Shot Length (Project Settings, defaults 2.0 / 9.0 s) — they decide how lines are grouped or split into cuts.

Gotcha

Shot types describe framing intent; they don't move a camera. An OTS_CloseUpShot only reads as over-the-shoulder if you actually place the camera behind a shoulder — the tag tells the rules how to reason about it, not where it sits.

See also: Camera rules — stage cameras & shot types · Camera rules — authoring a rule

I want smooth blends between shots instead of hard cuts

Libretto cuts by default; you opt into blending at two independent levels. A hard cut reads as deliberate cinematography, so it is the default everywhere — but you can soften two different transitions: the one between shots inside a staged scene, and the one into and out of the whole staged view.

  1. Between shots — set a camera's BlendType (ELBRBlendCameraType): None (default — cut), BlendIn, BlendOut, or BlendInOut. It controls whether the transition to/from that camera eases rather than snaps.
  2. Into / out of the staged view — on the Dialogue Instance, set EntryCameraBlendTime and ExitCameraBlendTime (category Dialogue ▸ Camera, default 0 = hard cut, up to ~2 s). Above zero, the gameplay view eases into the stage's first camera when the scene starts, and back to gameplay when it ends.

Gotcha

Entry/exit blend is a property of the Instance — a presentation choice, like the entry/exit transitions — so it can differ per placement, and a generic dialogue (no instance) falls back to a cut. The entry blend also freezes the outgoing gameplay image so the blend starts from what's actually on screen rather than from the pawn (which is being teleported to its mark) — that is what prevents a pop, and it only kicks in when the blend time is above zero. Tip: the showcase instance ties the blend to the Walk transition (blend when the character walks in, cut otherwise) — a pattern worth mirroring.

See also: Staging — entry/exit transitions · Perspective & control — staging modes

My character's head drifts out of frame when they move during a shot

Turn on Follow Focus so the camera tracks the head with an operator-like lag. Stage cameras are baked to a fixed transform, so a close-up that framed the head perfectly at the cut can lose it once the character sways or gestures. Follow Focus re-aims the active camera every frame to compensate — additively, so your authored composition is preserved and only the head's drift is corrected.

  1. On the stage camera component (Camera category), keep Use Follow Focus on — it is on by default.
  2. Tune the feel with three properties: Follow Start Delay (how long the camera holds still after the cut before reacting), Follow Dead Zone (degrees of drift ignored so idle jitter is not chased), and Follow Interp Speed (how firmly it catches up once moving).

Gotcha

Follow Focus engages only on a shot that frames exactly one character — wide/group shots and over-the-shoulder / two-shots keep their baked aim on purpose, so one moving head never drags a multi-character composition. It also corrects angular drift only (it rotates the aim, it does not dolly), so it is meant for a talking/gesturing character, not one walking across the room.

See also: Camera rules — follow focus · Animation & gestures

How do I see what each camera sees, and adjust it, without playing?

Select the camera to preview it, and press Pilot to fly it. A stage carries many cameras, so Libretto only reveals one at a time — the one you select — and lets you drive it directly in the viewport to frame the shot by eye.

  1. Turn on the master show flag Libretto Stage Previews and select the stage so its camera gizmos appear.
  2. Select a single camera component in the stage's tree — a preview inset (PiP) shows exactly what that camera frames, so you can compare shots without generating.

    The selected stage camera's preview inset (PiP) in the viewport 3. Press Pilot on that camera's Details panel to fly the viewport as the camera; move/rotate to compose, then eject — the camera keeps the orientation you left it at.

    The Staging ▸ Camera Control buttons: Pilot and Snap Camera/View

Gotcha

The preview PiP is per selected camera, by design — selecting the stage alone shows the gizmos but not a live inset, and the inset is suppressed while you're actively piloting (it would just duplicate the locked viewport). Framing you set by piloting is a normal edit of the camera component. It's usually easier to place a stage instance in a level and frame it there — against the real geometry the shot will actually see — then push the result back to the asset with the actor's Apply Instance Changes to Blueprint, rather than composing blind in the Blueprint editor.

See also: Staging — who stands where (previews) · Staging — create your own stage

My camera ends up looking at a wall, or the view snaps back to gameplay mid-scene

Give each role more than one camera, and make sure every stage has at least one valid camera. Two different mechanisms cause these symptoms — one is a runtime safety net you feed with alternatives, the other is an empty-cut fallback you avoid by always having a usable shot.

  1. Blocked by geometry — at playback, Libretto checks whether the cut camera is occluded and, if it is, switches to a sibling camera with the same focus that has a clear line of sight. So the fix is to author more than one camera per role: with no clear sibling, it has nothing to fall back to.
  2. View pops back to gameplay — a stage needs at least one valid camera, or the Camera Cuts track ends up empty and the view falls back to the gameplay camera. Check the log for shots with no selected camera.
  3. A silent stretch mid-scene — sub-sequences that carry only logic (routing, no lines) inherit the last selected camera rather than popping the view, so a gap shouldn't cut to gameplay; if it does, it's usually case 2 in that segment.

Gotcha

The occlusion fallback only swaps to a camera with the same focus — a lone camera on a role, or siblings that all share the same blocked angle, leaves nothing to switch to. Spread a role's cameras around different angles so at least one is likely to have a clear shot.

See also: Camera rules — runtime behaviour · Runtime

I want a dedicated shot for player choices — and why aren't the player's lines filmed?

Mark a camera as a choice cam, and voice player lines as real Text lines. Choice moments and player replies are handled specially by the camera system, so both need a small deliberate step.

A stage camera with Is Choice Cam ticked in its Camera details

  1. For a choice shot, tick bIsChoiceCam on the camera you want used while the player is choosing. BP_CameraRule_Choice (in BasePreset) then favours it on any shot that contains a choice.
  2. Player Reply lines are not filmed as spoken shots by design — camera selection builds its shots from Text and Choice lines only. To give the player their own on-screen shot, write a real Text line spoken by the player character (a common authoring pattern) instead of relying on the Reply's display text.

Gotcha

A choice cam is only picked when the shot actually contains a choice — it isn't a general "player camera". If your player character needs coverage during normal back-and-forth, that comes from ordinary cameras framing the player's role plus voiced Text lines, not from bIsChoiceCam.

See also: Camera rules — runtime behaviour · Writing — branch with choices