Processing & AI
What happens after the bytes land: an adaptive HLS ladder, thumbnails and storyboards, word-level transcripts, subtitles and chapters, and optional AI-generated metadata.
Transcode options
Encoding is driven by three per-video fields set on create: quality_preset (low 0.6× · standard 1.0× · high 1.5× · av1 royalty-free SVT-AV1), max_height, and encrypt (AES-128). The pipeline builds an adaptive ladder capped at the source height (no upscaling) and fits it to the source's real bitrate.
libx264 default; libx265/NVENC) and EBU R128 loudness normalization are set in the pipeline config, not per request. Non-encrypted output is CMAF/fMP4 (.m4s); encrypted output is MPEG-TS (.ts) with #EXT-X-KEY.Assets
/v1/videos/{id}/assets videos:read The full inventory of what transcode produced — rendition playlists, the HLS master, progressive MP4, audio-only MP3, and the storyboard sprite — with sizes, dimensions, and bitrate.
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../assets \
-H "Authorization: Bearer $OLLANODE_API_KEY" [ {"kind":"hls_master","content_type":"application/vnd.apple.mpegurl"},
{"kind":"hls_rendition","label":"1080p","width":1920,"height":1080,"bitrate_kbps":5000},
{"kind":"mp4","label":"1080p","size_bytes":48213000,"content_type":"video/mp4"},
{"kind":"audio","label":"audio","content_type":"audio/mpeg"} ] - Confirm which ladder rungs were produced.
- Find the progressive MP4 / MP3 for a downstream tool.
Sub-clips
/v1/videos/{id}/clip videos:write Create a new child video from a frame-accurate [start,end] trim of the parent, run through the full pipeline. Validated against the parent duration.
curl -X POST https://api.ollanode.com/v1/videos/vid_7Qk3.../clip \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"start":12.0,"end":42.5,"title":"Highlight"}' { "id":"vid_NEWchild...", "status":"created", ... } - Highlight reels and teasers cut from a master.
- Chop a long recording into shareable segments.
Thumbnails, poster & storyboard
/v1/videos/{id}/thumbnails videos:read All generated stills — poster, sampled frames, and the storyboard sprite_sheet — as short-lived presigned URLs.
/v1/videos/{id}/thumbnail?time=12.5 videos:read The generated frame nearest a timestamp.
Transcripts
WhisperX generates word-level transcripts automatically. ⚙️ Speaker diarization needs HF_TOKEN and is off by default; an external faster-whisper backend is available via WHISPER_URL.
/v1/videos/{id}/transcript videos:read The WhisperX transcript: status, detected language, presigned VTT + SRT URLs, and word/segment timings. 404 until the transcript stage completes.
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../transcript \
-H "Authorization: Bearer $OLLANODE_API_KEY" { "status":"ready", "language":"en",
"vtt_url":"https://...presigned.vtt", "srt_url":"https://...presigned.srt",
"segments":[{"start":0.0,"end":3.2,"text":"Welcome to the all-hands"}] } - Burn-in or side-car captions.
- Index spoken content for search; feed the AI-metadata step.
Subtitles
/v1/videos/{id}/subtitles videos:write Upload a WebVTT track for a language (content must start with WEBVTT; re-uploading a language replaces it).
/v1/videos/{id}/subtitles videos:read List the video’s subtitle tracks.
/v1/videos/{id}/subtitles/{lang} videos:write Remove a language track.
curl -X POST https://api.ollanode.com/v1/videos/vid_7Qk3.../subtitles \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"language":"en","label":"English","content":"WEBVTT\n\n00:00:00.000 --> 00:00:03.000\nHello"}' Chapters
/v1/videos/{id}/chapters videos:write Replace the chapter markers. Served to players as WebVTT and shown in the embed player.
curl -X PUT https://api.ollanode.com/v1/videos/vid_7Qk3.../chapters \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"chapters":[{"start_seconds":0,"title":"Intro"},{"start_seconds":95.5,"title":"Roadmap"}]}' AI metadata
⚙️ Config-gated: returns 503 unless VB_AI__API_KEY is set, and requires an existing transcript.
/v1/videos/{id}/ai-metadata videos:write Send the transcript to an external OpenAI-compatible LLM and get back a suggested title, description, tags, and chapters. apply:true writes them onto the video. Requires an existing transcript.
curl -X POST https://api.ollanode.com/v1/videos/vid_7Qk3.../ai-metadata \
-H "Authorization: Bearer $OLLANODE_API_KEY" \
-H "Content-Type: application/json" -d '{"apply":true}' { "title":"Q3 All-Hands: Roadmap & Wins",
"description":"Leadership reviews Q3 results and the Q4 roadmap.",
"tags":["all-hands","roadmap","q3"],
"chapters":[{"start_seconds":0,"title":"Intro"}], "applied":true } - Auto-title and tag an uploaded library.
- Generate chapter markers without manual scrubbing.