Skip to main content
A clip is a section of a video — Tella videos are made up of one or more clips. Each clip has its own cuts, layouts, transcript, and editing tools.
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_frame and get_video_preview count from the video’s playback start, cumulative across clips.
  • get_source_thumbnail counts from the start of the raw source file — no clip cuts apply. get_storyboard does the same when given a sourceId.
  • Stored cut definitions (get_clip’s and update_clip’s cuts) describe removed ranges of the raw recording. Cuts are always undoable by replacing them with [].

upload_clip

Add a new clip to a video from an uploaded source. Call create_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_source
string
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, or animated cursor.
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?}. type is one of solid, image, video, gradient. 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. Errors when the clip has no microphone audio to control.
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. Errors when the clip has no such audio to control.
boolean
Draw an animated cursor from captured mouse data on this clip’s screen recording. Errors when the clip has no screen recording.
Use the volumes to fix a balance in one clip — mic too quiet against loud screen audio, or one clip recorded hotter than the rest. 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
It also reports the clip’s transition, plus animatedCursor when the clip has a screen recording.

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

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. To clear all cuts, call update_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. Use get_transcript to look up word indices.
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 to cut_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.

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. For jpg, 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 gif
integer
Frame offset in ms on the clip’s playback timeline (default 0)
integer
Duration in ms when format is gif
integer
Output width in pixels (default 320). The frame keeps the video’s aspect ratio.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
boolean
Suggest a download disposition on the signed URL
While the video is still uploading or converting, the tool returns a result with code: "thumbnail_not_ready" and status: "processing" instead of an image — retry once the video finishes processing. Other upstream failures return code: "thumbnail_fetch_failed" with a signed URL to fetch manually.

get_clip_preview

Get an MP4 preview from a clip’s rendered playback timeline. It returns a signed URL rather than inline video content.
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. Defaults to 320. The preview keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
boolean
Suggest a download disposition on the signed URL

get_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 as get_clip_frame.
string
required
Video ID
enum<string>
jpg (default), png, webp, or gif
integer
Frame offset in ms from the video’s playback start (cumulative across clips, cuts applied)
integer
Duration in ms when format is gif
integer
Output width in pixels. 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. Derived from the video’s aspect ratio when omitted.

get_video_preview

Get an MP4 preview from an entire video’s rendered playback timeline. It returns a signed URL rather than inline video content.
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. Defaults to 320. The preview keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.

get_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, and intervalMs. Tile i (row-major) shows the frame at startTimeMs + i * intervalMs.
  • Pass videoId alone for the full story, videoId with clipId for a rendered clip, or sourceId alone for a streaming upload.
Storyboards for videos and their clips are available outside your workspace when the video has an ungated public link. A public or embed-only playlist does not bypass the video’s own private link, password, or email gate.
string
Required for a story or clip. Video/story ID
string
Clip/scene ID; requires videoId
string
Required for a streaming upload. Source ID; cannot be combined with videoId or clipId
integer
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.
Tile count, dimensions, and format are fixed; the sampling interval follows from durationMs.

set_video_thumbnail

Set a video’s thumbnail. Two modes, mutually exclusive:
  • Uploaded image: call create_source with kind: "image", HTTP PUT the image bytes to the returned uploadUrl, then pass the sourceId here.
  • Frame from the video: pass inpointMs, a time on the video’s playback timeline (cuts applied, cumulative across clips). Inspect candidate frames first with get_video_frame, passing the same value as startTimeMs.
Setting one mode clears the other. A picked frame leaves 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. For jpg, png, or webp, returns inline image content plus a signed URL; for gif or mp4, returns the signed URL only.
string
required
Video ID
string
required
Clip ID
string
required
Source recording ID
enum<string>
jpg, png, webp, gif, or mp4
integer
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. 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. Derived from the video’s aspect ratio when omitted.

get_source_waveform

Get the waveform data for a source recording’s audio track.
string
required
Video ID
string
required
Clip ID
string
required
Source recording ID

get_transcript

Transcript for the clip (cuts applied — what the viewer hears). Word indices are stable identifiers for cut_clip_by_transcript; they don’t shift when cuts change. To see words that were cut out, clear the cuts first (update_clip with cuts: []) — cuts are always undoable.
string
required
Video ID
string
required
Clip ID

update_transcript_words

Fix what the transcript says. Each edit addresses one word by its index from get_transcript and sets either text (the corrected wording, which also unhides the word) or hidden (whether the word shows in captions and subtitles) — never both. 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_transcript to actually remove spoken words.
  • Send every correction for a clip in one call: at most one edit per word, and at most 100 words.
  • Hiding or showing a word leaves its wording alone, so the two can be combined in any order.
A batch is applied atomically, so a call never changes only some of its words. An error does not by itself mean nothing changed — the words can land and a later step still fail — so treat the outcome as either fully applied or not applied at all. Every edit assigns a word outright, so re-sending the identical call is safe and settles it.
string
required
Video ID
string
required
Clip ID
object[]
required
Array of {index, text} or {index, hidden} edits, at most 100. Indices come from get_transcript; a word that is currently cut out of the clip can’t be edited.