
tella
Manage Tella via CLI - videos, clips, playlists, webhooks. Use when user mentions 'tella', 'tella.tv', 'tella video', 'screen recording', 'video transcript', 'clip thumbnail', 'video export', 'remove filler words', 'add zoom to video', 'blur video', 'highlight video', 'playlist of videos', or wants to interact with the Tella video recording/editing API.
Install
$ npx api2cli install Melvynx/tellaDetails
README
tella-cli
When To Use This Skill
Use the tella-cli skill when you need to:
- List, fetch, update, or delete videos in a Tella workspace
- Pull transcripts (cut or uncut) for a clip with word-level timestamps
- Generate video or clip thumbnails (jpg/png/webp/gif/mp4) at custom sizes/timestamps
- Trigger video exports at 1080p or 4k, 30/60fps, with optional burned-in subtitles
- Duplicate a video or clip, optionally trimmed
- Edit clips: cut time ranges, reorder, remove filler words, find silent ranges
- Add or update visual edits: blurs, highlights, layouts, zooms (manual or tracking)
- Manage playlists and add/remove videos from them
- Add workspace collaborators (editor or viewer) to a video
- Create webhook endpoints, fetch signing secrets, and inspect recent deliveries
Capabilities
- Read every video and playlist in the workspace, including metadata, view counts, and share links
- Push fine-grained edits to clips (cuts, reorders, blurs, highlights, layouts, zooms) without opening the Tella editor
- Pull transcripts for downstream search, summarization, or accessibility workflows
- Start exports and poll/list webhook deliveries to know when files are ready
- Manage sharing:
linkScope, password, allowed embed domains, search-engine indexing - Subscribe to events (
video.created,export.ready,transcript.ready, etc.) and recover delivery messages
Common Use Cases
- "List my last 20 Tella videos and dump them as JSON for a content audit"
- "Get the uncut transcript for clip X so I can generate chapter timestamps"
- "Export video Y at 4k 60fps with subtitles burned in"
- "Add a blur over the credentials shown between 4.2s and 7.8s on this clip"
- "Create a playlist 'Tutorials' and add these 5 videos to it"
- "Wire up a webhook so I get notified when an export is ready"
- "Remove filler words from this clip and then fetch the cleaned transcript"
Setup
If tella-cli is not found, install and build it:
bun --version || curl -fsSL https://bun.sh/install | bash
npx api2cli bundle tella
npx api2cli link tella
api2cli link adds ~/.local/bin to PATH automatically. The CLI is available in the next command.
Always use --json when calling commands programmatically.
Working Rules
- Always use
--jsonfor agent-driven calls so downstream steps can parse the result - Run
<resource> --helpor<resource> <action> --helpwhen unsure of flags rather than guessing - For destructive actions (
delete,remove-*), read first withget/listto confirm the target - Most clip mutations require both
<videoId>and<clipId>as positional args (in that order) - Coordinates for masks (blurs, highlights) and zoom focus points are normalized to
0-1of the canvas - Times are in milliseconds (
*-msflags) unless the docs say otherwise
Authentication
tella-cli auth set "tella_pk_xxx..." # API key from https://www.tella.tv/settings/api-keys
tella-cli auth test # Verify the key works
tella-cli auth show # Show masked token
tella-cli auth remove # Delete stored token
Token is stored at ~/.config/tokens/tella-cli.txt (chmod 600).
Resources
videos
| Action | Description | Key Flags |
|---|---|---|
list | List videos in the workspace | --cursor, --limit, --playlist-id, --fields |
get <id> | Get a single video's metadata | - |
update <id> | Update title, description, sharing, playback | --name, --description, --link-scope, --password, --allowed-embed-domains, --custom-thumbnail-url, --default-playback-rate, --captions-default-enabled, --comments-enabled, --comment-emails-enabled, --downloads-enabled, --raw-downloads-enabled, --publish-date-enabled, --search-engine-indexing-enabled, --transcripts-enabled, --view-count-enabled |
delete <id> | Delete a video | - |
duplicate <id> | Duplicate, optionally trimmed | --name, --trim-start-ms, --trim-end-ms |
export <id> | Start an export job | --resolution (1080p/4k), --fps (30/60), --speed, --granularity (video/clips/raw), --subtitles |
thumbnail <id> | Get thumbnail/animated preview | --format (jpg/png/webp/gif/mp4), --inpoint-ms, --duration-ms, --width, --height, --download, --response json |
add-collaborator <id> | Add a workspace member | --email (required), --role editor|viewer (required) |
clips
Most clip commands take <videoId> <clipId> as positional args.
| Action | Description | Key Flags |
|---|---|---|
list <videoId> | List clips for a video | --fields |
get <videoId> <clipId> | Get a single clip | - |
update <videoId> <clipId> | Rename or reorder | --name, --order |
delete <videoId> <clipId> | Delete a clip | - |
duplicate <videoId> <clipId> | Duplicate the clip | --name, --order |
cut <videoId> <clipId> | Cut a time range out | --from-ms (req), --to-ms (req) |
reorder <videoId> <clipId> | Move to new position | --order (req) |
remove-fillers <videoId> <clipId> | Auto-remove filler words | - |
silences <videoId> <clipId> | List silent ranges | --min-duration-ms |
transcript-cut <videoId> <clipId> | Edited transcript (post-cuts) | - |
transcript-uncut <videoId> <clipId> | Original transcript | - |
thumbnail <videoId> <clipId> | Clip thumbnail/preview | --format, --inpoint-ms, --duration-ms, --width, --height, --download, --response |
list-sources <videoId> <clipId> | List recording sources | --fields |
source-thumbnail <videoId> <clipId> <sourceId> | Source thumbnail | same as clip thumbnail |
source-waveform <videoId> <clipId> <sourceId> | Audio waveform JSON | - |
list-blurs <videoId> <clipId> | List blur masks | - |
add-blur <videoId> <clipId> | Add a blur mask | --start-time-ms, --duration-ms, --point-x, --point-y, --dim-width, --dim-height (all required) |
update-blur <videoId> <clipId> <maskId> | Update a blur | any of the mask flags above |
remove-blur <videoId> <clipId> <maskId> | Remove a blur | - |
list-highlights <videoId> <clipId> | List highlight masks | - |
add-highlight <videoId> <clipId> | Add a highlight | same mask flags as add-blur |
update-highlight <videoId> <clipId> <maskId> | Update a highlight | mask flags |
remove-highlight <videoId> <clipId> <maskId> | Remove a highlight | - |
list-layouts <videoId> <clipId> | List layouts | - |
add-layout <videoId> <clipId> | Add a layout (JSON shape) | --layout (JSON, req), --start-time-ms, --duration-ms, --transition-style |
update-layout <videoId> <clipId> <layoutId> | Update a layout | --layout, time flags, --transition-style |
remove-layout <videoId> <clipId> <layoutId> | Remove a layout | - |
list-zooms <videoId> <clipId> | List zooms | - |
add-zoom <videoId> <clipId> | Add a zoom | --type manualZoom|trackingZoom (req), --start-time-ms (req), --duration-ms (req), --scale, --focus-x, --focus-y |
update-zoom <videoId> <clipId> <zoomId> | Update a zoom | same as add-zoom |
remove-zoom <videoId> <clipId> <zoomId> | Remove a zoom | - |
Mask coordinates (--point-*, --dim-*, --focus-*) are normalized 0-1 of the canvas.
playlists
| Action | Description | Key Flags |
|---|---|---|
list | List all playlists | --visibility (personal/org), --cursor, --limit, --fields |
get <id> | Get playlist details | - |
create | Create a new playlist | --name (req), --description, --emoji, --link-scope, --password, --visibility, --search-engine-indexing-enabled |
update <id> | Update a playlist | --name, --description, --link-scope, --password, --search-engine-indexing-enabled |
delete <id> | Delete a playlist | - |
add-video <id> | Add a video to it | --video-id (req) |
remove-video <id> <videoId> | Remove a video from it | - |
webhooks
| Action | Description | Key Flags |
|---|---|---|
create-endpoint | Subscribe to events | --url (req), --filter-types (req, comma-separated, e.g. video.created,export.ready) |
delete-endpoint <id> | Delete an endpoint | - |
get-secret <id> | Get the signing secret | - |
list-messages | Recent delivery messages | --event-types, --limit, --fields |
get-message <id> | Get a specific message | - |
Available event types include: video.created, video.viewed, view.milestone, transcript.ready, export.ready, playlist.created, playlist.video_added.
Output Format
--json returns a standardized envelope:
{ "ok": true, "data": { ... }, "meta": { "total": 42 } }
On error: { "ok": false, "error": { "message": "...", "status": 401 } }
Quick Reference
tella-cli --help # List all resources and global flags
tella-cli videos --help # List actions on videos
tella-cli videos list --help # Show flags for videos list
tella-cli clips add-zoom --help # Show flags for add-zoom
Global Flags
All commands support: --json, --format <text|json|csv|yaml>, --verbose, --no-color, --no-header
Exit codes: 0 = success, 1 = API error, 2 = usage error