ReadyPlayerMe Talking Character — BabylonJS
Driving lip sync and talking animations on a ReadyPlayerMe avatar in BabylonJS. Procedural jaw animation driven by audio amplitude + idle expression blending.
A ReadyPlayerMe avatar that talks in sync with audio. Two inputs drive the mouth: a looped talking animation from the RPM animation library, and Web Audio AnalyserNode RMS amplitude mapped to the jawOpen ARKit morph target in real-time.
How it works
Load the RPM avatar with ?morphTargets=ARKit&lod=1 — this adds 52 ARKit blend shapes including jawOpen, lip shapes, and eye blinks. RMS amplitude (0–1) from the audio stream drives jawOpen influence each frame, smoothed with a lerp to prevent jitter.
Idle expressions layer on top: blinks every 3–5 seconds using eyeBlinkLeft/eyeBlinkRight morph targets animated via RAF callbacks.
Animations source
Animations converted from FBX to GLB via the FBX2GLB batch tool.
For production
Replace RMS amplitude with phoneme/viseme timestamps from a TTS service for accurate lip shapes per sound. RMS is the simplest path to a speaking avatar without full phoneme recognition.
32 stars — mostly people building AI chatbot avatars.