---
title: "Read a capture beat's screen look."
method: GET
path: "/trailers/{jobId}/beats/{beatIndex}/capture-look"
tags: ["Trailer"]
---

# Read a capture beat's screen look.

`GET /trailers/{jobId}/beats/{beatIndex}/capture-look`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/trailers/{jobId}/beats/{beatIndex}/capture-look`
- Auth: HTTP bearer

Returns one capture beat's screen look (`look`): 3D depth on or off, the camera move as set, planned and played, the turn's angle in degrees at its first and last frame (and why the angles do nothing on a square move or a flat preset), where the turn is held, the depth of field, the deepest punch-in, the cursor, the device frame and the background — each value with its `source` (`preset`, `trailer` or `beat`); null when it plays full frame. Also its preset, its own and the trailer's tuning, and what the last master played. A capture beat's screen look is how its recording is staged: whether it plays with 3D depth at all, which way the camera turns (or square, with a slow push or still), the turn's angle from the beat's first frame to its last, how far the depth of field softens the far side, how deep the punch-ins go, how long the recording holds the whole screen wide at the start, how long the recording holds the whole screen wide at the end and how close two wide moments may sit, how much the camera drifts through a quiet stretch and how far a wide stretch pushes in, how wide the camera circles the window (or none at all), how long the reading push holds each still moment, how deep it pushes and how soon it may repeat, how dark the rest of the screen goes while a shot holds on one control (and how long it takes to dim, and how briefly it may hold there), the cursor (its size, skin, colour, shadow, click sparks (and how big their burst is) and how strongly the ring under an arrow's click shows, motion blur, how it glides, how briefly it may take and how long it rests on a control before it presses, how far the press squashes the cursor and how long it holds there, how much it bounces on a click and how hard and how long it presses, where its shadow sits and how soft it is), how far the screen leans into a fast pointer move, how long the camera rests wide after a read, how close two click punch-ins may sit before they merge and the gap under which two moves chain into a pan, how hard a click presses and rocks the picture, how loud a click sounds (and how far it drops under a spoken line, and how close two may sit), the ring around what a click opened (how fast it draws in, how long it holds, when it is gone and how thick it is), how the caption arrives and leaves, the tap mark's timing on a phone (how early it appears, how long it holds and fades, how far its ring grows), the device frame (on a laptop or phone, its screen edge and screen corners) and the background (a drifting stage's drift speed and how far it travels), how much room is around the app, how round its corners are and how deep its shadow falls, and how far a dark app's white page load is dimmed. The motion blur follows the film's own choice. Each value is the preset's, the trailer's tuning or the beat's own; resetting returns the beat to the trailer's look exactly. Free: saving re-renders only the picture of the beats it changes on the next preview or finish. Not the trailer's film look (`/trailers/{jobId}/look`). Scope: `story:read`.

## Response `200`

The beat's screen look.

- TrailerBeatCaptureLookView
  - `jobId` string, required
  - `beatIndex` integer, required
  - `beatNumber` integer, required
  - `captureId` string, nullable, required
  - `preset` object, required
    - `requested` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero', nullable, required
    - `source` 'beat' | 'trailer', nullable, required
    - `beat` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero' | 'none', nullable, required
    - `trailer` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero', nullable, required
  - `beatOverrides` CaptureDepthOverrides, required: Depth tuning deltas over a preset (M-003): cursor/camera/tilt numbers, each clamped to the preset bounds when read, the stage's look (S3b: a device frame, the background's colours and motion — a project's brand, and how much room is around the app, how round its window's corners are and how deep its shadow falls) and the cursor's look (S3c: arrow, hand or auto, its size, colour, shadow, click bounce and sparks, motion blur) and the tap mark's timing on a phone (BL-1223: how early it appears before a press, how long it holds and fades, and how far its lift's ring grows); stored as deltas only. A preset's look (its device frame, its background and its cursor) stays when a beat plays calmer: a beat moved to a gentler preset so its words stay readable, the still version it is checked against, and the quicker version made when the full one cannot be rendered all keep the look that was asked for and lose only motion (the camera and the tilt). Only reading outranks the look: when the app's words would render smaller than the preset's smallest readable size, the margins shrink first, then the device frame is left off.
    - `stage` object: The stage's look: the device the recording sits in, the background behind it, and how much room is around the app, how round its corners are and how deep its shadow falls.
      - `frame` object
        - `bezelPx` number: On a drawn laptop or phone (BL-1225): how thick its black screen edge is, px at 1080p.
        - `radiusPx` number: On a drawn laptop or phone (BL-1225): how round its screen corners are, px at 1080p (a phone follows its own size).
        - `barShare` number: On a window or browser frame (BL-2537): how tall its title bar or tab strip is, a share of the recording's height (0.05 on a window and 0.075 on a browser today). A laptop, a phone or no frame ignores it.
        - `kind` 'none' | 'auto' | 'window' | 'browser' | 'laptop' | 'phone': The device frame: none, auto (the device that fits the recording: a laptop around a landscape one, a phone around a portrait one), a window bar, a browser bar, a laptop or a phone. A laptop or phone always follows the recording's shape.
        - `tone` 'dark' | 'light'
      - `shadow` object: The window's shadow: which way it falls (BL-464) and how deep it falls (BL-394).
        - `from` 'light' | 'down': Which way the window's shade falls: `down` — today's picture, what an absent key reads as; `light` — away from the stage's lit middle. Omit to leave it as it is.
        - `opacity` number: How deep the window's shadow falls: 0 is none.
        - `blurPx` number: How soft the window's shadow is, px at 1080p (BL-2416).
        - `offsetYPx` number: How far the window's shadow drops below it, px at 1080p (BL-2416).
        - `spreadPx` number: How far the shadow is pulled in under the window, px at 1080p (BL-2416); lower tucks it in.
      - `framing` object: How big the app sits in the frame and where (BL-2416): `whole` inside the stage's room (sized by `padding`), or `close`, a product shot filling `fill` of the frame and moved off centre by `offsetX`/`offsetY`. Setting `fill` or an offset without `kind` frames the app close. A close framing that would cut off the words a beat is about plays whole for that beat.
        - `kind` 'whole' | 'close'
        - `fill` number: The share of the frame the recording fills; past 1 the device bleeds off the frame.
        - `offsetX` number: Left (negative) or right (positive) of centre, a share of the frame.
        - `offsetY` number: Up (negative) or down (positive) of centre, a share of the frame.
      - `background` object
        - `stops` string[]: The background's colours, darkest first.
        - `motion` 'still' | 'drift' | 'waves': Whether the background holds still, drifts slowly, or rolls in slow waves.
        - `driftSeconds` number: On a drifting stage: how long the drift takes to travel its lap, seconds (4–60; 24 today). Lower is faster.
        - `driftReach` number: On a drifting stage: how far it drifts, as a share of the frame (0–0.1; 0.04 today). Higher travels further.
        - `auroraWash` number: On an aurora stage (BL-2539): how far the base colour washes toward the second colour (0–0.6; 0.2 today). A gradient or solid stage ignores it.
        - `auroraGlow` number: On an aurora stage: how strong its glows are, a multiplier on each (0–2; 1 today, 0 none).
        - `auroraEdgeFalloff` number: On an aurora stage: how much of the centre's light the frame's edges keep (0.3–1; 0.62 today, 1 no falloff).
        - `source` 'brand' | 'scene': Where the stage stands: `brand` — the project's brand gradient (as every stage stood until now); `scene` — the beat's own room, its location's accepted plate blurred and darkened behind the window. Omit to leave it as it is.
      - `reflection` boolean: True draws a faint mirror of the window's own bottom edge on the stage underneath it; false draws none. Omit to leave it as it is.
      - `padding` number: How much room is around the app: 0 fills the frame with the window, 0.6 leaves the widest margin.
      - `radiusPx` number: How round the window's corners are, px at 1080p: 0 is square.
      - `pageLoadDim` number: How far a dark app's white page load is dimmed (BL-1168): 0 leaves it exactly as recorded, 0.85 (today) the deepest.
      - `address` object: The browser frame's address pill (BL-2536). Omit either to keep today's.
        - `labelMax` integer: How many characters of a long address the pill keeps, the last one an ellipsis (64 today).
        - `loadFadeMs` number: How long the page-load fill under the address takes to leave once the page has loaded, ms (200 today; 0 cuts it at once).
        - `markTone` string: The little site letter's tile colour on any barred frame (BL-2534), #rrggbb: held to the nearest of the 32 site-letter tones (same lightness, every hue). Omit it and each site's name picks its own tone.
      - `windowRim` object: The hairline edge around a window on the stage (BL-2535); a laptop or a phone draws its own body edge and takes none. Omit for the automatic hairline.
        - `widthPx` number: How thick the edge is, px at 1080p (absent: about 1 px, one per 600 px of the window's short side).
        - `tone` 'auto' | 'light' | 'dark': `auto` — the stage decides (white on a dark stage, near-black on a light one); `light` — a white edge; `dark` — a near-black edge.
      - `mirror` object: The mirror under the window (BL-1325): how far it reaches, how soft its far edge goes and how strong it starts. Each omitted is today's mirror; `reflection: false` still turns it off.
        - `reach` number: How far the mirror hangs, as a share of the window's height (a third today).
        - `blurPx` number: How soft its far edge goes, px at 1080p (6 today).
        - `opacity` number: How strong it starts at the window's edge (absent: the frame's tone decides — 0.3 on a dark frame, 0.22 on a light one).
    - `cursor` object: The cursor: its look (S3c: never stepped down) and its feel. Sizes and shadow offsets are px at 1080p.
      - `skin` 'arrow' | 'hand' | 'auto': arrow, hand, or auto (the hand over anything clickable, the arrow elsewhere).
      - `sizePx` number: The cursor's height in px at 1080p.
      - `fill` string: The cursor's fill colour.
      - `shadow` object: Its drop shadow: where it sits under the pointer, how soft it is, and how deep (opacity 0 is none).
        - `offsetX` number: Across, px at 1080p.
        - `offsetY` number: Down, px at 1080p.
        - `blurPx` number: How soft, px at 1080p.
        - `opacity` number
      - `click` object: A click: bounce 0–2 (a squash, an overshoot and a spring back; 0 is the press alone) sparks (the click's flourish: short strokes off the hand's fingertip, a soft ring under the arrow; false draws neither) ripple 0–1 (how strongly the arrow's ring shows; 0 is none, 1 the default) and sparkSize 0.5–2 (how big the hand's spark burst is, scaled as one; 1 the default).
        - `bounce` number
        - `sparks` boolean
        - `ripple` number
        - `sparkSize` number
      - `motionBlur` number: How much it smears along its path while it moves fast: higher is a longer, softer smear, 0 is none (0–1).
      - `smoothing` number: How softly it eases into and out of each move: higher is a smoother, rounder path, lower a crisper one (0–1).
      - `pressScale` number: How far it dips on every click, as a share of its own size: lower is a deeper press, 1 is no dip (0.8–1).
      - `pressMs` number: How long it stays pressed on every click, ms: shorter is a snappier press (40–250).
      - `glideMinMs` number: The least time it takes for any move, even a short hop, ms: higher keeps it from jumping onto a button (150–600).
      - `glideMaxMs` number: The most time it takes for any move, even across the whole screen, ms: higher is slower travel, lower if it drags; never under the least time for a move (300–1000).
      - `preClickPauseMs` number: How long it rests on its target before it clicks, ms: 0 clicks the moment it arrives (0–400).
      - `leanDeg` number: How far the pointer itself leans into its sideways travel, degrees (0 stands it upright). The screen's own lean into the move is tilt.lean.
      - `lift` number: How far the pointer lifts off the page while it travels (its shadow spreads, softens and fades in flight): 0 keeps the shadow glued to the page, 1 is the full lift and the default (0–1).
    - `touch` object: The tap mark a phone frame draws instead of the cursor (BL-1223): how early it appears before the press, how long it holds, how long it fades and how far the lift's ring grows past the disc. The three times are milliseconds; ringGrowth is a share of the disc's radius.
      - `leadMs` number
      - `holdMs` number
      - `fadeMs` number
      - `ringGrowth` number
    - `typing` object: The glow over the field being typed into (BL-2497): how early it arrives before the first keystroke and how long it lingers after the last. A secret field's veil eases in over the same lead.
      - `glow` object
        - `leadMs` number: How early the glow arrives before the typing, ms (150 today).
        - `tailMs` number: How long the glow lingers after the typing, ms (400 today).
        - `strength` number: How big and bright the glow is, as a share of today's halo (1 today; 0 draws none; BL-2481).
    - `follow` object: How closely the camera follows the pointer between shots (BL-2496): how far off-centre the pointer may sit before the camera drifts, how far past that the drift firms up, and how firmly it corrects.
      - `deadZone` number: How far off-centre the pointer may sit before the camera drifts after it, a share of the half-frame (0.5 today).
      - `ramp` number: How far past that the drift eases from its gentlest to its firmest, a share of the half-frame (0.15 today; 0 firm at once).
      - `strength` number: How firmly the drift corrects toward the pointer, × today's (1 today; 0 never follows).
    - `clickImpact` object: How a click presses and rocks the picture (BL-1286).
      - `ms` number: How long the press plays, ms (260 today).
      - `dip` number: How deep the picture dips (0.24 today).
      - `rise` number: How far it rebounds past the press (0.16 today).
      - `rockDeg` number: How far the picture rocks at a tap near its edge, degrees (1.9 today).
      - `sparkMs` number: How long a click's flourish (the hand's sparks, the arrow's ring) flies and fades, ms (420 today; 0 draws none; BL-1322).
    - `clickSound` object: How the clicks sound (BL-1246).
      - `levelDb` number: How loud a click sounds, dBFS (−12 today).
      - `underVoiceDb` number: How loud under a spoken line, dBFS — never louder than levelDb (−30 today).
      - `minGapMs` number: The least time between two clicks heard, ms (120 today).
    - `resultTrace` object: The ring around what a click opened (BL-1285): its clock after the result appears, held drawMs ≤ holdMs ≤ endMs, and its stroke.
      - `drawMs` number: Drawn in by, ms (350 today).
      - `holdMs` number: Held at full until, ms (900 today).
      - `endMs` number: Gone by, ms (1300 today).
      - `ringPx` number: Its stroke, px at 1080p (2 today; 0 draws none).
    - `caption` object: How the stage caption (and the callout pointing from it) arrives and leaves (BL-1287).
      - `enterDelayMs` number: The wait after the picture lands, ms (250 today).
      - `enterMs` number: How long it takes to arrive, ms (450 today).
      - `rise` number: How far it rises into place, a share of its size (0.35 today).
      - `exitMs` number: How long it takes to leave, ms (300 today).
      - `shortBeatMs` number: A beat shorter than this captions at once, ms (1600 today).
      - `shortEnterMs` number: A short beat's caption arrives over this, ms (300 today).
    - `closer` object: The close-up (BL-2417): how a beat framed closer for reading (the video review found its words hard to read) shows the app. Changes nothing on a beat that is not framed closer.
      - `fill` number: The recording's share of the stage (past 1 it crops into the app's own margins, only with no device frame, never past a word).
      - `pushScale` number: The slow push toward the words while they are read; 1 is no push (the off value).
      - `fitMargin` number: The air left around the words, a share of the frame.
    - `camera` object
      - `move` 'auto' | 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold': The camera move (S3d) through the wide shots between the punch-ins: yawLeft or yawRight (the left or right side turned away), pitchUp or pitchDown (the top or bottom edge tipped away), dolly (square, a slow push in), hold (square and still), or auto (the trailer varies it: never the same move twice in a row, about a quarter to a third held square). The click punch-ins play on every move.
      - `maxScale` number
      - `readHold` object
        - `scale` number
        - `ms` number
        - `minGapMs` number
      - `orbit` number
      - `driftPerSecond` number
      - `dollyScale` number
      - `openWideMs` number: How long the recording holds the whole screen wide at the start, ms (0: it starts already punched in).
      - `closeWideMs` number: How long the recording holds the whole screen wide at the end, ms (0: it ends without coming back out).
      - `leastBetweenWidesMs` number: How close two wide moments may sit, ms: under this the two shots merge into one or one is dropped.
      - `rampBaseMs` number
      - `rampPerLnMs` number
      - `tailMs` number: How long the camera rests wide after a read, ms (BL-1266).
      - `mergeGapMs` number: How close two click punch-ins may sit before they plan as one move, ms.
      - `chainGapMs` number: The gap under which two moves chain into a pan instead of cutting, ms.
      - `minHoldMs` number: The least the camera holds a punch-in on what it shows before it may leave, ms (1800 today); a punch-in with no room for it is skipped (BL-2494).
      - `chainPanMs` number: How long a chained pan travels from one move to the next, ms (1000 today; BL-2494).
      - `fitMargin` number: How much air a punch-in leaves around what it holds, a share of the frame on each side (BL-2470): 0 frames it tight to the edge, 0.25 leaves a quarter of the frame as air; 0.12 by default.
      - `followCaret` boolean: Whether a typing punch-in follows the caret (BL-2538): true (the default) slides the framing along the line as the text fills; false holds it on the field's centre for the whole beat.
      - `holdOnResult` boolean: Whether the picture holds a moment on what the beat's last click changed (BL-463): true (the default) stops the recording briefly on the result while the cursor, caption and click sound keep going; false lets it run straight through. The beat's length never changes.
    - `tilt` object
      - `angleScale` number: The 3D turn's strength against the preset's (0 is no turn: no 3D depth at all).
      - `lean` number
      - `hold` 'opening' | 'wide': Where the turn is held (S3d): on the opening only, or through every wide stretch (square again before each punch-in and read).
      - `startDeg` number: The turn's angle in degrees on its move's main axis at the beat's first frame (with `endDeg`, both or neither; a yaw turns at most 25.2°). Replaces the preset's strength × the beat's varied angle.
      - `endDeg` number: The turn's angle in degrees at the beat's last frame, eased from `startDeg` (the same number holds one angle).
      - `rampMs` number: How long the 3D turn takes to ease in and out, ms (700–800 today; BL-2418).
      - `minHoldMs` number: With `hold: wide`, the shortest wide stretch the turn is held through, ms (1600–1800 today); a shorter one stays square (BL-2418).
      - `minEstablishMs` number: The shortest quiet opening (or establish-mark stretch) a turn is laid on, ms (1000–1200 today; BL-2418). It never delays a turn: a turning beat opens already turned (easing in from square after a cut); longer drops the turn from beats whose quiet opening is shorter.
    - `dof` object: The depth of field on a turned screen (S3d): its far side softly out of focus, sharp toward its near edge.
      - `maxBlurPx` number: The far side's blur at full turn, px at 1080p; 0 is none.
      - `focus` number: How much of the turned screen stays sharp, from its near edge inward; 0.8 keeps the most.
    - `spotlight` object: The spotlight while a shot holds on one control (BL-1163): how far the rest of the app dims, how long it takes to dim, and the shortest hold that dims at all.
      - `dim` number: How dark the rest of the screen goes while a shot holds on one control, 0–0.85; 0 is no dim.
      - `rampMs` number: How long the dim takes to come in, ms, 0–600.
      - `minHoldMs` number: The shortest hold that dims at all, ms, 0–2000.
  - `trailerOverrides` CaptureDepthOverrides, required: Depth tuning deltas over a preset (M-003): cursor/camera/tilt numbers, each clamped to the preset bounds when read, the stage's look (S3b: a device frame, the background's colours and motion — a project's brand, and how much room is around the app, how round its window's corners are and how deep its shadow falls) and the cursor's look (S3c: arrow, hand or auto, its size, colour, shadow, click bounce and sparks, motion blur) and the tap mark's timing on a phone (BL-1223: how early it appears before a press, how long it holds and fades, and how far its lift's ring grows); stored as deltas only. A preset's look (its device frame, its background and its cursor) stays when a beat plays calmer: a beat moved to a gentler preset so its words stay readable, the still version it is checked against, and the quicker version made when the full one cannot be rendered all keep the look that was asked for and lose only motion (the camera and the tilt). Only reading outranks the look: when the app's words would render smaller than the preset's smallest readable size, the margins shrink first, then the device frame is left off.
    - `stage` object: The stage's look: the device the recording sits in, the background behind it, and how much room is around the app, how round its corners are and how deep its shadow falls.
      - `frame` object
        - `bezelPx` number: On a drawn laptop or phone (BL-1225): how thick its black screen edge is, px at 1080p.
        - `radiusPx` number: On a drawn laptop or phone (BL-1225): how round its screen corners are, px at 1080p (a phone follows its own size).
        - `barShare` number: On a window or browser frame (BL-2537): how tall its title bar or tab strip is, a share of the recording's height (0.05 on a window and 0.075 on a browser today). A laptop, a phone or no frame ignores it.
        - `kind` 'none' | 'auto' | 'window' | 'browser' | 'laptop' | 'phone': The device frame: none, auto (the device that fits the recording: a laptop around a landscape one, a phone around a portrait one), a window bar, a browser bar, a laptop or a phone. A laptop or phone always follows the recording's shape.
        - `tone` 'dark' | 'light'
      - `shadow` object: The window's shadow: which way it falls (BL-464) and how deep it falls (BL-394).
        - `from` 'light' | 'down': Which way the window's shade falls: `down` — today's picture, what an absent key reads as; `light` — away from the stage's lit middle. Omit to leave it as it is.
        - `opacity` number: How deep the window's shadow falls: 0 is none.
        - `blurPx` number: How soft the window's shadow is, px at 1080p (BL-2416).
        - `offsetYPx` number: How far the window's shadow drops below it, px at 1080p (BL-2416).
        - `spreadPx` number: How far the shadow is pulled in under the window, px at 1080p (BL-2416); lower tucks it in.
      - `framing` object: How big the app sits in the frame and where (BL-2416): `whole` inside the stage's room (sized by `padding`), or `close`, a product shot filling `fill` of the frame and moved off centre by `offsetX`/`offsetY`. Setting `fill` or an offset without `kind` frames the app close. A close framing that would cut off the words a beat is about plays whole for that beat.
        - `kind` 'whole' | 'close'
        - `fill` number: The share of the frame the recording fills; past 1 the device bleeds off the frame.
        - `offsetX` number: Left (negative) or right (positive) of centre, a share of the frame.
        - `offsetY` number: Up (negative) or down (positive) of centre, a share of the frame.
      - `background` object
        - `stops` string[]: The background's colours, darkest first.
        - `motion` 'still' | 'drift' | 'waves': Whether the background holds still, drifts slowly, or rolls in slow waves.
        - `driftSeconds` number: On a drifting stage: how long the drift takes to travel its lap, seconds (4–60; 24 today). Lower is faster.
        - `driftReach` number: On a drifting stage: how far it drifts, as a share of the frame (0–0.1; 0.04 today). Higher travels further.
        - `auroraWash` number: On an aurora stage (BL-2539): how far the base colour washes toward the second colour (0–0.6; 0.2 today). A gradient or solid stage ignores it.
        - `auroraGlow` number: On an aurora stage: how strong its glows are, a multiplier on each (0–2; 1 today, 0 none).
        - `auroraEdgeFalloff` number: On an aurora stage: how much of the centre's light the frame's edges keep (0.3–1; 0.62 today, 1 no falloff).
        - `source` 'brand' | 'scene': Where the stage stands: `brand` — the project's brand gradient (as every stage stood until now); `scene` — the beat's own room, its location's accepted plate blurred and darkened behind the window. Omit to leave it as it is.
      - `reflection` boolean: True draws a faint mirror of the window's own bottom edge on the stage underneath it; false draws none. Omit to leave it as it is.
      - `padding` number: How much room is around the app: 0 fills the frame with the window, 0.6 leaves the widest margin.
      - `radiusPx` number: How round the window's corners are, px at 1080p: 0 is square.
      - `pageLoadDim` number: How far a dark app's white page load is dimmed (BL-1168): 0 leaves it exactly as recorded, 0.85 (today) the deepest.
      - `address` object: The browser frame's address pill (BL-2536). Omit either to keep today's.
        - `labelMax` integer: How many characters of a long address the pill keeps, the last one an ellipsis (64 today).
        - `loadFadeMs` number: How long the page-load fill under the address takes to leave once the page has loaded, ms (200 today; 0 cuts it at once).
        - `markTone` string: The little site letter's tile colour on any barred frame (BL-2534), #rrggbb: held to the nearest of the 32 site-letter tones (same lightness, every hue). Omit it and each site's name picks its own tone.
      - `windowRim` object: The hairline edge around a window on the stage (BL-2535); a laptop or a phone draws its own body edge and takes none. Omit for the automatic hairline.
        - `widthPx` number: How thick the edge is, px at 1080p (absent: about 1 px, one per 600 px of the window's short side).
        - `tone` 'auto' | 'light' | 'dark': `auto` — the stage decides (white on a dark stage, near-black on a light one); `light` — a white edge; `dark` — a near-black edge.
      - `mirror` object: The mirror under the window (BL-1325): how far it reaches, how soft its far edge goes and how strong it starts. Each omitted is today's mirror; `reflection: false` still turns it off.
        - `reach` number: How far the mirror hangs, as a share of the window's height (a third today).
        - `blurPx` number: How soft its far edge goes, px at 1080p (6 today).
        - `opacity` number: How strong it starts at the window's edge (absent: the frame's tone decides — 0.3 on a dark frame, 0.22 on a light one).
    - `cursor` object: The cursor: its look (S3c: never stepped down) and its feel. Sizes and shadow offsets are px at 1080p.
      - `skin` 'arrow' | 'hand' | 'auto': arrow, hand, or auto (the hand over anything clickable, the arrow elsewhere).
      - `sizePx` number: The cursor's height in px at 1080p.
      - `fill` string: The cursor's fill colour.
      - `shadow` object: Its drop shadow: where it sits under the pointer, how soft it is, and how deep (opacity 0 is none).
        - `offsetX` number: Across, px at 1080p.
        - `offsetY` number: Down, px at 1080p.
        - `blurPx` number: How soft, px at 1080p.
        - `opacity` number
      - `click` object: A click: bounce 0–2 (a squash, an overshoot and a spring back; 0 is the press alone) sparks (the click's flourish: short strokes off the hand's fingertip, a soft ring under the arrow; false draws neither) ripple 0–1 (how strongly the arrow's ring shows; 0 is none, 1 the default) and sparkSize 0.5–2 (how big the hand's spark burst is, scaled as one; 1 the default).
        - `bounce` number
        - `sparks` boolean
        - `ripple` number
        - `sparkSize` number
      - `motionBlur` number: How much it smears along its path while it moves fast: higher is a longer, softer smear, 0 is none (0–1).
      - `smoothing` number: How softly it eases into and out of each move: higher is a smoother, rounder path, lower a crisper one (0–1).
      - `pressScale` number: How far it dips on every click, as a share of its own size: lower is a deeper press, 1 is no dip (0.8–1).
      - `pressMs` number: How long it stays pressed on every click, ms: shorter is a snappier press (40–250).
      - `glideMinMs` number: The least time it takes for any move, even a short hop, ms: higher keeps it from jumping onto a button (150–600).
      - `glideMaxMs` number: The most time it takes for any move, even across the whole screen, ms: higher is slower travel, lower if it drags; never under the least time for a move (300–1000).
      - `preClickPauseMs` number: How long it rests on its target before it clicks, ms: 0 clicks the moment it arrives (0–400).
      - `leanDeg` number: How far the pointer itself leans into its sideways travel, degrees (0 stands it upright). The screen's own lean into the move is tilt.lean.
      - `lift` number: How far the pointer lifts off the page while it travels (its shadow spreads, softens and fades in flight): 0 keeps the shadow glued to the page, 1 is the full lift and the default (0–1).
    - `touch` object: The tap mark a phone frame draws instead of the cursor (BL-1223): how early it appears before the press, how long it holds, how long it fades and how far the lift's ring grows past the disc. The three times are milliseconds; ringGrowth is a share of the disc's radius.
      - `leadMs` number
      - `holdMs` number
      - `fadeMs` number
      - `ringGrowth` number
    - `typing` object: The glow over the field being typed into (BL-2497): how early it arrives before the first keystroke and how long it lingers after the last. A secret field's veil eases in over the same lead.
      - `glow` object
        - `leadMs` number: How early the glow arrives before the typing, ms (150 today).
        - `tailMs` number: How long the glow lingers after the typing, ms (400 today).
        - `strength` number: How big and bright the glow is, as a share of today's halo (1 today; 0 draws none; BL-2481).
    - `follow` object: How closely the camera follows the pointer between shots (BL-2496): how far off-centre the pointer may sit before the camera drifts, how far past that the drift firms up, and how firmly it corrects.
      - `deadZone` number: How far off-centre the pointer may sit before the camera drifts after it, a share of the half-frame (0.5 today).
      - `ramp` number: How far past that the drift eases from its gentlest to its firmest, a share of the half-frame (0.15 today; 0 firm at once).
      - `strength` number: How firmly the drift corrects toward the pointer, × today's (1 today; 0 never follows).
    - `clickImpact` object: How a click presses and rocks the picture (BL-1286).
      - `ms` number: How long the press plays, ms (260 today).
      - `dip` number: How deep the picture dips (0.24 today).
      - `rise` number: How far it rebounds past the press (0.16 today).
      - `rockDeg` number: How far the picture rocks at a tap near its edge, degrees (1.9 today).
      - `sparkMs` number: How long a click's flourish (the hand's sparks, the arrow's ring) flies and fades, ms (420 today; 0 draws none; BL-1322).
    - `clickSound` object: How the clicks sound (BL-1246).
      - `levelDb` number: How loud a click sounds, dBFS (−12 today).
      - `underVoiceDb` number: How loud under a spoken line, dBFS — never louder than levelDb (−30 today).
      - `minGapMs` number: The least time between two clicks heard, ms (120 today).
    - `resultTrace` object: The ring around what a click opened (BL-1285): its clock after the result appears, held drawMs ≤ holdMs ≤ endMs, and its stroke.
      - `drawMs` number: Drawn in by, ms (350 today).
      - `holdMs` number: Held at full until, ms (900 today).
      - `endMs` number: Gone by, ms (1300 today).
      - `ringPx` number: Its stroke, px at 1080p (2 today; 0 draws none).
    - `caption` object: How the stage caption (and the callout pointing from it) arrives and leaves (BL-1287).
      - `enterDelayMs` number: The wait after the picture lands, ms (250 today).
      - `enterMs` number: How long it takes to arrive, ms (450 today).
      - `rise` number: How far it rises into place, a share of its size (0.35 today).
      - `exitMs` number: How long it takes to leave, ms (300 today).
      - `shortBeatMs` number: A beat shorter than this captions at once, ms (1600 today).
      - `shortEnterMs` number: A short beat's caption arrives over this, ms (300 today).
    - `closer` object: The close-up (BL-2417): how a beat framed closer for reading (the video review found its words hard to read) shows the app. Changes nothing on a beat that is not framed closer.
      - `fill` number: The recording's share of the stage (past 1 it crops into the app's own margins, only with no device frame, never past a word).
      - `pushScale` number: The slow push toward the words while they are read; 1 is no push (the off value).
      - `fitMargin` number: The air left around the words, a share of the frame.
    - `camera` object
      - `move` 'auto' | 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold': The camera move (S3d) through the wide shots between the punch-ins: yawLeft or yawRight (the left or right side turned away), pitchUp or pitchDown (the top or bottom edge tipped away), dolly (square, a slow push in), hold (square and still), or auto (the trailer varies it: never the same move twice in a row, about a quarter to a third held square). The click punch-ins play on every move.
      - `maxScale` number
      - `readHold` object
        - `scale` number
        - `ms` number
        - `minGapMs` number
      - `orbit` number
      - `driftPerSecond` number
      - `dollyScale` number
      - `openWideMs` number: How long the recording holds the whole screen wide at the start, ms (0: it starts already punched in).
      - `closeWideMs` number: How long the recording holds the whole screen wide at the end, ms (0: it ends without coming back out).
      - `leastBetweenWidesMs` number: How close two wide moments may sit, ms: under this the two shots merge into one or one is dropped.
      - `rampBaseMs` number
      - `rampPerLnMs` number
      - `tailMs` number: How long the camera rests wide after a read, ms (BL-1266).
      - `mergeGapMs` number: How close two click punch-ins may sit before they plan as one move, ms.
      - `chainGapMs` number: The gap under which two moves chain into a pan instead of cutting, ms.
      - `minHoldMs` number: The least the camera holds a punch-in on what it shows before it may leave, ms (1800 today); a punch-in with no room for it is skipped (BL-2494).
      - `chainPanMs` number: How long a chained pan travels from one move to the next, ms (1000 today; BL-2494).
      - `fitMargin` number: How much air a punch-in leaves around what it holds, a share of the frame on each side (BL-2470): 0 frames it tight to the edge, 0.25 leaves a quarter of the frame as air; 0.12 by default.
      - `followCaret` boolean: Whether a typing punch-in follows the caret (BL-2538): true (the default) slides the framing along the line as the text fills; false holds it on the field's centre for the whole beat.
      - `holdOnResult` boolean: Whether the picture holds a moment on what the beat's last click changed (BL-463): true (the default) stops the recording briefly on the result while the cursor, caption and click sound keep going; false lets it run straight through. The beat's length never changes.
    - `tilt` object
      - `angleScale` number: The 3D turn's strength against the preset's (0 is no turn: no 3D depth at all).
      - `lean` number
      - `hold` 'opening' | 'wide': Where the turn is held (S3d): on the opening only, or through every wide stretch (square again before each punch-in and read).
      - `startDeg` number: The turn's angle in degrees on its move's main axis at the beat's first frame (with `endDeg`, both or neither; a yaw turns at most 25.2°). Replaces the preset's strength × the beat's varied angle.
      - `endDeg` number: The turn's angle in degrees at the beat's last frame, eased from `startDeg` (the same number holds one angle).
      - `rampMs` number: How long the 3D turn takes to ease in and out, ms (700–800 today; BL-2418).
      - `minHoldMs` number: With `hold: wide`, the shortest wide stretch the turn is held through, ms (1600–1800 today); a shorter one stays square (BL-2418).
      - `minEstablishMs` number: The shortest quiet opening (or establish-mark stretch) a turn is laid on, ms (1000–1200 today; BL-2418). It never delays a turn: a turning beat opens already turned (easing in from square after a cut); longer drops the turn from beats whose quiet opening is shorter.
    - `dof` object: The depth of field on a turned screen (S3d): its far side softly out of focus, sharp toward its near edge.
      - `maxBlurPx` number: The far side's blur at full turn, px at 1080p; 0 is none.
      - `focus` number: How much of the turned screen stays sharp, from its near edge inward; 0.8 keeps the most.
    - `spotlight` object: The spotlight while a shot holds on one control (BL-1163): how far the rest of the app dims, how long it takes to dim, and the shortest hold that dims at all.
      - `dim` number: How dark the rest of the screen goes while a shot holds on one control, 0–0.85; 0 is no dim.
      - `rampMs` number: How long the dim takes to come in, ms, 0–600.
      - `minHoldMs` number: The shortest hold that dims at all, ms, 0–2000.
  - `look` TrailerBeatCaptureLook, required: Every value a capture beat plays with, each with where it comes from: the preset, the trailer's tuning, the beat's own, or (`film`) the film's own motion-blur choice.
    - `depth` object, required: 3D depth at all (off keeps the screen square and sharp), and the preset's own turn strength: what a beat sets as `tilt.angleScale` to put the depth back on over a trailer whose tuning turned it off.
      - `value` boolean, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `presetAngleScale` number, nullable, required: The preset's own `tilt.angleScale`; null when the preset itself never turns (no strength switches it on).
    - `move` object, required
      - `setting` 'auto' | 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold', required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `planned` CaptureCameraMoveView, required: One capture beat's camera move as planned (S3d): the same on every render of the trailer.
        - `move` 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold', required
        - `source` 'beat' | 'trailer' | 'auto', required: The beat's own choice, the trailer's, or the trailer's varied choice.
        - `angle` number, required: The turn's strength against the preset's; 0 for a square move.
        - `focus` number, required: The depth of field's strength against the preset's; 0 for a square move.
      - `played` 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold', nullable, required
      - `playedWhy` string, nullable, required
    - `turn` object, required: The turn's angle in degrees on its move's main axis at the beat's first and last frame; `available` false says why the angles do nothing.
      - `startDeg` number, required
      - `endDeg` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `maxDeg` number, required
      - `available` boolean, required
      - `why` string, nullable, required
    - `hold` CaptureLookValueString, required
      - `value` string, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `turnClock` object, required: The 3D turn's clock (BL-2418), ms: how long it eases in and out, the shortest wide stretch it is held through (with hold wide), and the shortest quiet opening it is laid on (longer drops the turn from shorter openings; it never delays one) — each with where it comes from.
      - `rampMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `minHoldMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `minEstablishMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `lean` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `dofBlurPx` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `dofFocus` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `punchIn` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `spotlight` object, required: The spotlight while a shot holds on one control: how far the rest of the app dims, how long it takes, and the shortest hold that dims at all — each with where it comes from.
      - `dim` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `rampMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `minHoldMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `openWideMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `closeWideMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `leastBetweenWidesMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `rampBaseMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `rampPerLnMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `tailMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `mergeGapMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `chainGapMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `minHoldMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `chainPanMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `fitMargin` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `closer` object, required: The close-up (BL-2417): how a beat framed closer for reading shows the app — how much of the frame it fills, how far it pushes toward the words (1 is no push) and the air left around them — each with where it comes from. Played only on a beat the video review frames closer.
      - `fill` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `pushScale` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `fitMargin` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `followCaret` CaptureLookValueBoolean, required
      - `value` boolean, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `holdOnResult` CaptureLookValueBoolean, required
      - `value` boolean, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `shutter` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `drift` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `dollyScale` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `orbit` object, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `available` boolean, required
      - `why` string, nullable, required
    - `cursor` object, required
      - `skin` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `fill` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `sizePx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shadowOpacity` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shadowOffsetX` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shadowOffsetY` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shadowBlurPx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `sparks` CaptureLookValueBoolean, required
        - `value` boolean, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `ripple` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `sparkSize` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `motionBlur` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `smoothing` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `glideMinMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `glideMaxMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `preClickPauseMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `bounce` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `pressScale` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `pressMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `leanDeg` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `lift` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `drawn` boolean, required
    - `touch` object, required: The tap mark a phone frame draws (BL-1223): how early it appears before the press, how long it holds, how long it fades and how far the lift's ring grows past the disc, each with its `source`.
      - `leadMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `holdMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `fadeMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `ringGrowth` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `follow` object, required: How closely the camera follows the pointer between shots (BL-2496): the dead zone and the ramp past it (shares of the half-frame) and the strength (0 never drifts, 1 today's), each with its `source`.
      - `deadZone` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `ramp` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `strength` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `typingGlow` object, required: The typing glow (BL-2497, BL-2481): how early it arrives before the typing and how long it lingers after it, ms, and its strength (1 today, 0 none), each with its `source`.
      - `leadMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `tailMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `strength` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `clickImpact` object, required: How a click presses and rocks the picture (BL-1286) and how long its flourish flies (BL-1322), each with its `source`.
      - `ms` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `dip` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `rise` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `rockDeg` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `sparkMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `clickSound` object, required: How the clicks sound (BL-1246), each with its `source`.
      - `levelDb` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `underVoiceDb` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `minGapMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `resultTrace` object, required: The ring around what a click opened (BL-1285), each with its `source`.
      - `drawMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `holdMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `endMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `ringPx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `caption` object, required: The stage caption's clock (BL-1287), each with its `source`.
      - `enterDelayMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `enterMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `rise` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `exitMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shortBeatMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `shortEnterMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `readPushMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `readPushScale` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `readPushGapMs` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `frame` object, required: The device frame: its kind and tone, a drawn laptop's or phone's screen edge and corners (px at 1080p), and (BL-2537) how tall a window's title bar or a browser's tab strip is, a share of the recording's height (0 on a frame with no bar).
      - `kind` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `tone` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `bezelPx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `radiusPx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `barShare` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `pageLoadDim` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `address` object, required: The browser frame's address pill (BL-2536): how many characters of a long address it keeps, how long its page-load fill takes to leave (ms), and (BL-2534) the site letter's tile colour (`#rrggbb`, or `auto`: each site's name picks its own), each with its `source`.
      - `labelMax` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `loadFadeMs` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `markTone` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `padding` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `radiusPx` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `shadowOpacity` CaptureLookValueNumber, required
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `shadowBlurPx` CaptureLookValueNumber
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `shadowOffsetYPx` CaptureLookValueNumber
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `shadowSpreadPx` CaptureLookValueNumber
      - `value` number, required
      - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `framing` object: How big the app sits in the frame and where (BL-2416), each with its `source`: `kind` whole or close; on a close framing `fill` (share of the frame the recording fills) and `offsetX`/`offsetY` (share of the frame off centre).
      - `kind` object, required
        - `value` 'whole' | 'close', required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `fill` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `offsetX` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `offsetY` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `windowRim` object, required: The window's hairline edge (BL-2535), each with its `source`: `widthPx` px at 1080p (null: the automatic hairline), `tone` auto, light or dark.
      - `widthPx` object, required
        - `value` number, nullable, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `tone` object, required
        - `value` 'auto' | 'light' | 'dark', required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `mirror` object, required: The mirror under the window (BL-447, BL-1325), each with its `source`: `on` whether it is drawn, `reach` a share of the window's height, `blurPx` its far edge's softness px at 1080p, `opacity` its strength at the window (null: the frame's tone decides).
      - `on` CaptureLookValueBoolean, required
        - `value` boolean, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `reach` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `blurPx` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `opacity` object, required
        - `value` number, nullable, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
    - `background` object, required
      - `stops` object, required
        - `value` string[], required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `motion` CaptureLookValueString, required
        - `value` string, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `driftSeconds` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `driftReach` CaptureLookValueNumber, required
        - `value` number, required
        - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `aurora` object: An aurora stage's own look (BL-2539), only on an aurora background: the wash toward the second colour, the glows' strength (a multiplier) and how much of the centre's light the edges keep — each with where it comes from.
        - `wash` CaptureLookValueNumber, required
          - `value` number, required
          - `source` 'preset' | 'trailer' | 'beat' | 'film', required
        - `glow` CaptureLookValueNumber, required
          - `value` number, required
          - `source` 'preset' | 'trailer' | 'beat' | 'film', required
        - `edgeFalloff` CaptureLookValueNumber, required
          - `value` number, required
          - `source` 'preset' | 'trailer' | 'beat' | 'film', required
      - `source` object: Where the stage stands: the brand gradient, or the scene's own room blurred behind the window, with the plain-words reason — `no accepted plate for <location>` when a scene was asked but nothing stands there.
        - `value` 'brand' | 'scene', required: The gradient every stage stood on, or the room of the beat's own location.
        - `why` string, required: The plain-words reason it stands there, as the writer reads it in the look panel.
  - `rendered` object, nullable, required
    - `preset` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero'
    - `width` integer
    - `height` integer
    - `reason` string, nullable
  - `comfort` CaptureComfortRead: How comfortable a capture beat's motion is to watch (BL-486, BL-702): the camera's scale and pan peaks, the pointer's glide, and how often the view turns, with where its worst moment is. `sentence` is already writer-facing.
    - `peakScaleSpeedPerSec` number, required: e-folds per second of the camera's scale.
    - `peakAngularSpeedDegPerSec` number, required: Degrees per second of the view's turn.
    - `peakCursorSpeedPxPerSec` number, required: Pixels per second of the pointer on the recorded screen.
    - `tiltMovesPer20s` number, required: Tilt/orbit moves against what the beat's length allows at one per 20 s (1.0 is at the pole).
    - `verdict` 'comfortable' | 'brisk' | 'too fast', required
    - `worst` object, nullable, required
      - `what` 'camera' | 'tilt' | 'cursor', required
      - `atMs` integer, required
    - `sentence` string, required: ONE writer-facing line: no jargon, the time to one decimal in seconds.
  - `recording` CaptureBeatRecordingRead: A capture beat's recording, read for its look (owner 2026-10-18: Slug picks the look and the stretch, writers tune by asking). `readable` false when the recording or its log could not be read: nothing is suggested then.
    - `readable` boolean, required
    - `captureDurationMs` integer, nullable, required: How long the whole capture runs, ms.
    - `keep` object, nullable, required: The stretch the beat keeps, ms of the capture; null plays the whole capture.
      - `keepStartMs` integer, required
      - `keepEndMs` integer, required
    - `stretches` object[], required: Stretches worth playing, one per click: each starts once the screen settles and ends after the result has been read.
      - `keepStartMs` integer, required
      - `keepEndMs` integer, required
      - `why` string, required
    - `automatic` object, nullable, required: The look the creation rule picks from what this stretch shows.
      - `preset` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero', required
      - `overrides` CaptureDepthOverrides, required: Depth tuning deltas over a preset (M-003): cursor/camera/tilt numbers, each clamped to the preset bounds when read, the stage's look (S3b: a device frame, the background's colours and motion — a project's brand, and how much room is around the app, how round its window's corners are and how deep its shadow falls) and the cursor's look (S3c: arrow, hand or auto, its size, colour, shadow, click bounce and sparks, motion blur) and the tap mark's timing on a phone (BL-1223: how early it appears before a press, how long it holds and fades, and how far its lift's ring grows); stored as deltas only. A preset's look (its device frame, its background and its cursor) stays when a beat plays calmer: a beat moved to a gentler preset so its words stay readable, the still version it is checked against, and the quicker version made when the full one cannot be rendered all keep the look that was asked for and lose only motion (the camera and the tilt). Only reading outranks the look: when the app's words would render smaller than the preset's smallest readable size, the margins shrink first, then the device frame is left off.
        - `stage` object: The stage's look: the device the recording sits in, the background behind it, and how much room is around the app, how round its corners are and how deep its shadow falls.
          - `frame` object
            - `bezelPx` number: On a drawn laptop or phone (BL-1225): how thick its black screen edge is, px at 1080p.
            - `radiusPx` number: On a drawn laptop or phone (BL-1225): how round its screen corners are, px at 1080p (a phone follows its own size).
            - `barShare` number: On a window or browser frame (BL-2537): how tall its title bar or tab strip is, a share of the recording's height (0.05 on a window and 0.075 on a browser today). A laptop, a phone or no frame ignores it.
            - `kind` 'none' | 'auto' | 'window' | 'browser' | 'laptop' | 'phone': The device frame: none, auto (the device that fits the recording: a laptop around a landscape one, a phone around a portrait one), a window bar, a browser bar, a laptop or a phone. A laptop or phone always follows the recording's shape.
            - `tone` 'dark' | 'light'
          - `shadow` object: The window's shadow: which way it falls (BL-464) and how deep it falls (BL-394).
            - `from` 'light' | 'down': Which way the window's shade falls: `down` — today's picture, what an absent key reads as; `light` — away from the stage's lit middle. Omit to leave it as it is.
            - `opacity` number: How deep the window's shadow falls: 0 is none.
            - `blurPx` number: How soft the window's shadow is, px at 1080p (BL-2416).
            - `offsetYPx` number: How far the window's shadow drops below it, px at 1080p (BL-2416).
            - `spreadPx` number: How far the shadow is pulled in under the window, px at 1080p (BL-2416); lower tucks it in.
          - `framing` object: How big the app sits in the frame and where (BL-2416): `whole` inside the stage's room (sized by `padding`), or `close`, a product shot filling `fill` of the frame and moved off centre by `offsetX`/`offsetY`. Setting `fill` or an offset without `kind` frames the app close. A close framing that would cut off the words a beat is about plays whole for that beat.
            - `kind` 'whole' | 'close'
            - `fill` number: The share of the frame the recording fills; past 1 the device bleeds off the frame.
            - `offsetX` number: Left (negative) or right (positive) of centre, a share of the frame.
            - `offsetY` number: Up (negative) or down (positive) of centre, a share of the frame.
          - `background` object
            - `stops` string[]: The background's colours, darkest first.
            - `motion` 'still' | 'drift' | 'waves': Whether the background holds still, drifts slowly, or rolls in slow waves.
            - `driftSeconds` number: On a drifting stage: how long the drift takes to travel its lap, seconds (4–60; 24 today). Lower is faster.
            - `driftReach` number: On a drifting stage: how far it drifts, as a share of the frame (0–0.1; 0.04 today). Higher travels further.
            - `auroraWash` number: On an aurora stage (BL-2539): how far the base colour washes toward the second colour (0–0.6; 0.2 today). A gradient or solid stage ignores it.
            - `auroraGlow` number: On an aurora stage: how strong its glows are, a multiplier on each (0–2; 1 today, 0 none).
            - `auroraEdgeFalloff` number: On an aurora stage: how much of the centre's light the frame's edges keep (0.3–1; 0.62 today, 1 no falloff).
            - `source` 'brand' | 'scene': Where the stage stands: `brand` — the project's brand gradient (as every stage stood until now); `scene` — the beat's own room, its location's accepted plate blurred and darkened behind the window. Omit to leave it as it is.
          - `reflection` boolean: True draws a faint mirror of the window's own bottom edge on the stage underneath it; false draws none. Omit to leave it as it is.
          - `padding` number: How much room is around the app: 0 fills the frame with the window, 0.6 leaves the widest margin.
          - `radiusPx` number: How round the window's corners are, px at 1080p: 0 is square.
          - `pageLoadDim` number: How far a dark app's white page load is dimmed (BL-1168): 0 leaves it exactly as recorded, 0.85 (today) the deepest.
          - `address` object: The browser frame's address pill (BL-2536). Omit either to keep today's.
            - `labelMax` integer: How many characters of a long address the pill keeps, the last one an ellipsis (64 today).
            - `loadFadeMs` number: How long the page-load fill under the address takes to leave once the page has loaded, ms (200 today; 0 cuts it at once).
            - `markTone` string: The little site letter's tile colour on any barred frame (BL-2534), #rrggbb: held to the nearest of the 32 site-letter tones (same lightness, every hue). Omit it and each site's name picks its own tone.
          - `windowRim` object: The hairline edge around a window on the stage (BL-2535); a laptop or a phone draws its own body edge and takes none. Omit for the automatic hairline.
            - `widthPx` number: How thick the edge is, px at 1080p (absent: about 1 px, one per 600 px of the window's short side).
            - `tone` 'auto' | 'light' | 'dark': `auto` — the stage decides (white on a dark stage, near-black on a light one); `light` — a white edge; `dark` — a near-black edge.
          - `mirror` object: The mirror under the window (BL-1325): how far it reaches, how soft its far edge goes and how strong it starts. Each omitted is today's mirror; `reflection: false` still turns it off.
            - `reach` number: How far the mirror hangs, as a share of the window's height (a third today).
            - `blurPx` number: How soft its far edge goes, px at 1080p (6 today).
            - `opacity` number: How strong it starts at the window's edge (absent: the frame's tone decides — 0.3 on a dark frame, 0.22 on a light one).
        - `cursor` object: The cursor: its look (S3c: never stepped down) and its feel. Sizes and shadow offsets are px at 1080p.
          - `skin` 'arrow' | 'hand' | 'auto': arrow, hand, or auto (the hand over anything clickable, the arrow elsewhere).
          - `sizePx` number: The cursor's height in px at 1080p.
          - `fill` string: The cursor's fill colour.
          - `shadow` object: Its drop shadow: where it sits under the pointer, how soft it is, and how deep (opacity 0 is none).
            - `offsetX` number: Across, px at 1080p.
            - `offsetY` number: Down, px at 1080p.
            - `blurPx` number: How soft, px at 1080p.
            - `opacity` number
          - `click` object: A click: bounce 0–2 (a squash, an overshoot and a spring back; 0 is the press alone) sparks (the click's flourish: short strokes off the hand's fingertip, a soft ring under the arrow; false draws neither) ripple 0–1 (how strongly the arrow's ring shows; 0 is none, 1 the default) and sparkSize 0.5–2 (how big the hand's spark burst is, scaled as one; 1 the default).
            - `bounce` number
            - `sparks` boolean
            - `ripple` number
            - `sparkSize` number
          - `motionBlur` number: How much it smears along its path while it moves fast: higher is a longer, softer smear, 0 is none (0–1).
          - `smoothing` number: How softly it eases into and out of each move: higher is a smoother, rounder path, lower a crisper one (0–1).
          - `pressScale` number: How far it dips on every click, as a share of its own size: lower is a deeper press, 1 is no dip (0.8–1).
          - `pressMs` number: How long it stays pressed on every click, ms: shorter is a snappier press (40–250).
          - `glideMinMs` number: The least time it takes for any move, even a short hop, ms: higher keeps it from jumping onto a button (150–600).
          - `glideMaxMs` number: The most time it takes for any move, even across the whole screen, ms: higher is slower travel, lower if it drags; never under the least time for a move (300–1000).
          - `preClickPauseMs` number: How long it rests on its target before it clicks, ms: 0 clicks the moment it arrives (0–400).
          - `leanDeg` number: How far the pointer itself leans into its sideways travel, degrees (0 stands it upright). The screen's own lean into the move is tilt.lean.
          - `lift` number: How far the pointer lifts off the page while it travels (its shadow spreads, softens and fades in flight): 0 keeps the shadow glued to the page, 1 is the full lift and the default (0–1).
        - `touch` object: The tap mark a phone frame draws instead of the cursor (BL-1223): how early it appears before the press, how long it holds, how long it fades and how far the lift's ring grows past the disc. The three times are milliseconds; ringGrowth is a share of the disc's radius.
          - `leadMs` number
          - `holdMs` number
          - `fadeMs` number
          - `ringGrowth` number
        - `typing` object: The glow over the field being typed into (BL-2497): how early it arrives before the first keystroke and how long it lingers after the last. A secret field's veil eases in over the same lead.
          - `glow` object
            - `leadMs` number: How early the glow arrives before the typing, ms (150 today).
            - `tailMs` number: How long the glow lingers after the typing, ms (400 today).
            - `strength` number: How big and bright the glow is, as a share of today's halo (1 today; 0 draws none; BL-2481).
        - `follow` object: How closely the camera follows the pointer between shots (BL-2496): how far off-centre the pointer may sit before the camera drifts, how far past that the drift firms up, and how firmly it corrects.
          - `deadZone` number: How far off-centre the pointer may sit before the camera drifts after it, a share of the half-frame (0.5 today).
          - `ramp` number: How far past that the drift eases from its gentlest to its firmest, a share of the half-frame (0.15 today; 0 firm at once).
          - `strength` number: How firmly the drift corrects toward the pointer, × today's (1 today; 0 never follows).
        - `clickImpact` object: How a click presses and rocks the picture (BL-1286).
          - `ms` number: How long the press plays, ms (260 today).
          - `dip` number: How deep the picture dips (0.24 today).
          - `rise` number: How far it rebounds past the press (0.16 today).
          - `rockDeg` number: How far the picture rocks at a tap near its edge, degrees (1.9 today).
          - `sparkMs` number: How long a click's flourish (the hand's sparks, the arrow's ring) flies and fades, ms (420 today; 0 draws none; BL-1322).
        - `clickSound` object: How the clicks sound (BL-1246).
          - `levelDb` number: How loud a click sounds, dBFS (−12 today).
          - `underVoiceDb` number: How loud under a spoken line, dBFS — never louder than levelDb (−30 today).
          - `minGapMs` number: The least time between two clicks heard, ms (120 today).
        - `resultTrace` object: The ring around what a click opened (BL-1285): its clock after the result appears, held drawMs ≤ holdMs ≤ endMs, and its stroke.
          - `drawMs` number: Drawn in by, ms (350 today).
          - `holdMs` number: Held at full until, ms (900 today).
          - `endMs` number: Gone by, ms (1300 today).
          - `ringPx` number: Its stroke, px at 1080p (2 today; 0 draws none).
        - `caption` object: How the stage caption (and the callout pointing from it) arrives and leaves (BL-1287).
          - `enterDelayMs` number: The wait after the picture lands, ms (250 today).
          - `enterMs` number: How long it takes to arrive, ms (450 today).
          - `rise` number: How far it rises into place, a share of its size (0.35 today).
          - `exitMs` number: How long it takes to leave, ms (300 today).
          - `shortBeatMs` number: A beat shorter than this captions at once, ms (1600 today).
          - `shortEnterMs` number: A short beat's caption arrives over this, ms (300 today).
        - `closer` object: The close-up (BL-2417): how a beat framed closer for reading (the video review found its words hard to read) shows the app. Changes nothing on a beat that is not framed closer.
          - `fill` number: The recording's share of the stage (past 1 it crops into the app's own margins, only with no device frame, never past a word).
          - `pushScale` number: The slow push toward the words while they are read; 1 is no push (the off value).
          - `fitMargin` number: The air left around the words, a share of the frame.
        - `camera` object
          - `move` 'auto' | 'yawLeft' | 'yawRight' | 'pitchUp' | 'pitchDown' | 'dolly' | 'hold': The camera move (S3d) through the wide shots between the punch-ins: yawLeft or yawRight (the left or right side turned away), pitchUp or pitchDown (the top or bottom edge tipped away), dolly (square, a slow push in), hold (square and still), or auto (the trailer varies it: never the same move twice in a row, about a quarter to a third held square). The click punch-ins play on every move.
          - `maxScale` number
          - `readHold` object
            - `scale` number
            - `ms` number
            - `minGapMs` number
          - `orbit` number
          - `driftPerSecond` number
          - `dollyScale` number
          - `openWideMs` number: How long the recording holds the whole screen wide at the start, ms (0: it starts already punched in).
          - `closeWideMs` number: How long the recording holds the whole screen wide at the end, ms (0: it ends without coming back out).
          - `leastBetweenWidesMs` number: How close two wide moments may sit, ms: under this the two shots merge into one or one is dropped.
          - `rampBaseMs` number
          - `rampPerLnMs` number
          - `tailMs` number: How long the camera rests wide after a read, ms (BL-1266).
          - `mergeGapMs` number: How close two click punch-ins may sit before they plan as one move, ms.
          - `chainGapMs` number: The gap under which two moves chain into a pan instead of cutting, ms.
          - `minHoldMs` number: The least the camera holds a punch-in on what it shows before it may leave, ms (1800 today); a punch-in with no room for it is skipped (BL-2494).
          - `chainPanMs` number: How long a chained pan travels from one move to the next, ms (1000 today; BL-2494).
          - `fitMargin` number: How much air a punch-in leaves around what it holds, a share of the frame on each side (BL-2470): 0 frames it tight to the edge, 0.25 leaves a quarter of the frame as air; 0.12 by default.
          - `followCaret` boolean: Whether a typing punch-in follows the caret (BL-2538): true (the default) slides the framing along the line as the text fills; false holds it on the field's centre for the whole beat.
          - `holdOnResult` boolean: Whether the picture holds a moment on what the beat's last click changed (BL-463): true (the default) stops the recording briefly on the result while the cursor, caption and click sound keep going; false lets it run straight through. The beat's length never changes.
        - `tilt` object
          - `angleScale` number: The 3D turn's strength against the preset's (0 is no turn: no 3D depth at all).
          - `lean` number
          - `hold` 'opening' | 'wide': Where the turn is held (S3d): on the opening only, or through every wide stretch (square again before each punch-in and read).
          - `startDeg` number: The turn's angle in degrees on its move's main axis at the beat's first frame (with `endDeg`, both or neither; a yaw turns at most 25.2°). Replaces the preset's strength × the beat's varied angle.
          - `endDeg` number: The turn's angle in degrees at the beat's last frame, eased from `startDeg` (the same number holds one angle).
          - `rampMs` number: How long the 3D turn takes to ease in and out, ms (700–800 today; BL-2418).
          - `minHoldMs` number: With `hold: wide`, the shortest wide stretch the turn is held through, ms (1600–1800 today); a shorter one stays square (BL-2418).
          - `minEstablishMs` number: The shortest quiet opening (or establish-mark stretch) a turn is laid on, ms (1000–1200 today; BL-2418). It never delays a turn: a turning beat opens already turned (easing in from square after a cut); longer drops the turn from beats whose quiet opening is shorter.
        - `dof` object: The depth of field on a turned screen (S3d): its far side softly out of focus, sharp toward its near edge.
          - `maxBlurPx` number: The far side's blur at full turn, px at 1080p; 0 is none.
          - `focus` number: How much of the turned screen stays sharp, from its near edge inward; 0.8 keeps the most.
        - `spotlight` object: The spotlight while a shot holds on one control (BL-1163): how far the rest of the app dims, how long it takes to dim, and the shortest hold that dims at all.
          - `dim` number: How dark the rest of the screen goes while a shot holds on one control, 0–0.85; 0 is no dim.
          - `rampMs` number: How long the dim takes to come in, ms, 0–600.
          - `minHoldMs` number: The shortest hold that dims at all, ms, 0–2000.
      - `why` string, required
  - `sentence` string, required

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: The named project or source does not exist or is owned by another account.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

## Changes

- **2026-10-20** `4534f5d25540`: 5 warning
  - added the new `screen` enum value to the `preset/beat` response property for the response status `200`
  - added the new `screen` enum value to the `preset/requested` response property for the response status `200`
  - added the new `screen` enum value to the `preset/trailer` response property for the response status `200`
  - added the new `screen` enum value to the `recording/oneOf[#/components/schemas/CaptureBeatRecordingRead]/automatic/preset` response property for the response status `200`
  - …1 more

[Operation history](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/changes/trailers/:jobId/beats/:beatIndex/capture-look/get.md)

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/86e084144cef?raw)
