This lip sync chart shows the 15 mouth shapes most animation tools and game engines use. Each one is rendered on Riya, our 3D character, so you can see the real lips, teeth and jaw rather than a cartoon sketch. You're welcome to use it as a reference.
What is a viseme?
A viseme is the mouth shape you see when someone makes a sound. A phoneme is the sound itself. English has around 40 phonemes but far fewer visemes, because many sounds look the same from the outside: P, B and M sound different, yet the lips simply close for all three.
That's why a mouth chart has fewer shapes than the language has sounds, and why an animator can draw convincing speech from a short list of poses.
The 15-shape viseme chart
This set comes from Meta's Oculus Lipsync, and VRChat avatars use the same 15. The last column gives the Oculus name, which is what you'll see in those tools.
| Shape | Sounds | Example words | What the mouth does | Oculus name |
|---|---|---|---|---|
| Rest | silence | (pauses) | Lips together, relaxed | sil |
| M B P | m, b, p | map, bat, pie | Lips fully closed | PP |
| F V | f, v | fan, van | Lower lip tucks under the top teeth | FF |
| TH | th | think, that | Tongue tip shows at the teeth | TH |
| T D | t, d | top, dog | Teeth nearly together, tongue hidden | DD |
| K G | k, g | cat, go | Jaw slightly open, back of the tongue raised | kk |
| CH J SH ZH | ch, j, sh, zh | chair, joy, she | Lips pushed forward, teeth visible | CH |
| S Z | s, z | see, zoo | Teeth together, lips spread | SS |
| N L | n, l | no, lot | Jaw slightly open, tongue behind the top teeth | nn |
| R | r | red, run | Lips slightly rounded | RR |
| AA | ah, a, u | car, cat, cup | Jaw open: the widest shape | aa |
| EH | e, ay | bed, say | Mid open, lips a little wide | E |
| EE IH | ee, i | see, sit | Narrow, lips spread | ih |
| OH | oh, aw | toe, law | Rounded and open | oh |
| OO W | oo, w | you, book, we | Tight round lips | ou |
The shorter chart for 2D animation
Traditional 2D lip sync uses fewer drawings. The classic chart, usually credited to the animator Preston Blair and still built into tools such as Moho, has about 10 shapes. Here's how it lines up with the 15 above:
| Classic mouth | Covers | In the 15-shape chart |
|---|---|---|
| A / I | ah, eye | AA |
| E | eh, ee | EH, EE IH |
| O | oh | OH |
| U | oo | OO W |
| W / Q | w, qu | OO W |
| L | l, th | N L, TH |
| M / B / P | m, b, p | M B P |
| F / V | f, v | F V |
| "Etc" | c, d, g, k, n, r, s, y, z | T D, K G, S Z, N L, R, CH |
| Rest | silence | Rest |
Fewer still can work. Rhubarb Lip Sync uses 6 basic shapes plus 3 optional ones. For a simple cartoon, keep these five or six before anything else: closed (M/B/P), open (AA), wide (EE), round (OO), F/V and rest. At the other end, Azure's speech service reports 22 viseme IDs, which is more detail than most characters can show.
The chart as ARKit blend shape values
For a 3D character with ARKit blend shapes, these are the poses in the image above. We set them by hand on Riya, so treat them as starting points: every rig's shapes have a different strength. Values run from 0 to 1, and a name like mouthStretch means both its Left and Right shapes.
| Shape | ARKit values |
|---|---|
| Rest | all 0 |
| M B P | mouthPress 0.12 |
| F V | mouthRollLower 0.85, mouthUpperUp 0.4, jawOpen 0.06 |
| TH | tongueOut 0.42, mouthLowerDown 0.2, mouthUpperUp 0.1, jawOpen 0.08 |
| T D | mouthLowerDown 0.25, mouthStretch 0.2, mouthUpperUp 0.1, jawOpen 0.1 |
| K G | jawOpen 0.2, mouthStretch 0.15, mouthLowerDown 0.1 |
| CH J SH ZH | mouthFunnel 0.6, mouthPucker 0.25, mouthUpperUp 0.25, mouthLowerDown 0.25, jawOpen 0.06 |
| S Z | mouthStretch 0.35, mouthLowerDown 0.3, mouthUpperUp 0.2, mouthSmile 0.15, jawOpen 0.02 |
| N L | jawOpen 0.13, mouthLowerDown 0.15, mouthStretch 0.15 |
| R | mouthFunnel 0.35, mouthPucker 0.35, mouthUpperUp 0.1, jawOpen 0.06 |
| AA | jawOpen 0.5, mouthLowerDown 0.15, mouthStretch 0.15 |
| EH | mouthStretch 0.35, jawOpen 0.25, mouthLowerDown 0.2, mouthSmile 0.15, mouthUpperUp 0.1 |
| EE IH | mouthStretch 0.4, mouthSmile 0.35, mouthLowerDown 0.2, mouthUpperUp 0.15, jawOpen 0.08 |
| OH | mouthPucker 0.45, mouthFunnel 0.42, jawOpen 0.15 |
| OO W | mouthPucker 0.95, mouthFunnel 0.4, jawOpen 0.06 |
One ARKit detail catches people out: jawOpen also opens the lips. If the jaw is still open during M, B or P, raise mouthClose to about the same value, or the lips won't meet. Test this on your own rig too: on Riya, mouthPress above about 0.3 actually parts the lips and mouthClose barely moves them, so her closures use a jaw near 0 with a little mouthRoll. To play a whole sentence rather than single poses, see lip sync in three.js.
What real speech looks like: our measurements
A chart shows each shape at its clearest. Real speech rarely gets there. We ran our custom lip sync model over 340 test sentences it hadn't seen, about 8,500 sounds in a natural-paced AI voice, and averaged the result at the middle of each sound. The model is tuned to Riya's face, so read these as a guide rather than universal constants.
| Shape | Median length | Average jawOpen |
Strongest average curve |
|---|---|---|---|
| AA | 87 ms | 0.19 | mouthStretch 0.26 |
| EH | 100 ms | 0.17 | mouthStretch 0.25 |
| OH | 100 ms | 0.09 | mouthPucker 0.28 |
| EE IH | 67 ms | 0.07 | mouthShrugUpper 0.21 |
| OO W | 41 ms | 0.02 | mouthPucker 0.60 |
| F V | 43 ms | 0.03 | mouthRollLower 0.78 |
| CH J SH ZH | 53 ms | 0.02 | mouthFunnel 0.59 |
| M B P | 50 ms | 0.01 | mouthRollLower 0.23 |
| S Z | 50 ms | 0.01 | mouthShrugUpper 0.28 |
| T D | 33 ms | 0.05 | mouthShrugUpper 0.25 |
| TH | 28 ms | 0.04 | mouthShrugUpper 0.24 |
Three things stand out:
- Sounds are very short. One frame at 30 fps lasts 33 ms, so most consonants here get only one or two frames, and vowels two or three. There's no time to hold a pose.
- The jaw opens far less than charts suggest. The average
jawOpenon an "ah" was 0.19, and 0.35 on the longest ones. A character whose jaw swings to 0.5 on every vowel looks like it's chewing. - Only a few shapes have a strong signature. F/V, OO and CH stand out clearly. T, D, S, N and similar sounds look much alike, and their shape mostly comes from the vowels around them. Animators call this coarticulation: the "s" in "see" and in "soon" look different because the lips are already moving towards the next vowel.
Five lip sync mistakes to avoid
- Flapping on every syllable. Open and close the mouth less often than you think, and let neighbouring shapes blend.
- Lips that don't meet on M, B and P. Viewers notice this first. Even a one-frame closure reads as correct.
- A weak F and V. The lower lip touching the top teeth is one of the few consonants people can actually lip-read.
- Late mouth shapes. Lips move before the sound. Start shapes a frame or two early; in our system, lips start rounding about 100 ms before a rounded sound.
- Copying the chart at full strength. Use the chart for the shape's direction, then scale it to how long the sound lasts.
How many mouth shapes do you need?
It depends on the style:
- 5 to 6: simple cartoons, motion graphics and small on-screen characters.
- About 10: traditional 2D animation.
- 15: games, VRChat avatars and most viseme-based 3D characters.
- Blend shape curves: realistic 3D faces. Instead of switching between fixed poses, 29 ARKit curves change every frame, so the shapes flow into each other.
If you're keyframing by hand, this chart is all you need. If your character has to say things nobody has animated, such as an AI assistant's live answers, you need the curves generated automatically. Our lip sync API produces them from text or audio, and you can compare the kinds of AI lip sync first.