Browse ModelsSyncSync Lipsync 2

Sync Lipsync 2

Sync Lipsync 2

Playground

Try it on WavespeedAI!

Sync Lipsync-2 synchronizes lip movements in any video to supplied audio, enabling realistic mouth alignment for films, podcasts, games, or animations. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Lipsync 2.0 — Video Re-Dub (Video + Audio to Lipsynced Video)

Lipsync 2.0 is a zero-shot lipsync model that takes an existing video and a separate audio track, then re-animates the mouth so lip movements match the speech. No training or fine-tuning is required, and it preserves the speaker’s style across languages, dubbing scenarios, and character types.


🔍 What it does

  • Zero-shot lipsync – Drop in any talking-face clip plus new audio; the model directly outputs a re-synced video.
  • Style preservation – Keeps the original speaker’s facial mannerisms and timing as much as possible, even for translated or re-recorded lines.
  • Cross-domain support – Works with live-action footage, stylised 3D characters, and AI-generated avatars.
  • Flexible editing workflows – Use it for dubbing, dialogue fixes in post, or re-animating entire performances while keeping the original shot.

🧩 Parameters

  • video* Source video to be re-dubbed (URL or upload). Use clips where the face is clearly visible and not heavily occluded.

  • audio* Target speech audio (URL or upload). The lips will be synced to this track.

  • sync_mode Strategy for matching video and audio durations when they differ:

    • bounce – Ping-pong the video to cover a longer audio span.
    • loop – Loop the video until the audio finishes.
    • cut_off – Truncate to the shorter of video/audio.
    • silence – Pad with silence or frozen frames where needed.
    • remap – Time-remap to better align audio and video over the full clip.

Output: a re-synced MP4 video with lips matching the provided audio.


💰 Pricing

Pricing is linear in video length:

  • Effective rate: $0.05 per second of input video

Examples:

Video lengthPrice
5 s$0.25
10 s$0.50
30 s$1.50
60 s$3.00

🚀 How to use

  1. Upload video under video (clear face, stable framing works best).
  2. Upload audio under audio (clean speech, minimal background noise).
  3. Choose a sync_mode depending on how you want to handle duration mismatches.
  4. Click Run and download the re-dubbed clip once processing completes.

🎛 Practical tips

  • Aim for good lighting and frontal or three-quarter views for more accurate mouth motion.
  • If you just need simple dubbing, start with cut_off; for longer audio over short clips, try loop or remap.
  • Keep audio free of strong music or over-compressed noise for cleaner alignment.
  • For multi-shot edits, process each shot separately, then assemble in your NLE (Premiere, DaVinci, etc.) for full control.

More Models to Try

  • WaveSpeedAI / InfiniteTalk WaveSpeedAI’s single-avatar talking-head model that turns one photo plus audio into smooth, lip-synced digital presenter videos for tutorials, marketing, and social content.

  • WaveSpeedAI / InfiniteTalk Multi Multi-avatar version of InfiniteTalk that drives several characters in one scene from separate audio tracks, ideal for dialog-style explainers, interviews, and role-play videos.

  • Kwaivgi / Kling V2 AI Avatar Standard Cost-effective Kling-based AI avatar model that generates natural talking-face videos from a single reference image and voice track, suitable for everyday content and customer support.

  • Kwaivgi / Kling V2 AI Avatar Pro Higher-fidelity Kling V2 avatar model for premium digital humans, offering smoother motion, better lip-sync, and more stable faces for commercials, brand spokespeople, and product demos.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result


# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/sync/lipsync-2" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
    "sync_mode": "cut_off"
}'

# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
videostringYes-The video to be used for generation
audiostringYes--The audio to be used for generation
sync_modestringNocut_offbounce, loop, cut_off, silence, remapDefines how to handle duration mismatches between video and audio inputs. See the Media Content Tips guide https://docs.sync.so/compatibility-and-tips/media-content-tips#sync-mode-options for a brief overview, or the SyncMode enum below for detailed explanations of each option.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayArray of URLs to the generated content (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.has_nsfw_contentsarrayArray of boolean values indicating NSFW detection for each output
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction, the ID of the prediction to get
data.modelstringModel ID used for the prediction
data.outputsstringArray of URLs to the generated content (empty when status is not completed).
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2025 WaveSpeedAI. All rights reserved.