startTimeMs/durationMs) or to a specific time range.
All times are milliseconds on the clip’s playback timeline — the video as watched, with cuts applied. It is the same timeline as
get_transcript, thumbnails, and previews, so nothing needs converting. A start at or past the end of the clip is rejected with a 400.Layout kinds
Thelayout field is an object discriminated by kind. Read the clip first to see its layoutSceneType — that determines which kinds are valid.
For landscape
side-by-side layouts, match the editor’s picker labels to these fields:
Use
position: "left" or "right" for the camera’s side. If you mean an overlapping split (sometimes called “overlay”), choose overlap, not regular.
Camera style
PasscameraStyle next to layout on add_layout or update_layout to override a named layout’s camera frame shape. The same field works in apply_video_edits layout operations and public API layout requests. You can update layoutId: "base" with cameraStyle alone, without sending layout.
- Set
none,circle,square,portrait,cutout,blob, orblob-outline. cutoutremoves the camera background and frame, keeping the presenter in the named layout’s camera position. It switches pop-out off; sendingcameraStyle: "cutout"together with apopOutobject is rejected.noneuses a rectangle in the camera slot’s aspect ratio, rounded by the clip’scorners. For a squircle Pop-out frame, setcameraStyle: "none"and useupdate_clipto setcorners: "squircle".- Send
nullto clear the override and use the named layout’s own shape. Omit the field to leave it unchanged.
cut-out, screen-only, and custom layouts reject a style value. For custom layouts, use the camera slot’s presentation.shape instead. Use layout.kind: "cut-out" for the dedicated cut-out layout, or cameraStyle: "cutout" to keep a named layout’s geometry.
list_layouts, get_timeline, and layout responses report cameraStyle when an override is set; the field is absent when the layout’s own shape applies. Custom layouts report the shape in their geometry instead.
update_layout on a clip with both screen and camera recordings:
camera-bubble, shape still sets the camera slot the cut-out is drawn in, not a visible frame. Leave it out to use the default circle slot.
Custom geometry
kind: "custom" places each slot by hand, in artboard pixels (the video’s dimensions), like dragging layers in the editor. subject is the main layer — the screen recording on combi and basic-subject clips, the camera on camera-subject clips; presentation is the camera on combi clips. list_layouts reports custom layouts (including ones arranged in the editor) in the same shape, so read, tweak, write round-trips.
Writing over a layout that is already custom merges the fields you pass over its current geometry, so
{"kind": "custom", "presentation": {"point": {"x": 1500, "y": 700}}} just moves the camera. Any other layout has no geometry to start from, so subject needs point and dimensions; if the clip has a camera and you leave presentation out, the camera is kept but hidden. Custom layouts can’t carry media. Use add_layout or update_layout for custom geometry, one call per layout; apply_video_edits accepts named layout kinds only.
Pop-out
Any layout that frames the camera —camera-bubble, camera-only, side-by-side, tv-presenter, and camera-subject fullscreen / middle — can pop the presenter out of the frame: they are cut out of the camera feed and rise above a frame that sits behind their head. Pass popOut next to layout on add_layout and update_layout (and their batch_edit operations); list_layouts reports it on each layout. popOut: null switches it off, and switching a layout to cut-out or setting cameraStyle: "cutout" drops it, since a cut-out has no frame. The clip needs a camera recording.
The Pop-out frame follows the camera style: circle draws a circle centred in the frame, with a diameter equal to its shorter side, even in a tall split panel. Blob styles draw an animated blob; other styles draw a rectangle rounded by the clip’s corners. Use Camera style to change the outline. Shadows and Snake borders follow the frame’s shape.
Every field is optional: a write merges over the layout’s current settings, and a fresh pop-out takes the defaults for unset fields.
Crop
A layout can crop the clip’s screen recording for its own time range — the editor’s crop modal on “This layout only”. Passcrop next to layout on add_layout and update_layout as pixels of the recording removed from each edge: {"top": 0, "right": 420, "bottom": 0, "left": 420}. Other layouts keep following the clip’s crop; crop: null makes the layout follow it again. Masks that start in the layout stay anchored to the content they cover, and a custom layout’s screen box keeps its on-canvas scale unless the same request writes layout geometry. list_layouts reports each layout’s crop: its own crop, else the clip’s, absent when the recording is uncropped. The clip needs a screen recording or an uploaded video, and a clip with both crops the screen recording. To crop a screen recording across the whole clip use auto_crop.
list_saved_layouts
List your saved Favorite layouts. Each result includes an ID, name, scene type, and whether it is a preset or custom layout. Custom layouts also report the canvas ratio they require and their geometry as akind: custom layout.
Use the returned ID with apply_saved_layout.
apply_saved_layout
Apply one of your saved Favorite layouts to a clip. Omit the time range to set the clip-spanning base layout, or provide bothstartTimeMs and durationMs to apply it to part of the clip.
Saved layouts must match the clip’s scene type. Custom layouts must also match the video’s canvas ratio.
string
required
Video ID
string
required
Clip ID
string
required
Saved layout ID from
list_saved_layoutsinteger
Start time in ms
integer
Duration in ms. Minimum 200ms.
save_layout
Save a clip’s layout as a Favorite, like the editor’s star on a layout tile. OmitlayoutId to save the clip-spanning base layout, or pass a layout ID from list_layouts.
A named layout is saved by name and reapplies on any canvas. A custom layout — arranged in the editor or written with kind: custom (see Custom geometry) — is saved with its exact geometry and only reapplies to clips of the same scene type and canvas ratio. Saving a layout that is already a favorite returns the existing one.
string
required
Video ID
string
required
Clip ID
string
Layout ID from
list_layouts. Defaults to base, the clip-spanning layoutstring
Favorite name, as shown in the editor. Defaults to the layout’s display name
list_layouts
List the layouts on a clip, including the synthetic base layout (the layout that spans the whole clip). Custom layouts report their geometry askind: custom. Named layouts report their camera frame override as cameraStyle when one is set — see Camera style. Each layout reports the crop of the clip’s screen recording it shows — see Crop. Every layout other than base reports followsBase: true when it follows the base layout, so updating base changes it too; false when it has its own layout.
string
required
Video ID
string
required
Clip ID
add_layout
Add a layout to a clip. PassstartTimeMs + durationMs for a time range, or omit both for a clip-spanning layout.
To add b-roll, give a time range and set media. You can omit layout and the server applies a full-frame b-roll layout suited to the clip (screen-only for combi clips, fullscreen for basic and camera-subject clips), or pass layout with a kind valid for the clip’s scene type — see Layout kinds.
To show a moment from the clip’s own recording as b-roll, such as a demo moment while the presenter keeps talking, set media to {"type": "recording", "startTimeMs": 42000}. It plays the clip’s screen recording from that point on the playback timeline, muted by default, with no copy, export or upload.
string
required
Video ID
string
required
Clip ID
object
Structured layout — see Layout kinds. Omit it to apply the default full-frame b-roll layout for the clip’s scene type.
integer
Start time in ms
integer
Duration in ms. Minimum 200ms.
enum<string>
Transition into the layout —
spring or hardCut. Only valid on time-ranged layouts. When omitted, the user’s saved layout intro transition is used; the saved outro transition is applied when the following layout begins or resumes.object
B-roll shown during the layout. Only valid on time-ranged layouts. One call fills one slot; to fill both, add one slot here and the other with
update_layout.string | null
Override the named layout’s camera frame —
none, circle, square, portrait, cutout, blob, or blob-outline. null clears the override; omitted leaves it unchanged. See Camera style for requirements.object | null
Crop the clip’s screen recording for this layout only — see Crop.
top, right, bottom, left in pixels of the recording; null follows the clip’s crop.update_layout
Update a layout on a clip. Only provided fields change.string
required
Video ID
string
required
Clip ID
string
required
Layout ID (use
base for the clip-spanning layout). Updating base also changes every layout that reports followsBase: true, so there’s no need to update those one by oneobject
New structured layout — a named kind, or
custom geometry that merges over the layout’s current custom geometry (see Custom geometry)integer
New start time in ms
integer
New duration in ms. Minimum 200ms.
enum<string>
spring or hardCut. Rejected on the base layout.object
Set the layout’s B-roll content for one slot. Rejected on the base layout. Same shape as
add_layout’s media, including the optional slot field. Additive per slot: media in the other slot is preserved, and media already in the targeted slot is replaced.object | null
Switch the camera pop-out on (an object merges over the current settings — see Pop-out) or off (
null). Omitted leaves it as it is, except that a cut-out layout or cameraStyle: "cutout" drops it. On the base layout this, cameraStyle, and crop are accepted without layout.string | null
Override the named layout’s camera frame —
none, circle, square, portrait, cutout, blob, or blob-outline. null clears the override; omitted leaves it unchanged. See Camera style for requirements.object | null
Crop the clip’s screen recording for this layout only — see Crop.
top, right, bottom, left in pixels of the recording; null makes the layout follow the clip’s crop again. Omitted leaves it as it is.remove_layout
Remove a non-base layout from a clip. Useupdate_layout to change the base layout.
string
required
Video ID
string
required
Clip ID
string
required
Layout ID
Auto layouts
There is no tool that lays a clip out for you. To get the editor’s “Auto layouts” from your own agent, add thetella-auto-layouts skill (npx skills add tellahq/skills). It reads the clip’s transcript and frames, picks a base layout and adds timed layout changes with the tools on this page.