Infinitetalk Video To Video Multi
Playground
Try it on WavespeedAI!InfiniteTalk Video-to-Video Multi converts a video and two audio inputs into multi-character talking or singing videos at up to 720p. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
InfiniteTalk Video-to-Video Multi
What is InfiniteTalk Video-to-Video Multi?
InfiniteTalk Video-to-Video Multi creates videos with accurate lip sync for multiple characters by combining an input video and two audio tracks (left and right). It maintains identity across unlimited-length videos, ensuring precise lip synchronization while matching head, face, and body movements to each audio source.
Why it looks great
- Accurate lip synchronization: aligns lip motion precisely with audio for both characters, preserving natural rhythm and pronunciation.
- Full-body coherence: captures head movements, facial expressions, and posture changes beyond the lips.
- Identity preservation: maintains consistent facial identity and visual style across frames.
- Video-to-video capability: uses an existing video as the base, preserving the original scene and motion.
- Mask control: optional mask images let you define which regions can move.
- Instruction following: accepts text prompts to control scene, pose, or behavior while syncing to audio.
Pricing
| Output Resolution | Cost per 5 seconds | Max Length |
|---|---|---|
| 480p | $0.15 | 10 minutes |
| 720p | $0.30 | 10 minutes |
Billing Rules
- Standard Rate: $0.03 per second
- HD (720p) Rate: $0.06 per second (Double the Standard Rate)
- Minimum Charge: All videos are billed for a minimum of 5 seconds (costing at least $0.15).
- Billing Cap: To keep your costs predictable, billing is capped at 600 seconds (10 minutes).
How to Use
- Upload the left and right audio files.
- Upload your video (The video should clearly show two people).
- (Optional) Upload a mask image to control which regions can move.
- Select the speaking order (left to right, right to left, or meanwhile).
- Select the resolution (480p or 720p).
- Write the prompt if needed.
- Submit the job and download the results once they’re ready.
Note
- Max clip length per job: up to 10 minutes
- Processing speed: approximately 10–30 seconds of wall time per 1 second of video (varies by resolution and queue load)
- Mask safety tip: Do not upload the full image as mask_image. The mask should only cover the regions you want to animate—otherwise the result may render as fully black.
More Versions
Reference
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/wavespeed-ai/infinitetalk/video-to-video-multi" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"order": "meanwhile",
"resolution": "480p",
"seed": -1
}'
# 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
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| video | string | Yes | - | The video for generating the output. | |
| left_audio | string | Yes | - | - | The audio of the persion on the left for generating the output. |
| right_audio | string | Yes | - | - | The audio of the persion on the right for generating the output. |
| mask_image | string | No | - | Optional mask image to specify the person in the video to animate. | |
| prompt | string | No | - | The positive prompt for the generation. | |
| order | string | No | meanwhile | meanwhile, left_right, right_left | The order of the two audio sources in the output video, "meanwhile" means both audio sources will play at the same time, "left_right" means the left audio will play first then the right audio will play, "right_left" means the right audio will play first then the left audio will play. |
| resolution | string | No | 480p | 480p, 720p | The resolution of the output video. |
| seed | integer | No | -1 | -1 ~ 2147483647 | The random seed to use for the generation. -1 means a random seed will be used. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (empty when status is not completed). |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |