Clip tools take milliseconds on the clip’s playback timeline — the clip as watched, with cuts applied, the same timeline as
get_transcript, thumbnails, and previews. A start at or past the end of the clip is rejected with a 400.Three kinds of tool on this page use a different timeline, and say so on their startTimeMs:get_video_frameandget_video_previewcount from the video’s playback start, cumulative across clips.get_source_thumbnailcounts from the start of the raw source file — no clip cuts apply.get_storyboarddoes the same when given asourceId.- Stored cut definitions (
get_clip’s andupdate_clip’scuts) describe removed ranges of the raw recording. Cuts are always undoable by replacing them with[], which restores the footage; itemscut_clipdeleted with their footage stay deleted.
upload_clip
Add a new clip to a video from an uploaded source. Callcreate_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.
string
required
Video ID
string
required
Source ID returned by
create_sourcestring
Clip name. Defaults to the next
Clip N.list_clips
List clips in a video, ordered by their position.string
required
Video ID
get_clip
Get a single clip’s details.string
required
Video ID
string
required
Clip ID
update_clip
Update a clip’s name, ordering, cuts, background, transition, Studio Sound opt-out, audio volumes, animated cursor, camera framing, or frame styling (corner rounding and border style).string
required
Video ID
string
required
Clip ID
string
New clip name
integer
New position within the video
object[]
Replaces the clip’s full cut set. Each cut is
{startTimeMs, durationMs} in ms of the raw recording (the playback timeline you’d get after clearing all cuts). Pass [] to clear all cuts. To cut what you currently see, use cut_clip instead.object
Background
{type, color?, sourceId?, imageUrl?, videoUrl?, videoDurationSeconds?, gradientColor1?, gradientColor2?, gradientAngle?, shaderGradientPreset?}. type is one of solid, image, video, gradient, shaderGradient, ambient. ambient fills the background with the clip’s screen recording, heavily blurred, while the screen is shown, and with its camera otherwise. shaderGradient is an animated gradient chosen by shaderGradientPreset. For your own image or video, pass a sourceId from create_source (kind: "image" or kind: "video"). To use a catalog background, pass the exact background object returned by list_backgrounds; arbitrary image and video URLs are rejected.enum<string>
How this clip enters from the previous clip —
smooth, hard_cut, or default. Use default to remove the clip override and follow the video’s defaultClipTransition. The first clip has nothing to transition from.boolean
Per-clip Studio Sound opt-out.
false disables enhanced audio for this clip while the video-level switch (update_video’s studioSound) stays on; true re-enables it.number | null
Microphone volume for this clip only, overriding
update_video’s microphoneVolume. 1 is the recorded level, 0 mutes it, 2 doubles it. Pass null to clear the override so the clip follows the video again. If the clip has no microphone audio, null and 0 are no-ops and any other number returns an error.number | null
System audio (screen or uploaded footage) volume for this clip only, overriding
update_video’s systemAudioVolume. Same range and null-to-clear behaviour. If the clip has no system audio, null and 0 are no-ops and any other number returns an error.boolean
Draw an animated cursor from captured mouse data on this clip’s screen recording. Errors when the clip has no screen recording.
boolean
Mirror (flip horizontally) this clip’s camera, like the editor’s Mirror camera. Applies to this clip only; set it on every clip to mirror the whole video. Errors when the clip has no camera.
object | null
{xPct, yPct} (0–100): which part of the camera recording stays in view when a layout’s camera frame is a different shape than the recording, like the focus point in the editor’s Crop → Adjust camera. 0 keeps the left/top edge, 50 the middle, 100 the right/bottom edge. Measured on the unmirrored recording after cameraCrop. Pass null to reset it to the middle.object | null
{top, right, bottom, left}: pixels removed from each edge of the unmirrored camera recording (list_sources gives its dimensions). Crop tighter to make the presenter larger in the frame. Pass null to remove the crop.boolean
Pan the camera to keep the presenter’s face centered as they move, like the editor’s Keep face centered. While it’s on it takes over from
cameraFocusPoint. Turning it on errors when the camera has no face detections (older recordings); set cameraFocusPoint instead.enum<string>
Corner rounding of the clip’s frames (screen and camera), the editor Style panel’s Shape:
none (square), regular (rounded) or squircle (very rounded). A circle camera stays a circle.enum<string>
Border and shadow around the clip’s frames, the editor Style panel’s Border style:
none, subtle-shadow, deep-shadow, transparent, solid-shadow-left, solid-shadow-right (the solid shadow and its direction), snake or glass (a liquid glass rim). snake and glass keep the clip’s current settings for that style, or the editor’s default.get_clip reports each volume as:
- a number — this clip overrides the video setting
null— it follows the video- absent — there is nothing to control: no such track, or a recording without audio, like a screen recording made without sharing system audio
transition, plus animatedCursor when the clip has a screen recording and mirrorCamera, cameraFocusPoint, cameraCrop and keepCameraFaceCentered when it has a camera.
The camera framing fields reframe the presenter inside the camera frame without changing the layout or where the camera sits and how big it is. They apply to every layout in the clip, like the editor’s All layouts in this clip: a layout that had its own camera crop or focus point follows the clip again. Set them on each clip to reframe the whole video.
corners and borderStyle style the clip across all of its layouts, like the editor’s Apply to this clip only: other clips keep the video’s styling. get_clip reports the clip’s current corners and borderStyle. The border style reads custom when the clip’s layers were styled one by one or with a retired preset. You can’t write custom.
delete_clip
Remove a clip from its video.string
required
Video ID
string
required
Clip ID
duplicate_clip
Duplicate a clip. The copy is inserted right after the original by default.string
required
Video ID
string
required
Clip ID to duplicate
string
Name for the new clip
integer
Position for the new clip
split_clip
Split a clip in two at a time on its playback timeline, like the editor’s split at the playhead. The clip keeps everything beforeatMs, and a new clip inserted right after it continues from there. Each cut, layout, zoom, blur, highlight and overlay goes to the part it sits on. One that spans atMs is split too: each part keeps its side, and a video, audio or sound effect overlay keeps playing in the second clip from where the first stopped. Both parts must play for at least 200 ms. Returns both clips in playback order; the first keeps the original clip’s id.
string
required
Video ID
string
required
Clip ID to split
integer
required
Where to split, in ms on the clip’s playback timeline. At least 200 ms from either end of the clip.
reorder_clip
Move a clip to a new position; other clips shift to stay contiguous.string
required
Video ID
string
required
Clip ID
integer
required
New 0-based position
cut_clip
Cut one or more time ranges from a clip in a single call. Overlapping or adjacent ranges are merged into the clip’s existing cuts. Zooms, blurs, highlights and overlays (text, images, media, sound effects) placed entirely on footage the cut removes are deleted with it; clearing the cuts later does not bring them back. To clear all cuts, callupdate_clip with cuts: [].
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{fromMs, toMs} ranges to cut, in ms (what you currently see and hear — the same timeline as get_transcript and get_silences). All ranges are resolved against the playback timeline as it is when the call starts, so send every range in one call instead of issuing many cut_clip calls.cut_clip_by_transcript
Cut one or more ranges from a clip by referencing word indices in the transcript. The server resolves each word’s exact start/end ms — no padding is applied. Useget_transcript to look up word indices. Zooms, blurs, highlights and overlays (text, images, media, sound effects) placed entirely on footage the cut removes are deleted with it; clearing the cuts later does not bring them back.
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{fromWordIndex, toWordIndex} ranges. Both indices are inclusive and come from the clip’s transcript (indices are stable — already-cut words are simply absent).get_silences
Detect silent ranges in the clip’s audio, in ms on the clip’s playback timeline (cuts applied) — pass them directly tocut_clip. Silences already removed by cuts are not reported.
string
required
Video ID
string
required
Clip ID
integer
Minimum silence length to report, in ms. Defaults to 200.
get_audio_levels
Measure the peak loudness of a clip’s voice track over a time range. Use this to locate a breath, click, or sound the transcript misses, or check audio left at a cut without downloading the source. Times use the clip’s playback timeline, with cuts applied, matchingget_transcript and get_silences. This measures the voice track, not the full mix with background music and sound effects.
string
required
Video ID
string
required
Clip ID
number
required
Range start in ms on the clip’s playback timeline. Must be at least 0.
number
required
Range end in ms on the clip’s playback timeline. Must be greater than
startTimeMs.number
Width of each level step in ms (default 10, minimum 5). A range can contain at
most 12,000 steps; shorten the range or increase
stepMs for longer clips.startTimeMs, stepMs, resolutionMs, and levelsDb. Each entry in levelsDb is the peak level in dBFS for a step starting at startTimeMs + index * stepMs: 0 is full scale, more negative values are quieter, and null means there is no audio for that step. The clip must have a voice track and a ready waveform.
Levels come from stored waveform buckets, typically about 5 ms long.
resolutionMs reports that bucket length. A step within this distance of a
cut can include a little cut audio, so don’t treat it as an exact sound
boundary.GET /v1/videos/{id}/clips/{clipId}/audio-levels, using startTimeMs, endTimeMs, and optional stepMs query parameters.
remove_fillers
Auto-detect and cut filler words (“um”, “uh”, etc.) from the clip’s transcript.string
required
Video ID
string
required
Clip ID
remove_silences
Auto-detect and cut silent pauses from the clip’s audio, like the editor’s Remove silences tool.string
required
Video ID
string
required
Clip ID
enum<string>
How aggressively to remove silences —
natural cuts pauses longer than 800ms,
fast longer than 500ms, faster longer than 300ms. Defaults to natural.list_sources
List the underlying recordings (camera, screen, mic) the clip was cut from, each with the volume it plays at in this clip:volume is the clip’s own override (null when it inherits) and effectiveVolume is what actually plays. Read these to inspect a mix; change it with update_clip’s microphoneVolume/systemAudioVolume.
string
required
Video ID
string
required
Clip ID
get_clip_frame
Get a rendered frame from a clip’s playback timeline (cuts applied), including the clip’s layouts, b-roll media, zooms, and masks. Forjpg, png, or webp, returns inline image content the model can see, plus a signed URL. For gif, returns the signed URL only (vision models don’t read animation, so the bytes aren’t inlined).
string
required
Video ID
string
required
Clip ID
enum<string>
jpg (default), png, webp, or gifinteger
Frame offset in ms on the clip’s playback timeline (default 0)
integer
Duration in ms when
format is gifinteger
Output width in pixels (range 1–1920, default 320). The frame keeps the
video’s aspect ratio.
integer
Output height in pixels (range 1–1920). Derived from the video’s aspect ratio
when omitted.
boolean
Suggest a download disposition on the signed URL
boolean
Draw the video’s captions, as an export with subtitles does. Defaults to
false, which leaves captions out. Pass true to check how captions lookget_clip_frame, get_video_frame, get_source_thumbnail, and get_storyboard wait up to about 90 seconds when an upload is converting or a render is taking longer than the upstream request. If the image is still unavailable, the tool returns a retryable error with code: "thumbnail_not_ready" and status: "processing" (conversion) or status: "rendering" (render).
If the frame needs a presenter cut-out that is still rendering, the retryable error uses the same code: "thumbnail_not_ready" with status: "preparing_cutout". Its message includes the cut-out’s progress percentage. This can happen with overlays behind the presenter, and long clips can take a few minutes. The cut-out keeps rendering after the call returns.
Call the same tool again with the same arguments to keep waiting; a render retry does not start a second render. If the image is still unavailable after about 3 minutes in total, stop retrying. Other upstream failures return code: "thumbnail_fetch_failed" with a signed URL to fetch manually. GIF and MP4 requests return a URL without waiting for the image.
get_clip_preview
Get an MP4 preview from a clip’s rendered playback timeline. The tool waits up to a minute for the render and returns a signedurl rather than inline video content. The MP4 includes the audio, so you can download it to hear how a cut sounds, for example by extracting that time range’s audio with ffmpeg.
When status is ready, you can download the URL immediately. When status is rendering, call get_clip_preview again with the same arguments to keep waiting, for about 3 minutes in total; this reuses the render instead of starting another one.
A failed render returns a tool error with code: "preview_render_failed", the upstream httpStatus, and a message. If the render status cannot be checked, the result has a url but no status; fetching that URL may start the render and return HTTP 408 while it is still running.
string
required
Video ID
string
required
Clip ID
integer
Preview offset in ms on the clip’s playback timeline (default 0)
integer
Preview duration in ms (default 5000, range 500–30000)
integer
1, 2, 5, 10, or 30 (default 30)integer
Output width in pixels (range 1–1920). Defaults to 320. The preview keeps the
video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels (range 1–1920). Derived from the video’s aspect ratio
when omitted.
boolean
Suggest a download disposition on the signed URL
boolean
Draw the video’s captions, as an export with subtitles does. Defaults to
false, which leaves captions out. Pass true to check how captions lookget_video_frame
Get a rendered frame from an entire video’s playback timeline. It returns the same processing results and accepts the same frame format and sizing options asget_clip_frame.
string
required
Video ID
enum<string>
jpg (default), png, webp, or gifinteger
Frame offset in ms from the video’s playback start (cumulative across clips,
cuts applied)
integer
Duration in ms when
format is gifinteger
Output width in pixels (range 1–1920). Defaults to 320 (small, cheap in LLM
tokens). The frame keeps the video’s aspect ratio, so omit height to have it
derived automatically.
integer
Output height in pixels (range 1–1920). Derived from the video’s aspect ratio
when omitted.
boolean
Draw the video’s captions, as an export with subtitles does. Defaults to
false, which leaves captions out. Pass true to check how captions lookget_video_preview
Get an MP4 preview from an entire video’s rendered playback timeline. The tool waits up to a minute for the render and returns a signedurl rather than inline video content. The MP4 includes the audio, so you can download it to hear how a cut sounds, for example by extracting that time range’s audio with ffmpeg.
When status is ready, you can download the URL immediately. When status is rendering, call get_video_preview again with the same arguments to keep waiting, for about 3 minutes in total; this reuses the render instead of starting another one.
A failed render returns a tool error with code: "preview_render_failed", the upstream httpStatus, and a message. If the render status cannot be checked, the result has a url but no status; fetching that URL may start the render and return HTTP 408 while it is still running.
string
required
Video ID
integer
Preview offset in ms from the video’s playback start (cumulative across clips,
cuts applied)
integer
Preview duration in ms (default 5000, range 500–30000)
integer
1, 2, 5, 10, or 30 (default 30)integer
Output width in pixels (range 1–1920). Defaults to 320. The preview keeps the
video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels (range 1–1920). Derived from the video’s aspect ratio
when omitted.
boolean
Draw the video’s captions, as an export with subtitles does. Defaults to
false, which leaves captions out. Pass true to check how captions lookget_storyboard
Get a fixed 4×4 WebP storyboard whose 16 tiles are sampled evenly across the requested window (durationMs/16 apart; every 5 seconds for the default 80s window).
- Returns inline WebP image content the model can inspect, plus JSON with the signed
url,columns,rows, andintervalMs. Tilei(row-major) shows the frame atstartTimeMs + i * intervalMs. - Pass
videoIdalone for the full story,videoIdwithclipIdfor a rendered clip, orsourceIdalone for a streaming upload.
string
Required for a story or clip. Video/story ID
string
Clip/scene ID; requires
videoIdstring
Required for a streaming upload. Source ID; cannot be combined with
videoId
or clipIdinteger
Storyboard window start in ms on the selected target’s timeline (default 0):
the video’s cumulative playback timeline, the clip’s playback timeline, or the
raw source file.
integer
Window duration in ms (default 80,000ms). Pass the target’s full duration to
sample the whole video end to end.
durationMs.
get_filmstrip
Get several rendered frames of a video, of one clip, or of a source (any uploaded video, such as an attachment) as one JPEG grid, rendered in one render. Each tile is labelled with its time (m:ss.cc). Use it for an overview, and to compare moments side by side: the frames just before, at and just after a cut, the steps of a transition, or a check after an edit.
- Pass
videoIdalone,videoIdwithclipId, orsourceIdalone. - Times are on the video’s playback timeline (cuts applied, cumulative across clips), on the clip’s playback timeline when
clipIdis given, or on the source’s own timeline. - Pick the frames one way:
timesMs(2–24 exact times, shown in the order given); a range withstartTimeMs,endTimeMs(excluded) andintervalMs; or neither, for 16 frames spread evenly over the range (the whole video or clip by default). - Returns inline JPEG image content plus JSON with
columns,rows,tileWidth,tileHeightandtiles: one entry per tile, row-major, with itstimeMsand, for a video, theclipIdandclipTimeMsit falls in. - Captions are left out unless you pass
subtitles: true. It needsvideoId: a source has no captions. - At most 24 frames per call. For one moment at full size, such as small text, use
get_video_frame(get_source_thumbnailfor a source); for motion, audio or lip sync, useget_video_preview.
get_video_frame (see above). It does everything get_storyboard does, with labelled tiles and exact times; get_storyboard stays for existing clients. This tool is MCP-only: REST clients fetch frames one at a time from the thumbnail endpoints, or a storyboard.
string
Video ID. Pass alone, or with
clipId for one clipstring
Clip ID. Times are then on this clip’s playback timeline
string
Source ID. Pass alone, without
videoId or clipIdinteger[]
2–24 exact frame times in ms. Cannot be combined with
startTimeMs,
endTimeMs or intervalMsinteger
Range start in ms (default 0)
integer
Range end in ms, excluded (default: the end of the video, clip or source)
integer
Spacing between frames in the range. Omit for 16 frames spread evenly
integer
Tile width in pixels, 160–640 (default 320). Height follows the video’s
aspect ratio
integer
Tiles per row (default: as many as fit in about 1,500px)
boolean
Draw the video’s captions, as an export with subtitles does. Defaults to
false, which leaves captions out. Pass true to check how captions lookset_video_thumbnail
Set a video’s thumbnail. Two modes, mutually exclusive:- Uploaded image: call
create_sourcewithkind: "image", HTTP PUT the image bytes to the returneduploadUrl, then pass thesourceIdhere. - Frame from the video: pass
inpointMs, a time on the video’s playback timeline (cuts applied, cumulative across clips). Inspect candidate frames first withget_video_frame, passing the same value asstartTimeMs.
customThumbnailURL null — verify it through thumbnailInpointMs in the video’s settings from get_video.
string
required
Video ID
string
Uploaded image source ID
integer
Thumbnail frame time in ms
remove_video_thumbnail
Remove a video’s custom thumbnail (uploaded image or picked frame) and revert to the default auto-generated thumbnail.string
required
Video ID
get_source_thumbnail
Get a thumbnail of a specific source recording. Forjpg, png, or webp, returns inline image content plus a signed URL; for gif or mp4, returns the signed URL only.
Pass videoId with clipId for a source on a clip, or sourceId alone for a source in your workspace that isn’t on any clip yet.
string
Video ID; pass together with
clipIdstring
Clip ID using the source; pass together with
videoIdstring
required
Source recording ID
enum<string>
jpg, png, webp, gif, or mp4integer
Frame offset in ms from the raw source file’s start — no clip cuts apply
integer
Duration of the animated preview (gif/mp4 only)
integer
Output width in pixels (range 1–1920). Defaults to 320 (small, cheap in LLM
tokens). The thumbnail keeps the video’s aspect ratio, so omit height to have
it derived automatically.
integer
Output height in pixels (range 1–1920). Derived from the video’s aspect ratio
when omitted.
get_source_waveform
Get the waveform data for a source recording’s audio track. PassvideoId with clipId for a source on a clip, or sourceId alone for a source in your workspace that isn’t on any clip yet.
Returns the BBC audiowaveform format for the whole source in source time, without clip cuts applied. Use this for custom waveform visualizations; use get_audio_levels to measure loudness over part of a clip’s playback timeline.
string
Video ID; pass together with
clipIdstring
Clip ID using the source; pass together with
videoIdstring
required
Source recording ID
get_transcript
Transcript for the clip (cuts applied — what the viewer hears). Word indices are stable identifiers forcut_clip_by_transcript; they don’t shift when cuts change. To see words that were cut out, pass includeCut: true (below).
Each word includes hidden, breakAfter, and keepWithNext only when they are true. Treat an absent flag as false. hidden: true hides the word from captions and subtitles without changing the audio. breakAfter: true forces the next word into a new subtitle block. keepWithNext: true keeps the word’s block together with the next word across punctuation and pauses, but the lines-per-block limit still applies and breakAfter takes priority.
This omission applies only to MCP get_transcript. The public API’s clip transcript endpoint, update_transcript_words, and get_timeline still return explicit boolean values for these flags.
For a long clip, pass startTimeMs and endTimeMs to read its transcript in windows. A word belongs to the window containing its start time; adjacent windows don’t repeat words. Omit both to get the whole transcript.
Pass view: "text" to get every word with its index as plain text, about a seventh of the size of the words: one sentence per line, starting with the sentence’s start time, then each word as index:word ([1:02.5] 12:Hello 13:there.). It suits reading a whole long clip, such as looking for retakes and repeated sentences, and its indices go straight into cut_clip_by_transcript. Read the words view for a stretch where you need exact word times, such as placing something at a word.
Pass view: "sentences" to get one row per sentence instead: firstIndex, lastIndex, startTimeMs, endTimeMs and text, about a quarter of the size of the words. It suits finding where something is said.
A clip you just recorded has no words until its recording is transcribed. Until then the call fails and says the clip is still being transcribed; wait about 30 seconds and call it again. A clip whose recording has no voice returns an empty transcript.
To read a source that isn’t on any clip yet, such as an imported video or a chat attachment, pass sourceId alone instead of videoId and clipId. You get the source’s whole transcript in source time, with no cuts applied; time windows, view: "text" and view: "sentences" work the same way. The call fails while the source is still being transcribed, so wait until get_source reports it ready. In the public API, the same transcript is at GET /v1/sources/{sourceId}/transcript.
string
Video ID; pass together with
clipIdstring
Clip ID; pass together with
videoIdstring
Source ID, instead of
videoId and clipId. Times are then in source timeinteger
First time to include, in ms on the clip’s playback timeline (default: clip
start). Must be at least 0.
integer
First time to exclude, in ms on the clip’s playback timeline (default: clip
end). Must be greater than
startTimeMs.string
words (default), text or sentences. A time window cuts sentences at its
edges.boolean
Also return the words cuts removed. Each word then has
sourceStartTimeMs
and sourceEndTimeMs, its times in the clip’s source recording; kept words
also have their playback startTimeMs and endTimeMs, and cut words have
cut: true instead. The time window filters on source times. Words view
only.update_transcript_words
Fix what the transcript says. Each edit addresses one word by itsindex from get_transcript and sets text (the corrected wording, which also unhides the word), hidden (whether the word shows in captions and subtitles), breakAfter (whether a new subtitle block starts after the word) or keepWithNext (whether the word’s subtitle block stays together with the next word where punctuation or a pause would split it). You can send text with hidden: false, but not with hidden: true; breakAfter and keepWithNext go on their own. Returns the edited words in their new state.
- Corrections apply to the transcript, captions and subtitles together. The audio and the clip’s timing are untouched — use
cut_clip_by_transcriptto actually remove spoken words. - Send at most one edit per word and at most 100 words per call; split a longer rewrite into several calls.
- Hiding or showing a word leaves its wording alone, so the two can be combined in any order.
- To join two subtitle blocks, set
keepWithNext: trueon the last word of the first block. If that word hasbreakAfter: true, first clear it withbreakAfter: falsein a separate call: you cannot change both attributes or send two edits for the same word in one batch. The lines-per-block limit still applies, andbreakAfterwins overkeepWithNext.
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{index, text}, {index, hidden}, {index, breakAfter} or {index, keepWithNext} edits, at most 100. Indices come from get_transcript; a word that is currently cut out of the clip can’t be edited.get_clip_filters
Get the color filters on a clip’s camera and screen recordings: the matching preset (orcustom), exposure, contrast, saturation, temperature, tint, and LUT. camera or screen is null when the clip has no such recording. These are the editor’s Style → Filters settings.
string
required
Video ID
string
required
Clip ID
set_clip_filters
Color-grade a clip’s camera, screen recording, or uploaded footage. Passcamera, screen, or both. Filters are per clip: to grade a whole video, call this for each clip from list_clips. Check the result with get_clip_frame.
Setting a filter for a recording the clip does not have returns an error.
Only supplied fields change. A preset replaces the entire filter, including the LUT, before other supplied fields adjust it. Without a preset, fields adjust the current filter. Pass null for a recording’s filter to remove it, or lut: null to remove only its LUT. The call returns the filters after the change.
string
required
Video ID
string
required
Clip ID
object | null
Camera filter. Uses the same fields as
screen below.object | null
Screen recording or uploaded-video filter.