Remotion Captioneer

14 caption styles · 5 STT providers · 24 presets · 7 exports · audio sync · templates · layouts · emoji · CLI

Live Caption Demo

Auto-cycles through all 14 styles — click a style below to lock it

0:00 / 0:00 Word Highlight

🎬 14 Caption Styles

Each style animates differently — click to preview in the player above

🎤 5 STT Providers

Choose your speed, accuracy, and privacy trade-off

🔒

Whisper.cpp (Local)

Free, offline, privacy-first. Runs on your machine.

🎯

OpenAI Whisper

Industry standard accuracy. Best for production.

Groq

Fastest inference — near real-time. Recommended.

🏢

Deepgram

Enterprise grade with word-level timestamps.

🎙️

AssemblyAI

Speaker diarization and sentiment built-in.

import { transcribe } from 'remotion-captioneer'; // Pick any provider const captions = await transcribe('audio.mp3', { provider: 'groq', // or 'openai' | 'deepgram' | 'assemblyai' | 'local' language: 'en', wordLevel: true });

🎨 24 Presets in 10 Categories

One config object — ready to render

import { presets } from 'remotion-captioneer'; const { style, font, colors, position } = presets['tiktok-pop']; // → { style: 'word-highlight', font: 'Inter', colors: { ... }, position: 'bottom' }

📦 7 Export Formats

From word-level timing to industry standard subtitle formats

SRT

Universal subtitle format

VTT

Web video text tracks

ASS

Advanced Substation Alpha

TXT

Plain text transcript

Word SRT

Word-level SRT timing

Word VTT

Word-level WebVTT

@remotion/captions

Official package compat

import { exportCaptions } from 'remotion-captioneer'; await exportCaptions(captions, { format: 'srt', outputPath: './out.srt' });

🎵 Audio-Video Sync

Frame-accurate hooks for reactive caption animation

import { useBeatPulse, useVolume, useEnergy } from 'remotion-captioneer'; const beat = useBeatPulse(); // 0→1 pulse on every beat const vol = useVolume(); // real-time volume 0→1 const energy = useEnergy(); // frequency band analysis const val = useTimelineValue([ // interpolate any value [0, 0], [0.5, 1], [1, 0] ]);

📐 Template System

Data-driven video generation — define scenes, render automatically

import { buildTemplate, TemplateComposition } from 'remotion-captioneer'; const video = buildTemplate({ scenes: [ { type: 'intro', title: 'My Video', duration: 120 }, { type: 'caption', text: 'Hello World', style: 'karaoke' }, { type: 'caption', text: 'Animated!', style: 'bounce' }, { type: 'outro', text: 'Subscribe!', duration: 90 } ] }); // Use in Remotion composition <TemplateComposition template={video} />

📏 10 Layout Primitives

Position captions and elements perfectly

Container

Full-frame with safe area

Stack / Row

Vertical & horizontal flex

Grid / Columns

Responsive grid layouts

Center

Center anything easily

Positioned

Absolute positioning

Overlay

Layered overlays

GradientBg

Gradient backgrounds

FadeIn

Fade entrance animation

SlideUp

Slide entrance animation

Spacer

Flexible spacing

😀 Auto Emoji Reactions

60+ keyword→emoji mappings — zero config needed

import { autoGenerateReactions } from 'remotion-captioneer'; const captions = [{ text: "This is amazing!", start: 0, end: 2 }]; const reactions = autoGenerateReactions(captions); // → [{ emoji: "😍", frame: 0 }, { emoji: "🔥", frame: 15 }]

🖥 10 CLI Commands

Everything from scaffolding to batch processing

CommandWhat it does
npx captioneer init my-videoScaffold a new project
npx captioneer process audio.mp3Transcribe with STT
npx captioneer batch ./audio-dirBatch process files
npx captioneer export caps.json -f srtExport captions
npx captioneer previewLive preview server
npx captioneer presetsList all presets
npx captioneer providersList STT providers
npx captioneer stylesList caption styles
npx captioneer demoGenerate demo video
npx captioneer infoSystem & config info

Get Started

npx captioneer init my-video

Click to copy