lipsync-2

lipsync-2 is a zero-shot lip synchronization model that aligns spoken audio to existing video while preserving the speaker’s identity and natural speaking style. It works across live-action, animation, and AI-generated footage without training or fine-tuning.

API Reference
INTEGRATE
Complete technical specification for integration
RequestResponse
Examples4
CODE
Ready-to-use code snippets for common workflows
audio-driven
Nocturnal Auctioneer Spoken-Word Music Video$0.428~1m 35simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'sync:lipsync-2@1',
providerSettings: {
sync: {
syncMode: 'remap',
temperature: 0.55
}
},
inputs: {
video: 'https://assets.runware.ai/assets/inputs/b98dcbd2-d56b-4a06-b518-1cc524000d2d.mp4',
audio: 'https://assets.runware.ai/assets/inputs/276efff5-b29d-4319-8fda-402b4dcef026.mp3'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/b98dcbd2-d56b-4a06-b518-1cc524000d2d.mp4",
"audio": "https://assets.runware.ai/assets/inputs/276efff5-b29d-4319-8fda-402b4dcef026.mp3"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "3e941cc8-6cc4-4b71-b742-33b0fbebcedc",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/b98dcbd2-d56b-4a06-b518-1cc524000d2d.mp4",
"audio": "https://assets.runware.ai/assets/inputs/276efff5-b29d-4319-8fda-402b4dcef026.mp3"
}
}
]'runware run sync:lipsync-2@1 \
providerSettings.sync.syncMode=remap \
providerSettings.sync.temperature=0.55 \
inputs.video=https://assets.runware.ai/assets/inputs/b98dcbd2-d56b-4a06-b518-1cc524000d2d.mp4 \
inputs.audio=https://assets.runware.ai/assets/inputs/276efff5-b29d-4319-8fda-402b4dcef026.mp3{
"taskType": "videoInference",
"taskUUID": "3e941cc8-6cc4-4b71-b742-33b0fbebcedc",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/b98dcbd2-d56b-4a06-b518-1cc524000d2d.mp4",
"audio": "https://assets.runware.ai/assets/inputs/276efff5-b29d-4319-8fda-402b4dcef026.mp3"
}
}Response
{
"taskType": "videoInference",
"taskUUID": "3e941cc8-6cc4-4b71-b742-33b0fbebcedc",
"videoUUID": "7642c03c-d64a-4a8e-8c3d-19e304f7f488",
"videoURL": "https://vm.runware.ai/video/os/a01d21/ws/5/vi/7642c03c-d64a-4a8e-8c3d-19e304f7f488.mp4",
"cost": 0.42768
}audio-driven
Polar Station Safety Presenter$0.517~1m 40simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'sync:lipsync-2@1',
providerSettings: {
sync: {
syncMode: 'remap',
temperature: 0.55
}
},
inputs: {
video: 'https://assets.runware.ai/assets/inputs/2d2e6d5d-3e84-4eac-a7af-e4d8a493688a.mp4',
audio: 'https://assets.runware.ai/assets/inputs/98380f6e-4a4f-404f-81d7-c42d92fa3e8a.mp3'
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/2d2e6d5d-3e84-4eac-a7af-e4d8a493688a.mp4",
"audio": "https://assets.runware.ai/assets/inputs/98380f6e-4a4f-404f-81d7-c42d92fa3e8a.mp3"
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "13e17298-5017-431b-9530-1a080fe5833d",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/2d2e6d5d-3e84-4eac-a7af-e4d8a493688a.mp4",
"audio": "https://assets.runware.ai/assets/inputs/98380f6e-4a4f-404f-81d7-c42d92fa3e8a.mp3"
}
}
]'runware run sync:lipsync-2@1 \
providerSettings.sync.syncMode=remap \
providerSettings.sync.temperature=0.55 \
inputs.video=https://assets.runware.ai/assets/inputs/2d2e6d5d-3e84-4eac-a7af-e4d8a493688a.mp4 \
inputs.audio=https://assets.runware.ai/assets/inputs/98380f6e-4a4f-404f-81d7-c42d92fa3e8a.mp3{
"taskType": "videoInference",
"taskUUID": "13e17298-5017-431b-9530-1a080fe5833d",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"syncMode": "remap",
"temperature": 0.55
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/2d2e6d5d-3e84-4eac-a7af-e4d8a493688a.mp4",
"audio": "https://assets.runware.ai/assets/inputs/98380f6e-4a4f-404f-81d7-c42d92fa3e8a.mp3"
}
}Response
{
"taskType": "videoInference",
"taskUUID": "13e17298-5017-431b-9530-1a080fe5833d",
"videoUUID": "3da56706-6cba-4a1f-b265-08a32d16eb1a",
"videoURL": "https://vm.runware.ai/video/os/a08dlim3/ws/5/vi/3da56706-6cba-4a1f-b265-08a32d16eb1a.mp4",
"cost": 0.51744
}segmented-lip-sync
Mushroom Farm Duet Music Segment$0.266~1m 55simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'sync:lipsync-2@1',
providerSettings: {
sync: {
activeSpeakerDetection: true,
occlusionDetectionEnabled: true,
syncMode: 'cut_off',
temperature: 0.65,
segments: [
{
startTime: 0,
endTime: 3,
ref: 'speaker_a'
},
{
startTime: 3,
endTime: 6,
ref: 'speaker_b'
}
]
}
},
inputs: {
video: 'https://assets.runware.ai/assets/inputs/48dfdae0-cc29-472b-a09c-e9998f58c9fd.mp4',
audio: [
{
id: 'speaker_a',
source: 'https://assets.runware.ai/assets/inputs/22b64487-97ea-45fe-8062-c1f312867420.mp3'
},
{
id: 'speaker_b',
source: 'https://assets.runware.ai/assets/inputs/3f52a6aa-1186-4d31-a81b-65d9337f9562.mp3'
}
]
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"activeSpeakerDetection": True,
"occlusionDetectionEnabled": True,
"syncMode": "cut_off",
"temperature": 0.65,
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
]
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/48dfdae0-cc29-472b-a09c-e9998f58c9fd.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/22b64487-97ea-45fe-8062-c1f312867420.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/3f52a6aa-1186-4d31-a81b-65d9337f9562.mp3"
}
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "6fd5ca2d-2066-4773-829c-744da7fe140d",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"activeSpeakerDetection": true,
"occlusionDetectionEnabled": true,
"syncMode": "cut_off",
"temperature": 0.65,
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
]
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/48dfdae0-cc29-472b-a09c-e9998f58c9fd.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/22b64487-97ea-45fe-8062-c1f312867420.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/3f52a6aa-1186-4d31-a81b-65d9337f9562.mp3"
}
]
}
}
]'runware run sync:lipsync-2@1 \
providerSettings.sync.activeSpeakerDetection=true \
providerSettings.sync.occlusionDetectionEnabled=true \
providerSettings.sync.syncMode=cut_off \
providerSettings.sync.temperature=0.65 \
providerSettings.sync.segments.0.startTime=0 \
providerSettings.sync.segments.0.endTime=3 \
providerSettings.sync.segments.0.ref=speaker_a \
providerSettings.sync.segments.1.startTime=3 \
providerSettings.sync.segments.1.endTime=6 \
providerSettings.sync.segments.1.ref=speaker_b \
inputs.video=https://assets.runware.ai/assets/inputs/48dfdae0-cc29-472b-a09c-e9998f58c9fd.mp4 \
inputs.audio.0.id=speaker_a \
inputs.audio.0.source=https://assets.runware.ai/assets/inputs/22b64487-97ea-45fe-8062-c1f312867420.mp3 \
inputs.audio.1.id=speaker_b \
inputs.audio.1.source=https://assets.runware.ai/assets/inputs/3f52a6aa-1186-4d31-a81b-65d9337f9562.mp3{
"taskType": "videoInference",
"taskUUID": "6fd5ca2d-2066-4773-829c-744da7fe140d",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"activeSpeakerDetection": true,
"occlusionDetectionEnabled": true,
"syncMode": "cut_off",
"temperature": 0.65,
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
]
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/48dfdae0-cc29-472b-a09c-e9998f58c9fd.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/22b64487-97ea-45fe-8062-c1f312867420.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/3f52a6aa-1186-4d31-a81b-65d9337f9562.mp3"
}
]
}
}Response
{
"taskType": "videoInference",
"taskUUID": "6fd5ca2d-2066-4773-829c-744da7fe140d",
"videoUUID": "35c5ab22-f3cb-46dd-8b2a-a90e9e7b1999",
"videoURL": "https://vm.runware.ai/video/os/a07dlim3/ws/5/vi/35c5ab22-f3cb-46dd-8b2a-a90e9e7b1999.mp4",
"cost": 0.265848
}segmented-lip-sync
Seed Vault Intake Conversation B-Roll$0.266~5m 5simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'sync:lipsync-2@1',
providerSettings: {
sync: {
segments: [
{
startTime: 0,
endTime: 3,
ref: 'speaker_a'
},
{
startTime: 3,
endTime: 6,
ref: 'speaker_b'
}
],
activeSpeakerDetection: true,
occlusionDetectionEnabled: true,
syncMode: 'cut_off',
temperature: 0.65
}
},
inputs: {
video: 'https://assets.runware.ai/assets/inputs/8a2cfbbc-9c80-4787-ad9e-3def6770378c.mp4',
audio: [
{
id: 'speaker_a',
source: 'https://assets.runware.ai/assets/inputs/dd5e09a5-7a7d-488a-9865-3bf9ec2586e5.mp3'
},
{
id: 'speaker_b',
source: 'https://assets.runware.ai/assets/inputs/8ce68ec4-efb8-4b53-b3ef-bb90eb07aa15.mp3'
}
]
}
})import asyncio
import os
from runware import Runware
async def main():
async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
results = await client.run({
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
],
"activeSpeakerDetection": True,
"occlusionDetectionEnabled": True,
"syncMode": "cut_off",
"temperature": 0.65
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/8a2cfbbc-9c80-4787-ad9e-3def6770378c.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/dd5e09a5-7a7d-488a-9865-3bf9ec2586e5.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/8ce68ec4-efb8-4b53-b3ef-bb90eb07aa15.mp3"
}
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "879be0a1-d0cd-4e52-9dc6-51c27198ca3a",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
],
"activeSpeakerDetection": true,
"occlusionDetectionEnabled": true,
"syncMode": "cut_off",
"temperature": 0.65
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/8a2cfbbc-9c80-4787-ad9e-3def6770378c.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/dd5e09a5-7a7d-488a-9865-3bf9ec2586e5.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/8ce68ec4-efb8-4b53-b3ef-bb90eb07aa15.mp3"
}
]
}
}
]'runware run sync:lipsync-2@1 \
providerSettings.sync.segments.0.startTime=0 \
providerSettings.sync.segments.0.endTime=3 \
providerSettings.sync.segments.0.ref=speaker_a \
providerSettings.sync.segments.1.startTime=3 \
providerSettings.sync.segments.1.endTime=6 \
providerSettings.sync.segments.1.ref=speaker_b \
providerSettings.sync.activeSpeakerDetection=true \
providerSettings.sync.occlusionDetectionEnabled=true \
providerSettings.sync.syncMode=cut_off \
providerSettings.sync.temperature=0.65 \
inputs.video=https://assets.runware.ai/assets/inputs/8a2cfbbc-9c80-4787-ad9e-3def6770378c.mp4 \
inputs.audio.0.id=speaker_a \
inputs.audio.0.source=https://assets.runware.ai/assets/inputs/dd5e09a5-7a7d-488a-9865-3bf9ec2586e5.mp3 \
inputs.audio.1.id=speaker_b \
inputs.audio.1.source=https://assets.runware.ai/assets/inputs/8ce68ec4-efb8-4b53-b3ef-bb90eb07aa15.mp3{
"taskType": "videoInference",
"taskUUID": "879be0a1-d0cd-4e52-9dc6-51c27198ca3a",
"model": "sync:lipsync-2@1",
"providerSettings": {
"sync": {
"segments": [
{
"startTime": 0,
"endTime": 3,
"ref": "speaker_a"
},
{
"startTime": 3,
"endTime": 6,
"ref": "speaker_b"
}
],
"activeSpeakerDetection": true,
"occlusionDetectionEnabled": true,
"syncMode": "cut_off",
"temperature": 0.65
}
},
"inputs": {
"video": "https://assets.runware.ai/assets/inputs/8a2cfbbc-9c80-4787-ad9e-3def6770378c.mp4",
"audio": [
{
"id": "speaker_a",
"source": "https://assets.runware.ai/assets/inputs/dd5e09a5-7a7d-488a-9865-3bf9ec2586e5.mp3"
},
{
"id": "speaker_b",
"source": "https://assets.runware.ai/assets/inputs/8ce68ec4-efb8-4b53-b3ef-bb90eb07aa15.mp3"
}
]
}
}Response
{
"taskType": "videoInference",
"taskUUID": "879be0a1-d0cd-4e52-9dc6-51c27198ca3a",
"videoUUID": "79b046b5-1134-40fc-84d4-506fa9682f8f",
"videoURL": "https://vm.runware.ai/video/os/a10dlim3/ws/5/vi/79b046b5-1134-40fc-84d4-506fa9682f8f.mp4",
"cost": 0.265848
}