Docs / Video

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.

Server-config, not API fields (⚙️ off by default): the codec (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

GET /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
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../assets \
  -H "Authorization: Bearer $OLLANODE_API_KEY"
Response
[ {"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"} ]
Use cases
  • Confirm which ladder rungs were produced.
  • Find the progressive MP4 / MP3 for a downstream tool.

Sub-clips

POST /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
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"}'
Response
{ "id":"vid_NEWchild...", "status":"created", ... }
Use cases
  • Highlight reels and teasers cut from a master.
  • Chop a long recording into shareable segments.

Thumbnails, poster & storyboard

GET /v1/videos/{id}/thumbnails videos:read

All generated stills — poster, sampled frames, and the storyboard sprite_sheet — as short-lived presigned URLs.

GET /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.

GET /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
curl https://api.ollanode.com/v1/videos/vid_7Qk3.../transcript \
  -H "Authorization: Bearer $OLLANODE_API_KEY"
Response
{ "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"}] }
Use cases
  • Burn-in or side-car captions.
  • Index spoken content for search; feed the AI-metadata step.

Subtitles

POST /v1/videos/{id}/subtitles videos:write

Upload a WebVTT track for a language (content must start with WEBVTT; re-uploading a language replaces it).

GET /v1/videos/{id}/subtitles videos:read

List the video’s subtitle tracks.

DELETE /v1/videos/{id}/subtitles/{lang} videos:write

Remove a language track.

curl — upload a 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

PUT /v1/videos/{id}/chapters videos:write

Replace the chapter markers. Served to players as WebVTT and shown in the embed player.

curl
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.

POST /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
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}'
Response
{ "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 }
Use cases
  • Auto-title and tag an uploaded library.
  • Generate chapter markers without manual scrubbing.