ARKit 52 Talking Head: Juno, Lip-Synced from Voice by Ali SabirARKit 52 Talking Head: Juno, Lip-Synced from Voice by Ali Sabir

ARKit 52 Talking Head: Juno, Lip-Synced from Voice

Portfolio project
Ali Sabir

The brief

A talking guide in a learning app moves its face from the voice. That only works when the head carries the full ARKit 52 set under the exact names, so any voice-to-face system can drive it without remapping.

What I built

Juno, an original stylized character, with all 52 ARKit blendshapes built as named morph targets: eyes, jaw, mouth, brows, cheeks, nose and tongue. The film is a real render of the rig speaking a line.
The voice line produces 22 timed visemes. Each one maps to a mix of ARKit keys, and neighbouring visemes blend over about 90 ms, so the mouth moves through sounds instead of snapping. A loudness envelope from the audio scales jawOpen, so stressed syllables open wider. On top sits an expression layer keyed to words: questions lift the brows, "Take your time" looks up and away, "exactly right" squints into a full smile. Blinks, small eye saccades and a nod on each word keep the face alive between sounds.

What a client gets

A GLB with all 52 shape keys, checked by name, that drops into any ARKit-driven web or app pipeline. A browser runtime that plays a voice line and drives the face from it. A pose sheet with every key at full weight, so animators and QA can check each one in isolation.

Stack

three.js, WebGL, GLB export, ARKit blendshapes, speech visemes, ffmpeg.

0 likes · 1 view · Nov 9, 2026

Original stylized character with all 52 ARKit blendshapes, lip-synced from a voice track in three.js and exported as GLB.

Tags