Text or audio to talking video
Upload a finished voice track or turn a script into narration with DreamAPI voice tools. LipSync 2.0 maps the speech to natural mouth movement and returns a polished MP4.
Turn one video into content for every audience.
Match new speech to an existing video and create natural talking content without frame-by-frame editing. Use your own audio, generate a voice from text, localize into new languages, or build avatar-led video at production scale.
Build from text, a recorded voice, an existing clip, a portrait, or an avatar. DreamAPI connects lip sync with voice, translation, and motion tools so teams can move from one approved asset to a full library of ready-to-publish videos.
Upload a finished voice track or turn a script into narration with DreamAPI voice tools. LipSync 2.0 maps the speech to natural mouth movement and returns a polished MP4.
Combine translation, voice cloning, and lip sync to localize a speaker without recording every line again. Preserve the character of the original delivery for each market.
Animate a portrait into a speaking presenter, direct an avatar's gestures, posture, and expression, or synchronize dialogue across multi-speaker content.
Match text or audio to a single source clip and produce natural talking content for every voice, language and channel — without frame-by-frame editing.
Match new speech to an existing clip with frame-accurate, believable mouth motion.
Keep the speaker's voice across languages with translation and voice cloning.
Build avatar-led and multi-speaker content through one API workflow.
Send a video URL and an audio URL to the versioned LipSync 2.0 endpoint. Set width and height to zero to preserve the source dimensions, and enable facial enhancement when the final delivery needs extra clarity.
POST your video and audio URLs to /api/async/lipsync/2.0.
The endpoint returns a task ID for tracking the asynchronous job.
Retrieve the completed MP4 through polling or a configured callback.
const res = await fetch('https://api.newportai.com/api/async/lipsync/2.0', {
method: 'POST',
headers: {
'Authorization': 'Bearer {{key}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
srcVideoUrl: 'https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/mq0MSmKgPGQQsxS9UovqH.mp4',
audioUrl: 'https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/AoOVLxqINsl1dTAAhnmAW.wav',
videoParams: { video_width: 0, video_height: 0, video_enhance: 1 }
})
});
const { data: { taskId } } = await res.json();curl -X POST 'https://api.newportai.com/api/async/lipsync/2.0' \
-H 'Authorization: Bearer {{key}}' \
-H 'Content-Type: application/json' \
-d '{
"srcVideoUrl": "https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/mq0MSmKgPGQQsxS9UovqH.mp4",
"audioUrl": "https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/AoOVLxqINsl1dTAAhnmAW.wav",
"videoParams": {
"video_width": 0,
"video_height": 0,
"video_enhance": 1
}
}'HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.newportai.com/api/async/lipsync/2.0"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer {{key}}")
.POST(HttpRequest.BodyPublishers.ofString("{\"srcVideoUrl\":\"https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/mq0MSmKgPGQQsxS9UovqH.mp4\",\"audioUrl\":\"https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/AoOVLxqINsl1dTAAhnmAW.wav\",\"videoParams\":{\"video_width\":0,\"video_height\":0,\"video_enhance\":1}}"))
.build();
HttpResponse<String> res = client.send(request, HttpResponse.BodyHandlers.ofString());import requests
response = requests.post(
"https://api.newportai.com/api/async/lipsync/2.0",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer {{key}}"
},
json={
"srcVideoUrl": "https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/mq0MSmKgPGQQsxS9UovqH.mp4",
"audioUrl": "https://d2t5pyzt5qvy2d.cloudfront.net/api/static_resource/prod/default/AoOVLxqINsl1dTAAhnmAW.wav",
"videoParams": {
"video_width": 0,
"video_height": 0,
"video_enhance": 1
}
}
)
print(response.json())The versioned route focuses the upgrade on the part viewers notice first: a clearer, sharper result.
One credit pool for every model on DreamAPI — video, image, avatar and editing. Buy a pack, then spend credits at the per-model rates below.
Credit packs are purchased on the DreamAPI pricing page.
Credits are calculated per second of input audio. Original-FPS billing scales linearly with frame rate.
AI lip sync matches mouth movement in a video to a new audio track. It replaces manual frame-by-frame animation with an automated workflow that produces natural talking-video output.
Yes. Upload your own audio, or generate narration from a script with DreamAPI voice tools and pass that audio into LipSync 2.0.
Yes. Pair DreamAPI translation and voice-cloning workflows with LipSync 2.0 to create localized videos while preserving the speaker's vocal identity.
Yes. DreamAPI's avatar workflow can animate a portrait into a speaking presenter and combine it with generated or uploaded audio.
Yes. DreamAPI supports multi-speaker and multi-face production workflows for dialogue, group content, and scenes where more than one person needs synchronized speech.
Teams use it for multilingual dubbing, YouTube and short-form localization, training updates, personalized sales videos, UGC ad variants, avatar presenters, and music-led creative content.
The initial request returns a taskId. Use it with the Polling API, or configure a callback to receive the completed MP4 automatically.
The default 25 fps mode costs 2 credits per second. Original-FPS mode uses the formula (input FPS / 25) × 2 credits per second.
Turn a single approved asset into talking videos for every voice, market, campaign, lesson, and channel — through one production-ready AI platform.