MIT · Remotion 4.x · TypeScript

Remotion Captioneer Captions that keep people watching.

Word-level synced, animated captions for Remotion. Feed it audio — get 14 studio-grade styles, auto-emphasis on the words that matter, and MP4s rendered straight from the CLI.

npx captioneer init my-video

Click to copy · works with existing Remotion projects too

14caption styles
23presets
6STT providers
7export formats
Live demo

Every style, in motion

Auto-cycles through all 14 styles — click a style below to lock it, then tune colors, font, and position in the configurator.

0:00 / 0:00 Word Highlight
Smart captions: toggles apply to every style — same props as the library
Features

A caption engine, not just a component

Everything between raw audio and a finished, watchable clip.

Smart emphasis

Stretched, shouted, and loud words get flagged from timing and audio energy alone — then pop with scale, color, or glow in 12 of 14 styles.

Zero-React rendering

captioneer render turns captions plus audio — or existing footage with --video — into a captioned MP4. No React project required.

Beat-snapped timing

Word pops land on the music. Beat detection nudges word starts to the nearest beat with strict monotonic ordering.

Speaker-aware

Diarized captions recolor per speaker automatically, with label chips and a stable palette across the whole clip.

Custom animations

Style packages ship their own keyframe word motion as pure data — bounded numbers and hex colors, no code execution.

Style marketplace

Install third-party style packages from a file or URL, or scaffold your own in one command — validated against a strict schema.

Translation + RTL

Translate caption data with word timing preserved, keep brand terms verbatim with a glossary, and render RTL scripts with one prop.

Broadcast QA

Characters-per-second pacing gates for readability, conservative profanity filtering, and filler-word removal that closes timing gaps.

Pipeline

From audio to captioned MP4

One command with autopilot — or the same primitives step by step, in your own Remotion compositions.

terminal
# One command: transcribe → tighten → emphasize → render npx captioneer autopilot clip.mp3 \ --preset tiktok --out clip-captioned.mp4 # Video input? Captions burn over its own footage npx captioneer autopilot footage.mp4 --style glow
CaptionedClip.tsx
// Or in your own Remotion composition import { AnimatedCaptions, applyPreset, markEmphasis } from 'remotion-captioneer'; const emphasized = markEmphasis(captions); <AnimatedCaptions captions={emphasized} {...applyPreset('tiktok')} emphasisStyle="scale" />

SRT · VTT · ASS · TXT

Plus word-level SRT and WebVTT, and full @remotion/captions compatibility.

Translation + glossary

Translate with preserved word timing and a glossary that keeps brand terms verbatim; RTL scripts render with one prop.

Audio sync hooks

useBeatPulse, useVolume, useEnergy — frame-accurate reactive animation.

Styles

Fourteen ways to say it

Each style animates differently — click a card to preview it in the player above.

Presets

Tuned for where your video lives

Click a preset to apply it in the demo player.

App.tsx
import { applyPreset } from 'remotion-captioneer'; <AnimatedCaptions captions={captions} {...applyPreset('tiktok')} />
Speech-to-text

Six providers, one interface

Choose your speed, accuracy, and privacy trade-off — swap with a flag.

Local

Whisper.cpp

Offline transcription on your machine.

Cloud

OpenAI Whisper

Production-grade accuracy.

Fast

Groq

Low-latency cloud inference.

Scale

Deepgram

Word-level timestamps at scale.

Accurate

AssemblyAI

Word-level timestamps and optional speaker diarization.

Scribe

ElevenLabs

Word-level Scribe transcription via API.

transcribe.ts
import { createProvider } from 'remotion-captioneer'; // npx captioneer process audio.mp3 --provider elevenlabs --diarize const provider = createProvider('elevenlabs'); const captions = await provider.transcribe('audio.mp3');
CLI

Everything from scaffolding to MP4

One binary covers the whole pipeline.

CommandWhat it does
npx captioneer init my-videoScaffold a new project
npx captioneer autopilot clip.mp3 --preset tiktokTranscribe → tighten → emphasize → render, one command
npx captioneer process audio.mp3Transcribe with any of the 6 STT providers
npx captioneer batch ./audio/Process a whole directory
npx captioneer tighten captions.jsonRemove filler words and close timing gaps
npx captioneer emphasize captions.jsonAuto-flag the words worth popping
npx captioneer pacing captions.json --strictBroadcast readability gate (CI-ready exit code)
npx captioneer clean captions.jsonMask or remove profanity
npx captioneer translate captions.json -t esTranslate with word timing preserved; --glossary keeps brand terms verbatim
npx captioneer export captions.json --format srtExport SRT · VTT · ASS · TXT · word-level variants
npx captioneer render captions.json --audio clip.mp3Render a captioned MP4 — or --video for footage
npx captioneer styles create "My Style"Scaffold a shareable marketplace style package
npx captioneer styles install <file|url>Install a style package (list/validate subcommands too)
npx captioneer doctorEnvironment health check — STT keys, renderer, runtime
npx captioneer previewLive preview editor with the Remotion Player
npx captioneer demoOpen Remotion Studio (all 14 styles)
Exports

Take your captions anywhere

From word-level timing to industry-standard subtitle formats — try them on the demo captions.

Ship captions people actually read.

Free, MIT-licensed, and fully typed. Star the repo if it saves you an afternoon.