Kling Avatar Generation
Your Still Image, Talking and Moving
- auth
- image
- audio
- video
- video_file
- audio
- url
- task_id
Kling Avatar Generation turns a still image of a person into a "digital human" - an animated version that gestures, expresses, and (if you give it audio) speaks. It's the pack's talking-head node, and it's the one that makes people's eyes light up when they demo it: portrait in, living presenter out. If you've got a character, an influencer, a product spokesperson, or just your own face rendered by the Image Generation node, this is the step that makes them come alive.
The distinction that matters: this is avatar animation, not lip-sync. Lip-sync takes an existing video of someone talking and re-times the mouth to new audio. Avatar generation starts from a still and synthesizes the whole performance - the face, the head motion, the expressions - with audio optionally driving the speech. Different job, different node.
How it works
The inputs are straightforward:
auth- the KLING_AUTH object from the Auth node.image(IMAGE) - your portrait or character shot. This is the star of the show; feed it a decent head-and-shoulders shot and the result is dramatically better than a tiny face in a landscape.prompt- optional text steering the animation. "Speaks to camera with welcoming gestures" goes a long way; leaving it blank gives you Kling's default behavior.mode-proorstd. Pro is higher quality and spends more credits; std is faster/cheaper and fine for tests.
Then, optionally, a voice to make it talk: either audio (an AUDIO tensor) or audio_url (a hosted URL). Give it audio and the avatar speaks those words with natural lip movement; leave it empty and you get a silent animated performance. If you supply an AUDIO tensor, the node quietly converts it and uploads it to Kling's materials API to get an asset ID - that's the mechanism for the audio path.
Outputs are the pack-standard video quintet: video (IMAGE frame batch), video_file (path), audio (AUDIO, from the result), url, and task_id.
How to get a good one
- Start from a clean, well-lit face. The model's whole job is animating the subject; if the source is a moody low-res portrait, the avatar inherits the mood.
- Describe the performance, not the camera. "Looks down, smiles, then addresses the audience" beats "high production value." The motion direction lives in the prompt.
- Chain it with the pack's TTS. The natural full pipeline is Text-to-Speech → Avatar Generation, so the avatar speaks your generated narration. The pack ships an example workflow (
avatar_narrator) showing exactly that. - Budget for pro mode. Avatar generation is a video job; it's not the cheapest call in the pack. Use std while you iterate on the image and prompt, then flip to pro for the real render.
Common issues
- "No face" or warped animation - the source image's face is too small, occluded, or stylized. Crop tighter, improve lighting, retry.
- Audio path fails - an AUDIO tensor that didn't convert, or an
audio_urlthat isn't publicly reachable. The pack downloads from URLs with a scheme/SSRF guard, so a loopback or internal address will be refused by default. - Video comes back but no speech - you fed a prompt but no audio, which is exactly the "silent performance" mode. Add audio if you wanted speech.
Install
It's in the ComfyUI-Kling-Direct pack:
cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-Kling-Direct
or ComfyUI Manager → search "Kling Direct" → install → restart. No models, no GPU, no extra dependencies beyond what ComfyUI already ships - all the heavy lifting happens on Kling's servers, paid for in credits.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| auth | KLING_AUTH | — | |
| image | IMAGE | — | |
| prompt | STRING | Optional text prompt for the avatar animation. | |
| mode | COMBO | pro | Generation mode. |
| audioopt | AUDIO | — | |
| audio_urlopt | STRING | URL of audio for the avatar to speak. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | IMAGE | — |
| video_file | STRING | — |
| audio | AUDIO | — |
| url | STRING | — |
| task_id | STRING | — |