Skip to main content
Not available on the current speech model. Versa 2.0, which serves all synthesis today, produces no viseme data: it generates audio from a latent representation and exposes nothing phoneme-aligned to derive mouth shapes from. Setting visemes: true is accepted and simply yields no viseme events, so lip-sync animation driven by this API will not move.The API is documented and kept in place because it is unchanged and will start returning data again if a future model can supply it. If you are building an avatar today, drive it from audio amplitude instead.
The rest of this page describes the format the API used for viseme data, for when a model supplies it again. None of it produces anything on versa-2.0.

Enable visemes

Voice Agent:
TTS:

Viseme format

Character-to-mouth mapping

Basic implementation

Smooth transitions

Handling interruptions

Timing

Use audioContext.currentTime, not Date.now(). Viseme timestamps are offsets in seconds from the start of the audio.

Driving an avatar today

Until viseme data returns, animate the mouth from the agent’s audio: compute the loudness of each audio chunk and open the mouth in proportion, timed against when the chunk plays.