---
title: "Preview a draft capture beat screen look."
method: POST
path: "/trailers/{jobId}/beats/{beatIndex}/capture-look/preview"
tags: ["Trailer"]
---

# Preview a draft capture beat screen look.

`POST /trailers/{jobId}/beats/{beatIndex}/capture-look/preview`

## Request

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

Plans a draft screen look (`{ preset, overrides }`, what a set would store) exactly as its composite would be, at the master's frame, without saving or rendering anything: `turn` (the move, and the angle in degrees at the first and last frame as nudged), `tilt` (applied, off or left out, and why), `maxPunchIn`, `cursor`, `notes` (how the finished render may differ) and `quote`. Free. Scope: `story:read`.

## Request body

- TrailerBeatCaptureLookPreviewRequest
  - `preset` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero' | 'none', nullable
  - `overrides` CaptureDepthOverrides: 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.

## Response `200`

What the draft plans.

- TrailerBeatCaptureLookPreview
  - `jobId` string, required
  - `beatIndex` integer, required
  - `beatNumber` integer, required
  - `key` string, nullable, required
  - `preset` 'screen' | 'flat' | 'subtle' | 'cinematic' | 'showcase' | 'hero', nullable, required
  - `turn` object, nullable, required
    - `move` string, nullable
    - `startDeg` number
    - `endDeg` number
  - `tilt` object, required
    - `outcome` 'applied' | 'dropped' | 'off', required
    - `reason` string, nullable, required
  - `maxPunchIn` number, required
  - `cursor` 'drawn' | 'recorded' | 'none', required
  - `durationMs` integer, required
  - `frame` object, required
    - `width` integer, required
    - `height` integer, required
  - `notes` string[], required
  - `ease` object, nullable, required: When the draft's motion reads too fast (BL-1463): the one bounded value that slows it to a comfortable pace, re-planned and re-read. `overrides` is the beat's whole tuning with that value written in — send it as the set's `overrides` (preset unchanged) to apply it in one call. Null when nothing moves too fast, or no single value fixes it.
    - `key` string, required: The tunable leaf it sets, e.g. `camera.rampBaseMs`.
    - `from` number, required
    - `to` number, required
    - `verdict` 'comfortable' | 'brisk', required
    - `sentence` string, 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.
  - `quote` CaptureBeatLookQuote, required: What saving the look costs and changes: always free (a capture composite is never billed).
    - `credits` 0, required
    - `beatsRepictured` integer[], required: The beats (1-based) whose picture the change re-renders on the next preview or finish; a new camera move also varies its neighbours.
    - `sentence` string, required
  - `reason` string, nullable, 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`: 1 warning, 1 info
  - added the new `screen` enum value to the `preset` response property for the response status `200`
  - added the new `screen` enum value to the request property `preset`

[Operation history](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/changes/trailers/:jobId/beats/:beatIndex/capture-look/preview/post.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/4534f5d25540?raw)
