Nodes/SpicyAPI/Kling Avatar 2.0 · Talking Avatar
ComfyUI Node

Kling Avatar 2.0 · Talking Avatar

One portrait, one audio file, and the picture talks

By spicyapi-ai·Created 21 days ago·Updated 2 days ago· 2
Kling Avatar 2.0 · Talking Avatar
  • image_url
  • audio_url
  • video
  • task id
◄prompt►
◄resolution720p►
◄seed0►

Lip sync's whole problem is that it's the one job where "nearly right" looks broken. Mouths that don't match syllables read as uncanny instantly, and that's the gap this node fills: give it a portrait and an audio file, and it returns a clip of that person performing the speech or song. It's the natural second half of a TTS pipeline - generate the voice locally with something like Chatterbox, animate the face here - and it's the cheapest per-second tier in this pack at $0.0512/s for 720p ($0.1024/s at 1080p).

Forty cents buys eight seconds of talking head. That's the pitch.

What you connect

  • image_url - the portrait, IMAGE socket. One clear, front-facing face works best, per the author's own tooltip. Straight-on, eyes visible, no extreme angle, no sunglasses, reasonably lit. The model is reading the geometry of a face to drive a mouth; a three-quarter-view snapshot with the chin down will give it a harder job than it needs.
  • audio_url - an AUDIO socket ("URL" because that's what the API consumes, but in ComfyUI you wire an AUDIO output here - Load Audio, a TTS node, a music node). The clip is as long as this audio. Speech or a song; both work.
  • prompt - optional direction for the performance: mood, gestures, where the eyes go. Leave it out for a neutral delivery, use it when you want a wink or a head tilt.
  • resolution - 720p or 1080p, with the per-second rate shown on the node.

Outputs: video (VIDEO - Save Video or a preview node; audio is baked into the file, since the whole point is the sync) and task id (STRING, the run handle for the SpicyAPI console).

The arithmetic matters more here than anywhere

Length follows your audio, up to about five minutes, so the cost scales with the script, not with the shot count. At 720p that's roughly $3.07 per minute of finished audio - three minutes is about $9.22, five minutes about $15.36. At 1080p it doubles: about $30.72 for a five-minute clip. For a ten-second social voiceover this node is trivially cheap. For a five-minute explainer it's a considered purchase, and you'll want to dub the voice track separately first, then animate once you're happy with the take.

Also budget for the plumbing: audio is re-encoded to 16-bit PCM WAV before upload and media uploads are capped at 90 MiB, so a long lossless source needs exporting down first.

Getting a useful result

Don't put two people in the frame. This is the most consistently reported failure with talking-avatar and lip-sync models: with multiple faces present, the model can end up animating both, or the wrong one, and there's no widget here to nominate a subject. Crop to the person who's speaking. If your shot genuinely needs two people and one speaking lip sync, that's an edit, not a node.

Keep the head large in frame. A thumbnail-sized face leaves the model very few pixels to work with, and the sync is only as good as the detail available.

Expect a slightly static performance unless you direct it via prompt - expression beyond the mouth is where these models are weakest. If you want a lot of body movement, that's the motion-control node in this pack, which is a different tool.

Sync quality tracks audio quality. A clean, dry, close-miked voice syncs far better than a vocal buried in a busy mix.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi

Restart ComfyUI, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys → restart once more so the node list is fetched from your account. Manager users can search "SpicyAPI". Headless: SPICY_API_KEY in the environment. The pack has zero dependencies beyond ComfyUI itself - audio and video decoding both use what ComfyUI already ships, so there's no ffmpeg install step, and no local node pack that breaks when transformers updates.

Money and mechanics

Set Max cost per run. Every job is quoted before submission and aborts uncharged if it's above your ceiling, which matters enormously here: a five-minute upload is the difference between forty cents and thirty dollars. The node prints the actual charge when it finishes.

Re-queueing is cheaper than it looks. Seeds default to fixed, so running the same graph again returns the first result instead of billing you a second time; switch control after generate to randomize when you want a new take, and remember each take is a full render. Interrupting a run stops your wait rather than the job - the task finishes server-side, is charged if it succeeds, and sits in your console for up to 14 days.

The usual errors: No SpicyAPI key is set (settings step skipped), 40310 (verify your sign-up email), 40004 (that option combination isn't served - change the field the message names), and a proxy or firewall message if HTTPS_PROXY is set but not working.

CategorySpicyAPI/Video/Kling

Inputs (5)

NameTypeDefaultDescription
promptSTRINGOptional direction for the performance: mood, gestures, where the eyes go.
image_urlIMAGEPortrait to bring to life: a clear, front-facing face works best. JPEG or PNG only.
audio_urlAUDIOSpeech or song the avatar performs. The clip is as long as this audio.
resolutionCOMBO720pOutput resolution. Higher tiers cost more per second.
seedINT00–2147483647This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed.

Outputs (2)

NameTypeDescription
videoVIDEO—
task idSTRINGThe SpicyAPI task id, for the console logs or support.