Install
openclaw skills install tella-cliManage 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.
openclaw skills install tella-cliUse the tella-cli skill when you need to:
linkScope, password, allowed embed domains, search-engine indexingvideo.created, export.ready, transcript.ready, etc.) and recover delivery messagesIf 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.
--json for agent-driven calls so downstream steps can parse the result<resource> --help or <resource> <action> --help when unsure of flags rather than guessingdelete, remove-*), read first with get/list to confirm the target<videoId> and <clipId> as positional args (in that order)0-1 of the canvas*-ms flags) unless the docs say otherwisetella-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).
| 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) |
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.
| 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 | - |
| 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.
--json returns a standardized envelope:
{ "ok": true, "data": { ... }, "meta": { "total": 42 } }
On error: { "ok": false, "error": { "message": "...", "status": 401 } }
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
All commands support: --json, --format <text|json|csv|yaml>, --verbose, --no-color, --no-header
Exit codes: 0 = success, 1 = API error, 2 = usage error