AI Avatar
Dual Avatar
Two-person photo + dual audio → two-person lip-synced conversation video
Dual Avatar drives one two-person photo + a mixed audio track + two per-speaker audio tracks into a two-person lip-synced conversation video. Async task; poll for status after submitting.
Base URL:
https://api.aiclonevoicefree.com| Auth:Authorization: Bearer sk_...
POST /api/v2/avatar/dual
| Field | Type | Required | Notes |
|---|---|---|---|
dual_image_url | string | ✅ | Two-person photo URL |
audio_mix_url | string | ✅ | Mixed audio of both speakers |
audio1_url | string | ✅ | Speaker 1 audio URL |
audio2_url | string | ✅ | Speaker 2 audio URL |
audio_duration_seconds | number | ✅ | Audio length (s), used for billing |
mask1_url | string | ⬜ | Mask for speaker 1 (designates the speaking region) |
resize_mode | string | ⬜ | With mask1_url: pad (default) / crop |
width | int | ⬜ | Output width, default 1280 |
height | int | ⬜ | Output height, default 720 |
Billing (video credits)
cost = ceil(audio_duration_seconds × 2), i.e. 2 credits/s (two speakers).402at submit if insufficient; auto-refunded on failure.
Example: 15s = 15 × 2 = 30 credits
Example
curl -X POST https://api.aiclonevoicefree.com/api/v2/avatar/dual \
-H "Authorization: Bearer sk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"dual_image_url": "https://your-cdn.com/two-people.png",
"audio_mix_url": "https://your-cdn.com/mix.mp3",
"audio1_url": "https://your-cdn.com/speaker1.mp3",
"audio2_url": "https://your-cdn.com/speaker2.mp3",
"audio_duration_seconds": 15,
"width": 1280,
"height": 720
}'Response 202
{
"task_id": "task_...",
"status": "pending",
"capability": "avatar",
"action": "dual",
"model": "dual-avatar"
}Getting the result
Poll GET /api/v2/avatar/tasks/{task_id}; videoUrl holds the finished clip when done:
{
"status": "completed",
"capability": "avatar",
"model": "dual-avatar",
"videoUrl": "https://.../result.mp4"
}See also AI Avatar and AI Avatar Pro.