SFM Lip Sync Tutorial: Phoneme Extraction and Mouth Cleanup

Quick Answer

SFM lip sync starts with an automatic first pass. Add a WAV dialog clip, turn on its waveform, then right-click one of the character’s controls and choose Extract Phonemes. SFM reads the audio and writes mouth animation onto the face sliders. The result is rarely final, so clean it up in the Motion Editor and Graph Editor until the mouth reads clearly.

01

Add a WAV dialog clip

Drop the line into the dialog track in the Clip Editor so it lines up with the shot.

02

Show the waveform

Right-click the sound clip and choose Show Waveform. Only clips with a visible waveform are used for extraction.

03

Extract phonemes

Right-click a control on the character in the Animation Set Editor, choose Extract Phonemes, keep the defaults and click Extract.

04

Clean up the mouth

Select the Lower Face and Tongue controls, smooth the jitter, then fix timing and key shapes by hand.

What You Need Before You Extract Phonemes

Most failed lip sync attempts in SFM come down to the model or the audio file, not the extraction step. Check three things before you start.

First, the model. Valve’s documentation states that automatic phoneme extraction only works on the HWM Team Fortress 2 classes and on models that follow the Half-Life 2 FACS facial control layout. For TF2 characters, load the version from the player/hwm/ folder rather than the standard player model, which lacks the full set of facial flexes. If you are bringing in community characters, our guide to importing SFM models from the Steam Workshop explains where those files end up.

Second, the audio. Use a WAV file, not MP3. SFM users have long reported that MP3 clips play back fine but produce no mouth movement. A plain 16-bit, 44.1 kHz WAV is the safe choice, since community reports suggest higher sample rates can fail. Trim silence at the start so the waveform lines up with the shot.

Third, the phoneme presets. Extraction does not move sliders directly. It triggers a set of phoneme presets, one per speech sound, that each describe a mouth shape. HWM models ship with these presets. Many custom models do not, and on those models extraction runs but nothing visible happens.

Model typePhoneme presetsAuto lip sync
TF2 HWM class modelsIncludedWorks out of the box
Standard TF2 player modelsMissing, limited flexesNo usable result
HL2 FACS-compliant modelsCan be generated in the Element ViewerWorks once presets exist
Custom or ported models with flexesMust be built and saved by handWorks only after setup
Models with no face flexesNot possibleNo, animate the jaw bone instead

How Phoneme Extraction Works in SFM

Phonemes are the individual sounds in speech, such as the “m” in “mom” or the “oo” in “food”. SFM’s extractor analyzes the dialog waveform, guesses which phonemes occur and when, then blends the matching phoneme presets on the face over time. The output is written as animation on the facial control sliders, the same sliders you would drag by hand.

Adding the Sound Clip

Open the Clip Editor, which is where sound clips live. Drag the WAV from the Element Viewer or the sound browser onto a dialog track inside your shot. Slide the clip so the first syllable starts where you want the line to begin. If the clip belongs to a different shot, extraction will not line up with the character you are animating.

Show Waveform and Extract Phonemes

Right-click the dialog clip and choose Show Waveform. Valve notes that only clips with Show Waveform enabled are used for automatic lip sync, so hide the waveform on any music or effects clips sharing the timeline. Otherwise SFM may try to read those sounds as speech.

Next, in the Animation Set Editor, expand the character’s animation set. Right-click one of its controls and choose Extract Phonemes. A dialog opens. Valve’s advice is to keep the defaults until you know what you want to change, so click Extract and play the shot. Valve’s lip sync and Extract Phonemes page covers this sequence in full.

SFM lip sync workflow from WAV dialog clip and Show Waveform to Extract Phonemes and face slider animation
SFM lip sync workflow from WAV dialog clip and Show Waveform to Extract Phonemes and face slider animation.

Phoneme Maps and Preset Groups

The link between a sound and a mouth shape is the phoneme preset group. Each preset in that group stores slider values for one phoneme. When you switch from the Procedural tab to the Phoneme tab in the presets panel, you see these presets and can drag them like any other preset.

For HL2 FACS-compliant models without presets, Valve describes a built-in fix. Right-click the animation set, choose Show in Element Viewer, then AnimationSet. Right-click the root node and run Create Phoneme Presets based on HL2 FACS controls. Save your session first: Valve warns that the Element Viewer has very few safeguards and can corrupt a scene.

For other custom models, the community approach is to build the presets yourself. Each preset is named with a p_ prefix and covers one phoneme. The group is then exported and saved alongside the model with the model’s file name, replacing .mdl with _phoneme.pre, so SFM loads it as the phoneme group. If you are porting your own character, plan the face flexes during the Blender to SFM stage, because missing shape keys cannot be faked later.

The Speech API Problem on Windows 10 and 11

Searches for SFM lip sync often turn up advice to install the Microsoft Speech SDK 5.1. That advice comes from Faceposer, the older Source SDK facial tool, not from Source Filmmaker itself.

Faceposer relied on a speech recognition library that breaks on Windows Vista and later after Microsoft changed its Speech API. Faceposer users see errors such as “SAPI 5.1 Unable to create recognizer context”. Valve’s Faceposer lip syncing page carries a direct warning not to install SAPI 5.1 on Vista or later. Its workaround copies the speech data and phoneme extractor folders out of the Source Filmmaker bin folder into the Source SDK Base 2013 bin folder, which tells you SFM ships its own extractor files.

In practice, that means:

  • Do not install the old SAPI 5.1 SDK on Windows 10 or 11 to fix SFM. It is not a documented fix for SFM, and Valve advises against installing it on modern Windows.
  • If extraction runs but the face does not move, the cause is almost always the model, the presets or an MP3 file, not the Speech API.
  • If extraction fails outright, verify SFM’s files through Steam, so the bundled extractor files are restored. Our Source Filmmaker install guide shows how.
  • Long lines are harder for any phoneme extractor. Splitting a long take into shorter clips usually gives cleaner results.
SymptomLikely causeFix
Extraction runs, face stays stillNo phoneme presets on the modelUse an HWM model or create the phoneme preset group
Extraction runs, face stays stillMP3 dialog clipConvert the line to 16-bit WAV and re-import
Wrong sounds get picked upMusic or effects waveforms visibleHide Waveform on every clip except the dialog
Mouth flutters on every frameRaw extraction noiseSmooth preset over a time selection
Mouth lags the voiceShapes land on the exact sound frameShift the face animation one or two frames earlier
SAPI 5.1 error messageFaceposer, not SFMLeave SAPI 5.1 uninstalled and use SFM’s own tool

Cleaning Up the Generated Mouth Animation

Raw extraction tends to hit every phoneme at full strength. The result looks busy: lips chatter, the jaw pumps on every syllable and closed sounds such as “m” and “b” sometimes never fully close. Cleanup is where lip sync starts to look acted rather than generated. If you are new to the two animation editors, read our SFM Motion Editor and Graph Editor guide first.

Smooth Pass in the Motion Editor

In the Animation Set Editor, select the Lower Face and Tongue controls. Switch to the Motion Editor. Right-click inside it and choose Show Waveform so you can see the dialog behind the curves. Make a time selection over the line, add falloffs, then drag the Smooth preset slider a little at a time. Small drags remove flutter without erasing the shapes that matter.

To mute the audio while you work, click the mute button in the upper right of the timeline.

Curve Fixes in the Graph Editor

The Graph Editor shows each face slider as a curve. Pick one slider at a time, starting with the jaw-open control, since it carries most of the readable motion. Look for sharp single-frame spikes and dips. Those read as twitches on screen.

  • Rectangle-select keys on a spike and drag them with the middle mouse button to bring them in line.
  • Use the value fields at the top of the Graph Editor for exact numbers, for example +=0.1 to raise every selected key.
  • Press M to place a keyframe where you want a hold, such as a closed mouth on “m”, “b” or “p”.
  • Shape tangents so the jaw eases open and closed rather than snapping.
SFM Graph Editor jaw flex curve before and after lip sync cleanup with spikes removed
SFM Graph Editor jaw flex curve before and after lip sync cleanup with spikes removed.

Shaping the Mouth With Flex Sliders

Every slider in the Lower Face group is a flex: a blend between the neutral face and a sculpted shape. Slider names differ between models, so read the labels on your character rather than following a fixed list. Most lip sync relies on four kinds of control.

Jaw Open and Close

The jaw slider sets how wide the mouth opens. Real speech opens the jaw for vowels and nearly closes it between words. A good trick is to animate the jaw on its own first, hitting only the open vowels, then layer the lip shapes on top.

Lip Shapes and Closures

Lip sliders handle rounding, stretching and pressing. Rounded lips sell “oo” and “w”. Stretched lips sell “ee”. Pressed lips sell “m”, “b” and “p”, and these closures are what viewers notice most when they are missing. On HWM models, the LipsV slider blends between open and compressed lips, which makes it useful for these closures.

Exaggeration and Restraint

Extraction tends to give every syllable the same weight. Stressed words deserve wider shapes, and unstressed words can almost disappear. In the Motion Editor, use Offset mode over a short time selection to push a shape further on the key word. In the Graph Editor, scale selected keys with Ctrl+right-drag to soften a whole phrase.

Timing Offsets

Mouth shapes that land exactly on the sound often look late. Animators commonly lead the audio by one or two frames so the shape forms just before the sound is heard. In the Motion Editor, select the whole face animation for the line, hold Alt and drag inside the selection to slide it earlier. Check the result at full playback speed, not by scrubbing.

SFM lip sync mouth shapes chart for jaw open, rounded, stretched and closed phonemes
SFM lip sync mouth shapes chart for jaw open, rounded, stretched and closed phonemes.

Full SFM Lip Sync Workflow, Step by Step

This walkthrough uses a TF2 HWM character and a short line of dialog. Start with one character in a lit map and a camera already framed. Our SFM camera tips help you pick a framing that shows the mouth clearly.

01

Prepare the WAV

Export the line as a 16-bit WAV, trim leading silence, and place it in your SFM sound folder.

02

Add it to the shot

In the Clip Editor, drag the clip onto a dialog track and align the first syllable with the frame you want.

03

Isolate the waveform

Right-click the dialog clip and choose Show Waveform. Hide the waveform on music and effects clips.

04

Run Extract Phonemes

Expand the character’s animation set, right-click a control, choose Extract Phonemes, keep the defaults and click Extract.

05

Play it back

Press Ctrl+Spacebar to play only this shot. Note words where the mouth chatters, misses a closure or lags.

06

Smooth the face

Select Lower Face and Tongue, switch to the Motion Editor, make a time selection with falloffs, and drag Smooth in small steps.

07

Fix key shapes

In the Graph Editor, clean jaw spikes, key solid closures on “m”, “b” and “p”, and widen stressed vowels.

08

Offset and review

Slide the face animation one or two frames earlier, play the shot at full speed, then save.

Once the dialog reads well, add eye and brow motion so the face does not look frozen above a moving mouth. Then render a test clip using our best SFM render settings.

SFM lip sync timing offset showing face animation shifted two frames ahead of the dialog waveform
SFM lip sync timing offset showing face animation shifted two frames ahead of the dialog waveform.

Common SFM Lip Sync Errors

  • Using a non-HWM model. Standard TF2 player models lack the facial flexes, so extraction has nothing to drive.
  • Importing MP3 dialog. Convert to WAV before you add the clip.
  • Leaving other waveforms visible. Music and effects can confuse the extractor.
  • Extracting on the wrong shot. The dialog clip and the character must sit in the same shot.
  • Accepting the raw pass. Unsmoothed extraction looks like chattering, even when the timing is right.
  • Over-smoothing. Heavy Smooth passes erase closures, so the mouth never shuts on “m” or “b”.
  • Skipping the jaw. Lips alone look like the character is mumbling through clenched teeth.
  • Installing SAPI 5.1 on Windows 10 or 11. It does not fix SFM and Valve warns against it on modern Windows.

When the shot is finished, our guide to rendering SFM to MP4 covers exporting it with the dialog in sync.

SFM Lip Sync FAQs

How do I make lip sync in Source Filmmaker?

Add a WAV dialog clip in the Clip Editor, right-click it and choose Show Waveform, then right-click one of the character’s controls in the Animation Set Editor and choose Extract Phonemes. Click Extract with the default settings. Clean up the result with the Smooth preset in the Motion Editor and fix individual curves in the Graph Editor.

Why does Extract Phonemes do nothing in SFM?

The model usually has no phoneme presets, or the dialog is an MP3. Automatic extraction works on TF2 HWM models and HL2 FACS-compliant models. Use the HWM version of a TF2 character, convert the dialog to WAV, and make sure Show Waveform is enabled on the dialog clip.

Do I need the Microsoft Speech SDK for SFM lip sync?

No. The Speech SDK 5.1 advice comes from Faceposer, the older Source SDK facial tool. Source Filmmaker ships its own phoneme extractor files, and Valve warns against installing SAPI 5.1 on Windows Vista or later.

Can I lip sync a custom model in SFM?

Yes, if the model has facial flexes. HL2 FACS-compliant models can get phoneme presets through the Element Viewer command Create Phoneme Presets based on HL2 FACS controls. Other models need a phoneme preset group built by hand and saved with the model.

How do I stop the mouth from flickering after extraction?

Select the Lower Face and Tongue controls, open the Motion Editor, make a time selection over the line and drag the Smooth preset slider in small steps. Then fix any remaining single-frame spikes on the jaw curve in the Graph Editor.

Why does my SFM lip sync look late?

Mouth shapes that land exactly on the sound tend to look delayed. Shift the face animation one or two frames earlier than the audio so each shape forms just before it is heard, then check the result at full playback speed.

2 thoughts on “SFM Lip Sync Tutorial: Phoneme Extraction and Mouth Cleanup”

Leave a Comment