PixVerse LipSync

PixVerse LipSync generates accurate mouth motion from audio for characters and videos. It aligns lip movement with speech timing. It preserves facial expression context. Ideal for dubbing, character animation, and content localization workflows.

API Reference
INTEGRATE
Complete technical specification for integration
RequestResponse
Examples4
CODE
Ready-to-use code snippets for common workflows
audio-driven
Oyster Hatchery Sensor Explainer$0.136~57simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'pixverse:lipsync@1',
inputs: {
referenceVideos: [
'https://assets.runware.ai/assets/inputs/a68fc2b7-6c21-40b7-8a6b-7f31599144e1.mp4'
],
audio: 'https://assets.runware.ai/assets/inputs/a7a47640-5832-4ca8-bebb-8401f911297b.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": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/a68fc2b7-6c21-40b7-8a6b-7f31599144e1.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/a7a47640-5832-4ca8-bebb-8401f911297b.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": "35a07f98-9d6d-417e-8b49-46a1e54a07b9",
"model": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/a68fc2b7-6c21-40b7-8a6b-7f31599144e1.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/a7a47640-5832-4ca8-bebb-8401f911297b.mp3"
}
}
]'runware run pixverse:lipsync@1 \
inputs.referenceVideos.0=https://assets.runware.ai/assets/inputs/a68fc2b7-6c21-40b7-8a6b-7f31599144e1.mp4 \
inputs.audio=https://assets.runware.ai/assets/inputs/a7a47640-5832-4ca8-bebb-8401f911297b.mp3{
"taskType": "videoInference",
"taskUUID": "35a07f98-9d6d-417e-8b49-46a1e54a07b9",
"model": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/a68fc2b7-6c21-40b7-8a6b-7f31599144e1.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/a7a47640-5832-4ca8-bebb-8401f911297b.mp3"
}
}Response
{
"taskType": "videoInference",
"taskUUID": "35a07f98-9d6d-417e-8b49-46a1e54a07b9",
"videoUUID": "98f55df5-2a90-4358-a886-f906b9171b2e",
"videoURL": "https://vm.runware.ai/video/os/a06dlim3/ws/5/vi/98f55df5-2a90-4358-a886-f906b9171b2e.mp4",
"seed": 2090663801,
"cost": 0.1364
}audio-driven
Arctic Eco-Thriller Teaser Shot$0.109~1m 3simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'pixverse:lipsync@1',
inputs: {
referenceVideos: [
'https://assets.runware.ai/assets/inputs/3af26e89-8243-48e5-8e9b-4dd3ff098931.mp4'
],
audio: 'https://assets.runware.ai/assets/inputs/9a9c6793-ae48-41b1-b8bf-93ef8b24d06f.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": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/3af26e89-8243-48e5-8e9b-4dd3ff098931.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/9a9c6793-ae48-41b1-b8bf-93ef8b24d06f.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": "5644802b-6e49-459c-b1af-d5460c10806a",
"model": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/3af26e89-8243-48e5-8e9b-4dd3ff098931.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/9a9c6793-ae48-41b1-b8bf-93ef8b24d06f.mp3"
}
}
]'runware run pixverse:lipsync@1 \
inputs.referenceVideos.0=https://assets.runware.ai/assets/inputs/3af26e89-8243-48e5-8e9b-4dd3ff098931.mp4 \
inputs.audio=https://assets.runware.ai/assets/inputs/9a9c6793-ae48-41b1-b8bf-93ef8b24d06f.mp3{
"taskType": "videoInference",
"taskUUID": "5644802b-6e49-459c-b1af-d5460c10806a",
"model": "pixverse:lipsync@1",
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/3af26e89-8243-48e5-8e9b-4dd3ff098931.mp4"
],
"audio": "https://assets.runware.ai/assets/inputs/9a9c6793-ae48-41b1-b8bf-93ef8b24d06f.mp3"
}
}Response
{
"taskType": "videoInference",
"taskUUID": "5644802b-6e49-459c-b1af-d5460c10806a",
"videoUUID": "954cd776-ff85-49c2-9f41-f53c62abaac7",
"videoURL": "https://vm.runware.ai/video/os/a09dlim3/ws/5/vi/954cd776-ff85-49c2-9f41-f53c62abaac7.mp4",
"seed": 798770226,
"cost": 0.1091
}scripted-lip-sync
Community Radio Vocal Logo Loop$0.0546~33simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'pixverse:lipsync@1',
speech: {
text: 'Night Signal Radio—stories after the city sleeps.',
voice: 'Chloe'
},
inputs: {
referenceVideos: [
'https://assets.runware.ai/assets/inputs/2f920ae5-cf4b-4fac-81d0-c4dc5c5cfee3.mp4'
]
}
})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": "pixverse:lipsync@1",
"speech": {
"text": "Night Signal Radio—stories after the city sleeps.",
"voice": "Chloe"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/2f920ae5-cf4b-4fac-81d0-c4dc5c5cfee3.mp4"
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "58a3864a-1f06-439f-8827-97021c320061",
"model": "pixverse:lipsync@1",
"speech": {
"text": "Night Signal Radio—stories after the city sleeps.",
"voice": "Chloe"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/2f920ae5-cf4b-4fac-81d0-c4dc5c5cfee3.mp4"
]
}
}
]'runware run pixverse:lipsync@1 \
speech.text="Night Signal Radio—stories after the city sleeps." \
speech.voice=Chloe \
inputs.referenceVideos.0=https://assets.runware.ai/assets/inputs/2f920ae5-cf4b-4fac-81d0-c4dc5c5cfee3.mp4{
"taskType": "videoInference",
"taskUUID": "58a3864a-1f06-439f-8827-97021c320061",
"model": "pixverse:lipsync@1",
"speech": {
"text": "Night Signal Radio—stories after the city sleeps.",
"voice": "Chloe"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/2f920ae5-cf4b-4fac-81d0-c4dc5c5cfee3.mp4"
]
}
}Response
{
"taskType": "videoInference",
"taskUUID": "58a3864a-1f06-439f-8827-97021c320061",
"videoUUID": "415f600f-8034-42c9-9e90-925c23e94058",
"videoURL": "https://vm.runware.ai/video/os/a04d20/ws/5/vi/415f600f-8034-42c9-9e90-925c23e94058.mp4",
"seed": 598016855,
"cost": 0.0546
}scripted-lip-sync
Manuscript Scanner Product Explainer$0.123~50simport { createClient } from '@runware/sdk'
const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()
const [result] = await client.run({
model: 'pixverse:lipsync@1',
speech: {
text: 'This scanner maps hidden ink without touching the parchment, so we can study erased notes while keeping every fragile page safe.',
voice: 'Isabella'
},
inputs: {
referenceVideos: [
'https://assets.runware.ai/assets/inputs/7452cb19-48e2-4897-9829-0046528eb80c.mp4'
]
}
})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": "pixverse:lipsync@1",
"speech": {
"text": "This scanner maps hidden ink without touching the parchment, so we can study erased notes while keeping every fragile page safe.",
"voice": "Isabella"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/7452cb19-48e2-4897-9829-0046528eb80c.mp4"
]
}
})
asyncio.run(main())curl https://api.runware.ai/v1 \
-H "Authorization: Bearer $RUNWARE_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"taskType": "videoInference",
"taskUUID": "1f946a1f-47a4-4ce1-aa91-ef04a0610c6f",
"model": "pixverse:lipsync@1",
"speech": {
"text": "This scanner maps hidden ink without touching the parchment, so we can study erased notes while keeping every fragile page safe.",
"voice": "Isabella"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/7452cb19-48e2-4897-9829-0046528eb80c.mp4"
]
}
}
]'runware run pixverse:lipsync@1 \
speech.text="This scanner maps hidden ink without touching the parchment, so we can study erased notes while keeping every fragile page safe." \
speech.voice=Isabella \
inputs.referenceVideos.0=https://assets.runware.ai/assets/inputs/7452cb19-48e2-4897-9829-0046528eb80c.mp4{
"taskType": "videoInference",
"taskUUID": "1f946a1f-47a4-4ce1-aa91-ef04a0610c6f",
"model": "pixverse:lipsync@1",
"speech": {
"text": "This scanner maps hidden ink without touching the parchment, so we can study erased notes while keeping every fragile page safe.",
"voice": "Isabella"
},
"inputs": {
"referenceVideos": [
"https://assets.runware.ai/assets/inputs/7452cb19-48e2-4897-9829-0046528eb80c.mp4"
]
}
}Response
{
"taskType": "videoInference",
"taskUUID": "1f946a1f-47a4-4ce1-aa91-ef04a0610c6f",
"videoUUID": "2a69240b-aba8-49aa-aa8f-81f033edc826",
"videoURL": "https://vm.runware.ai/video/os/a01d21/ws/5/vi/2a69240b-aba8-49aa-aa8f-81f033edc826.mp4",
"seed": 103854495,
"cost": 0.1228
}