Skip to content

Implement UE5 lip sync in Blueprint

v0.3.0 · UE 5.8.2 / Windows x64

Implement audio lip sync in Unreal Engine 5 (UE5) by connecting analysis, playback, and facial-curve application as separate steps. Install the plugin first. Your Actor needs a LAMAudio2ExpressionComponent, and the character mesh needs an Animation Blueprint. Map the ARKit curves or Visemes to that mesh.

BeginPlay or another event
→ Analyze SoundWave Async(Component, SoundWave, Settings)
Completed(Clip) → Play Expression Clip(Clip, StartTime=0)
Progress → Update loading UI
Failed → Display Error
Cancelled → Close loading UI

Supported inputs are standard mono / stereo SoundWaves, 8–192 kHz, up to 300 seconds. External WAV / MP3 files cannot be passed directly: import them into UE as SoundWaves first.

Pass the Clip output of Completed to the playback node. Keep the Clip in a Blueprint variable if other Actors will reuse it. Use Cancel Analysis to cancel analysis. Starting another analysis on the same component cancels its previous analysis.

Blueprint Components panel showing Add and the added LAM component.

Add a LAM component to the Actor · Open full-size image

  1. Use Add to find and add LAM Audio2Expression Component.
  2. This example names the added component LAM.

Captured 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · Operation included in v0.3.0.

Blueprint connecting BeginPlay to Analyze SoundWave Async, then Completed and Clip to Play Expression Clip.

Play from the Completed output of asynchronous analysis · Open full-size image

  1. Pass the LAM component and a SoundWave to the analysis node.
  2. Connect the Completed execution pin and Clip output to the playback node.

This is a minimal wiring example. Handle Failed, Cancelled and Progress in your application.

Captured 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · Operation included in v0.3.0.

Existing pose → Apply LAM ARKit Curves → Output Pose
  1. Open your character’s Animation Blueprint.
  2. Connect Apply LAM ARKit Curves between the existing pose and Output Pose.
  3. Set Source Component to the LAM component that performs analysis and playback.
  4. Set Alpha between 0 and 1. Use a Curve Profile if your curve names differ.

If Source Component is empty, the node searches the SkeletalMesh’s owning Actor. Specify it explicitly when that Actor has multiple LAM components.

A mesh can consume standard curve names such as jawOpen through matching morph targets. For a bone-driven rig, route the curves into your existing rig or Control Rig. The plugin does not infer a custom bone arrangement automatically.

Actual AnimGraph connecting Local Space Ref Pose, Apply LAM ARKit Curves and Output Pose.

Apply ARKit expression curves to the input pose · Open full-size image

  1. Ref Pose is a placeholder in this example. Supply your existing animation pose.
  2. Assign the analysis/playback LAM to Source Component. If empty, the owning Actor is searched.
  3. Connect the output to Output Pose.

Captured 2026-09-30 · UE 5.8.2 · Plugin 1860d0e · Demo 9dee71d · Operation included in v0.3.0.

Pause, Resume, Stop, and Seek control audio and expressions together. Pause holds the expression; stop returns to the input pose over 100 ms. See playback controls.

  • Get Current Expression Frame returns time, 52 values, Validity, and the applied Weight.
  • Get ARKit Curve Value returns a named estimated curve value. Stop-fade Weight is separate.

The distributed project includes /Game/Examples/BP_LAMPlayback for async analysis and playback, and /Game/Examples/ABP_LAMCurves for the AnimGraph. The latter uses a test skeleton; copy its node arrangement into your own AnimBP.

In the public Blueprint face-demo source, start at 02_Analyze_And_Play in BP_FaceDemo. That implementation is included in the v0.3.0 ZIPs. See the demo version notes.

For recorded audio, bake a SoundWave clip in the editor and save the asset. Pass the loaded clip directly to a playback node to skip runtime analysis. This feature is included in the v0.3.0 ZIPs.

In latest source Plugin 1860d0e, Lipsync also finds these nodes. For the v0.3.0 ZIP use LAM or the displayed node name. For a vowel / Oculus rig, replace the mouth application with Apply LAM Viseme Curves.

The public-source LAM Dialogue track uses the same Apply LAM ARKit Curves / Apply LAM Viseme Curves nodes. Do not add Play Expression Clip events for this track. With multiple candidates, match the track’s Target Components to the AnimBP’s Source Component. Is Controlled By Sequencer can gate ordinary playback starts. The dedicated track is not in v0.3.0 ZIPs.

Licenses & credits · Demo source