Avatar Lip Sync with Remotion
Partly verified 2026-10-02
Verified: MuseTalk v1.5 (2025-03-28, MIT code and usable weights, 30fps+ on V100; inference tested on a 4GB RTX 3050 Ti in fp16, slow), Rhubarb mouth shapes (6 basic A-F + 3 extended G, H, X), TalkingHead.js (MIT; built-in English, German, French, Brazilian Portuguese, Finnish, Lithuanian; extendable via Azure TTS),
@sage-rsc/talking-head-avatar1.0.3 (MIT, last published 2025-10-25),@remotion/threeexists (also<ThreeWebGPUCanvas/>). HeyGen now lists Avatar V, IV and III, Photo Avatar, Video Agent, and 175+ language translation. Not verified: HeyGen per-minute prices and limits (pricing page requires the app; docs moved to developers.heygen.com), SadTalker/Wav2Lip/LivePortrait/VideoReTalking/V-Express speed and VRAM figures.
Ready Player Me is gone: it was acquired by Netflix (Dec 2025) and shut its public services on 2026-01-31 (Wikipedia). Use custom or Mixamo-rigged GLB avatars (for example Avaturn, which TalkingHead lists as compatible) instead.
Remotion does not have built-in lip sync or avatar features. It’s a React video framework for programmatic composition. You combine it with external tools for the actual lip sync generation.
Decision Matrix
| Goal | Approach | Cost | Effort |
|---|---|---|---|
| Fastest to production (opinion) | HeyGen API → Remotion | Paid (billing not verified) | Low |
| Free open-source option | MuseTalk v1.5 (Python) → Remotion | Free (GPU needed) | Medium |
| Full creative control | Rhubarb + custom GLB avatar + @remotion/three | Free | High |
| Existing footage dubbing | Wav2Lip or VideoReTalking → Remotion | Open-source; licence terms not verified (GPU needed) | Medium |
| Interactive web app (not video export) | @sage-rsc/talking-head-avatar | Free | Medium |
Approach 1: HeyGen API (Turnkey)
Call HeyGen’s API with a script + avatar, get back an MP4 with lip sync baked in, composite in Remotion.
Endpoint: POST /v2/video/generate with avatar_id, voice_id, script text.
Capabilities (March 2026 snapshot, not verified; check developers.heygen.com):
- Stock avatars, custom photo avatars and Digital Twins (counts and tiers not verified)
- Transparent WebM output for compositing (not verified)
- Lip sync quality per language: not verified
Tiers (not verified; check HeyGen’s API pricing in the app): Avatar III, Avatar IV, Video Agent (prompt-based) and a TTS-only option are listed on developers.heygen.com; billing details are not verified.
Limits: not verified (an earlier draft listed 30 min, 50 scenes, 5000 characters and 1080p; removed as unconfirmed).
Remotion integration: generate the video via the API, then import it as a <Video> component. (An earlier draft cited a HeyGen skills install command for Claude Code; it is unverified and removed.)
Alternatives (unverified 2026 status): Hedra, D-ID, Synthesia.
Approach 2: DIY with Rhubarb + Remotion (Full Control)
Pipeline: Audio → Visemes → Avatar animation → Remotion render.
Step 1 — Extract Visemes
rhubarb -o output.json -f json input.wav Outputs JSON mouthCues with timestamp + mouth shape (A-F basic, G-H-X extended = 9 shapes). A community WASM port (rhubarb-lip-sync-wasm) was listed earlier; not confirmed on the Rhubarb repo (unverified).
Alternative: WhisperX for word-level timestamps → phoneme-to-viseme mapping via g2p libraries.
Step 2 — Choose Avatar Type
| Type | Format | Pros | Cons |
|---|---|---|---|
| 2D Sprite sheet | 9 mouth PNGs | Simple, fast | Static, less natural |
| 3D avatar (Ready Player Me shut down 2026-01-31; use Avaturn or similar) | GLB with Oculus OVR visemes (15 shapes) | Smooth, natural | More setup |
| 3D Custom | Mixamo-rigged GLB with ARKit/Oculus blend shapes | Full control | Rigging skills needed |
Oculus OVR Viseme Standard (15 shapes): aa, E, I, O, U, PP, SS, TH, CH, FF, kk, nn, RR, DD, sil.
Step 3 — Animate in Remotion
const { fps } = useVideoConfig();
const frame = useCurrentFrame();
const timeMs = (frame / fps) * 1000;
const cue = mouthCues.find(c => timeMs >= c.start && timeMs < c.end);
// 2D: swap sprite
return <Img src={`/mouth-${cue.value}.png`} />;
// 3D: use @remotion/three with <ThreeCanvas>
// mesh.morphTargetInfluences[visemeIndex] = 1.0; For 3D: @remotion/three wraps React Three Fiber and syncs with useCurrentFrame().
Approach 3: AI Talking Head Models (Image-to-Video)
Feed a single photo + audio → get realistic talking video → composite in Remotion.
| Model | Quality | Speed | GPU VRAM | License | Best For |
|---|---|---|---|---|---|
| MuseTalk v1.5 | not verified | 30+ FPS on V100 (per repo) | runs on 4 GB fp16, slowly (tested per repo) | MIT | Open-source option |
| SadTalker | not verified | not verified | not verified | not verified | Stylized talking heads (opinion) |
| Wav2Lip | not verified | not verified | not verified | not verified | Dubbing existing footage (opinion) |
| LivePortrait | not verified | not verified | not verified | not verified | Portrait animation (opinion) |
| VideoReTalking | not verified | not verified | not verified | not verified | Editing existing videos (opinion) |
| V-Express | not verified | not verified | not verified | not verified | Self-hosted option (opinion) |
Pick (author’s opinion): MuseTalk v1.5, because it is MIT licensed, reports 30+ FPS on a V100 and runs on a 4 GB GPU in fp16 (per its repo).
Remotion integration:
<Video src={staticFile("avatar-output.mp4")} /> Generate with Python, import the result.
Approach 4: React Component Packages
@sage-rsc/talking-head-avatar (npm)
- Viseme-based lip sync via audio worklet processing
- Supports ARKit + Oculus OVR blend shapes
- TTS: Azure, Google, ElevenLabs, Edge TTS, browser native
- GLTF/GLB with Mixamo-compatible rigs
- TypeScript, v1.0.3 (last published 2025-10-25 per the npm registry)
Remotion compatibility (author’s assessment, not tested): likely limited, since it uses real-time audio worklets that may not serialize for frame-by-frame rendering. Possible workaround: pre-render as video, import into Remotion.
TalkingHead.js
- Open-source JavaScript class for real-time 3D avatar lip sync
- Needs 15 Oculus viseme blend shapes (plus ARKit); Avaturn avatars compatible
- 6 languages built in, extensible via Azure TTS
- Streaming API (low-latency claim not verified)
- Better suited for interactive web apps than Remotion video export (opinion)
Key Packages & Tools
| Package | Purpose |
|---|---|
@remotion/three | Three.js integration for Remotion (3D avatars) |
@remotion/captions | Caption utilities (not verified in this note) |
rhubarb-lip-sync | CLI for audio → viseme extraction |
rhubarb-lip-sync-wasm | Browser WASM port of Rhubarb (community, unverified) |
whisperx | Word-level timestamps from audio |
@sage-rsc/talking-head-avatar | React 3D avatar with TTS + lip sync |
Open items
- HeyGen per-minute billing, limits and Remotion skills install command: unverified (pricing behind app login).
- Speed/VRAM/licence columns for SadTalker, Wav2Lip, LivePortrait, VideoReTalking, V-Express: not re-checked (web search budget exhausted this session; only repo fetches possible).
- Missing from the table: newer 2026 talking-head or avatar models were not surveyed.
Sources
-
https://github.com/TMElyralab/MuseTalk (MIT code, v1.5 2025-03-28, 4 GB fp16 minimum: re-fetched 2026-10-05), https://github.com/DanielSWolf/rhubarb-lip-sync, https://github.com/met4citizen/TalkingHead (fetched 2026-10-02)
-
https://registry.npmjs.org/@sage-rsc/talking-head-avatar (2026-10-02)
-
https://www.remotion.dev/docs/three (2026-10-02)
-
https://developers.heygen.com/ (2026-10-02)
-
https://en.wikipedia.org/wiki/Ready_Player_Me (2026-10-02)
-
https://github.com/TMElyralab/MuseTalk (re-checked 2026-09-30)