Kling AI Avatar Pro
Photo plus audio, out comes someone talking
- image_url
- audio_url
- video
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
Three inputs, one talking head
Portrait photo. Audio file. Optional prompt. What comes back is a video of the person in the photo delivering that audio with a lip-sync and head motion.
This is the talking-avatar branch of Kling, and it's a genuinely different job from the rest of the video nodes in the folder: you're not generating motion from a prompt, you're driving a face from a waveform. That makes it the last step in a speech pipeline rather than a creative generation step - Suno or ElevenLabs or Gemini TTS earlier in the graph, avatar at the end.
Kling is Kuaishou's closed model, so again, no weights: the call goes to KIE.ai through the ComfyUI-KIE-Nodes-Next pack, on a KIE account with its own key and credits. Not Comfy's official Partner Nodes. KIE_Next_kling_ai_avatar_pro_36ef7273, under KIE Next / Video / Kling.
Mechanism
Both media inputs are native Comfy types, so the pack does the upload for you: the IMAGE becomes a PNG and the AUDIO object gets converted to a 16-bit PCM WAV - the pack does that conversion itself rather than shelling out to ffmpeg - and both are pushed to KIE's file host. The node then POSTs kling/ai-avatar-pro to createTask, polls recordInfo until the task reports success (interval climbing from ~2.5s to a 15s ceiling), and pulls the finished video down into output/KIE-Results/videos/, returning it as a VIDEO you can pass to any downstream node.
The audio length is effectively what sets the render length, which is why this job's cost scales with how long your script is. Keep test takes short.
The inputs
- image_url (
IMAGE, required) - the face. A clean front-facing portrait with soft, even lighting is the whole ballgame here. Mugshot-flat is fine; dramatic side light is not. - audio_url (
AUDIO, required) - the speech. Wire it from whatever TTS or voice pipeline you already have in the graph. - prompt - up to 5000 characters, and it's optional in spirit even though the node lists it as required. KIE's own example sends an empty string. Use it to nudge the delivery - tone, energy, where they're looking - not to describe the person.
- timeout_seconds - 1200 seconds of polling. Leave it, unless you're rendering a long script.
- callback_url - empty. Server-side webhooks only.
Outputs
video for the graph. Then url, all_urls_json, task_id, raw_json, and the two credit figures - credits_consumed and credits_left, both of which also render on the node after the run. credits_left reads -1 when KIE's balance service is unavailable; the render still succeeds.
Pro versus Standard
There are two avatar nodes in this pack and their input surfaces are identical - same three required fields, same outputs, same upload path. The difference is the tier you're buying from KIE, which in practice means output quality and price. Start with Standard while you're iterating on the source portrait and the script, and switch to Pro when you're rendering the take you'd actually ship. Iterating on Pro because you didn't test the audio first is how people burn a weekend's credits on a video where the mouth was always going to look wrong.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Restart ComfyUI, then Settings → KIE.ai Nodes Next → Connection → Paste / replace KIE.ai API key. It's validated against KIE before being stored, kept out of your workflow JSON, and confirmed with a masked fingerprint and a ✅ CONNECTED row showing your balance. Headless installs can export KIE_API_KEY - that takes priority over the saved key. Requirements are light: requests, Pillow, numpy, PyYAML. No model downloads at all, because nothing runs locally. ComfyUI Manager search works where the pack is listed; the repo also ships a ZIP and a one-click Windows installer under dist/.
Where it goes wrong
- Audio that isn't speech. Music or heavy background noise confuses the lip-sync. Trim and denoise before you spend the call.
- A portrait that's too stylised. Heavy filters, extreme angles and sunglasses read as "not a face" to the model. Give it an obvious face.
- Assuming it's a deepfake machine. You need the right to use the audio and the likeness. The pack does the same thing here as the rest of the industry - it will fight you on real-person likeness work without consent, and it should.
- Queuing it twice. Every run is a metered call and the node blocks until the task reports back. If a long script is still going, wait it out or raise
timeout_seconds; don't press Generate again. - Consistency expectations. The avatar node will hold the face it was given, but it is not a character system. If you need the same character across many clips and scenes, the pack's own Character Pack tools and the wider ecosystem's LoRA route are the honest answer; a single portrait plus an audio file is one performance, not an identity lock.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | — | |
| audio_url | AUDIO | — | |
| prompt | STRING | The prompt to use for the video generation (Max length: 5000 characters) | |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |