All projects
BabylonJS

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.

Built by

Viseni Design Studio

3D, WebGL, interactive & VR/AR experiences

Visit viseni.com