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

FieldTypeRequiredNotes
dual_image_urlstringTwo-person photo URL
audio_mix_urlstringMixed audio of both speakers
audio1_urlstringSpeaker 1 audio URL
audio2_urlstringSpeaker 2 audio URL
audio_duration_secondsnumberAudio length (s), used for billing
mask1_urlstringMask for speaker 1 (designates the speaking region)
resize_modestringWith mask1_url: pad (default) / crop
widthintOutput width, default 1280
heightintOutput height, default 720

Billing (video credits)

cost = ceil(audio_duration_seconds × 2), i.e. 2 credits/s (two speakers). 402 at 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.

On this page