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.animateRequest
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% WERbalanced:small.en, default, ~5-7% WERaccurate: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 thefontinput.layout:phrase(up to two balanced lines) orword(one word at a time).position:top,center, orbottom.entrance:fade,pop, orbounce. 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.What inputs does it take?
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 your own font file (TTF, OTF, TTC, WOFF, WOFF2). Captions render in it, and it takes priority over
style.font, so you do not need to know the family name inside your own file. See Fonts.Which fonts can I use?
Eleven presets ship with sensible default fonts. To pick a different one, setstyle.font to a bundled family. No upload needed.
Any Google Fonts family also works by name and is fetched at render time, and style.font accepts a CSS fallback stack like "Lato, Inter, sans-serif" that falls through in order.
To use your own font, pass its URL as the
font input. It wins over
style.font, so nothing else is required:
style.font still works, so an
existing integration that does both keeps rendering the same way.
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.
See also
- Burn subtitles: static SRT or VTT burned into the frame
- Compose: build the video these captions sit on
- Compress: shrink the captioned output before you deliver it
- ffprobe: check the audio stream before transcribing it
- Plan limits: duration and file-size caps per plan