RemotionUI
Guides

Captions

Build captioned Remotion videos with CaptionScene, karaoke modes, and social clip templates.

RemotionUI caption components work with Remotion's native Caption type, for TikTok-style word highlights, karaoke scale, or full caption scenes in vertical social clips.

Install

Install
$ npx remotion-ui@latest add caption-scene caption-highlight

This installs @remotion/captions and caption-utils.

For a complete 9:16 template:

Pipeline

  1. Transcribe audio to captions JSON (Whisper, SRT import, or @remotion/openai-whisper)
  2. Load captions in your composition (fetch with useDelayRender if remote)
  3. Group into pages with groupCaptionsIntoPages() from caption-utils
  4. Render with CaptionScene or wire into SocialClip / PodcastClip

Caption components

ComponentUse when
CaptionSceneFull-frame synced caption layout
CaptionHighlightWord-level color emphasis
KaraokeCaptionsScale or underline active word
CaptionBumperShort insight text between scenes

CaptionScene supports mode: highlight, karaoke-scale, or karaoke-underline. Flagship compositions default to karaoke-scale for social-ready motion.

Using captions over real footage

These are overlays meant to sit directly on top of your video — there is no card or background behind the text by default. Two things matter for that to stay legible:

  • Contrast, not decoration. CaptionScene defaults to style="shadow": a drop shadow on the text plus a light bottom scrim on lower-third placement, tuned to hold up on live-action footage without putting a visible box in the frame. If your footage is unusually busy or low-contrast (screen recordings with white backgrounds, bright skies), switch to style="boxed", which adds a solid line-hugging background — the same convention YouTube and Instagram use for auto-captions.
  • Safe area, not raw offsets. Placement always resolves through the shared safe-area insets (getSafeAreaPadding), so captions never sit under a platform's UI chrome (TikTok's reply bar, Reels' caption zone) at the edges of the frame. Don't override top/left positioning manually — pass placement="lower-third" or placement="center" instead.

The individual primitives (CaptionHighlight, KaraokeCaptions, WordPopCaptions) carry the same shadow legibility default when used on their own outside of CaptionScene.

Example

Example
import { CaptionScene } from "@/remotion/scenes/caption-scene"; import type { Caption } from "@remotion/captions"; <CaptionScene captions={captions} mode="karaoke-scale" style="shadow" />;

See caption-scene for the full API and social-clip for a full template composition.

On this page