Skip to main content
The captions.animate job returns a video with word-level animated captions burned in. Speech is automatically transcribed, segmented into timed cues, and rendered as styled subtitles burned onto the source.
Accepts: video · Type: captions.animate

Request

Parameters

enum
default:"hormozi"
Built-in caption style. One of: hormozi, mrbeast, tiktok, pill, karaoke, word-pop, minimal, subtitle-block, neon, gold, reveal.
string
ISO-639-1 language hint (e.g. en, es). Absent = English. Non-English forces the large-v3-turbo model regardless of mode.
enum
default:"balanced"
Speed-vs-accuracy tradeoff for transcription.
  • fast: base.en, English only, ~3× faster, ~7-9% WER
  • balanced: small.en, default, ~5-7% WER
  • accurate: large-v3-turbo, ~3× slower, ~3-4% WER
object
Style overrides layered on top of preset. Any field set here wins. Unset fields fall through to the preset. Key fields:
  • font: font family name. A bundled family or the family name of a custom font you pass via the font input.
  • layout: phrase (up to two balanced lines) or word (one word at a time).
  • position: top, center, or bottom.
  • entrance: fade, pop, or bounce. Each word reveals at its spoken moment.
  • highlight: active-word treatment. { "mode": "color" | "box", "color": "#RRGGBB", "textColor": "#RRGGBB", "scale": 100-200 }.
  • fill, stroke, shadow, bold, case, marginV: colour, outline, and weight controls.
boolean
default:"false"
Let an in-stack model mark the important words so they render in the accent colour (the “gold words” look).
enum
Translate captions before animating. One of es, fr, de, pt, it, nl. Omit to keep the original language.
boolean
default:"false"
Also return the word-level transcript plus SRT and VTT on output.data.

Inputs

string
required
URL of the source video. An uploaded asset’s content URL works too.
string
URL of an SRT or VTT file. When provided, its text is animated and transcription is skipped.
string
URL of a TTF or OTF font file. Set style.font to that font’s family name to render captions in it. See Fonts.

Fonts

Eleven presets ship with sensible default fonts. To pick a different one, set style.font to a bundled family. No upload needed. To use your own font, pass two values together:
  1. The font file URL as the font input.
  2. The font’s real family name as style.font.
style.font must match the family name baked into the file, not the filename or URL. If it does not match, the renderer falls back to the preset font. Like every job, this returns the standard response. See Job output for the shape and how to read the result. To burn existing subtitles instead, see caption.burn.