Nodes/SpicyAPI/Talking Avatar · Talking Avatar
ComfyUI Node

Talking Avatar · Talking Avatar

One portrait, one voice clip, one video

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

Stills don't talk, and that's the gap this fills

Every portrait you generate is a frozen frame, and the difference between a nice image and a character is whether it can say something. On the local side the avatar field is where this gets solved - InfiniteTalk is the fast talking-head default, MultiTalk does multi-speaker scenes, LongCat trades speed for quality - and it's the second half of the pipeline the KB calls canonical: TTS makes the voice, an audio-driven avatar makes the face move.

Talking Avatar is that second half, hosted. One portrait plus a voice recording, $0.018 per second, and you get an MP4 of that person speaking: mouth, head movement and blinks all following the audio. A 10-second line is about 18 cents.

How it works

The portrait and the audio (both uploaded for you - images under a 10 MiB ceiling, media under 90 MiB) go to spicyapi/talking-avatar-v1/talking-avatar, and the result comes back as a ComfyUI VIDEO ready for Save Video. Nothing runs locally, so there's no expression model to download and no VRAM consideration at all.

The obvious, actually-good combo: wire Chatterbox · Text to Speech from this same pack into this node's audio_url. Type the script, get a lip-synced performance, all inside the graph, no audio editor.

Inputs and outputs

image_url (IMAGE) - the portrait of the person who will speak. One clearly visible face looking roughly at the camera works best; that's the whole quality bar, and it's not a suggestion. Extrapolating a face that's half turned away produces invented anatomy.

audio_url (AUDIO) - the speech driving the lips, 3 to 60 seconds, MP3 or WAV. The video runs as long as this audio. Files outside the range are rejected before any charge, which is how rejection should work. Load Audio or a TTS output both connect here.

prompt (STRING) - optional, and narrower than people expect: a note on expression or mood, such as calm or cheerful. Identity and setting come from the portrait. Don't try to use it to change the scene or the wardrobe; that's a different node.

seed - fixed by default, with the usual control after generate. Useful here because it lets you hold the performance constant and vary the audio.

mask_url (optional, IMAGE) - a black-and-white mask the same size as the portrait, white over the person who should speak. Only needed when the portrait shows several people. Advanced, and the reason a group shot isn't automatically disqualified.

Outputs: video (VIDEO) and task id (STRING).

Install

Manager → search SpicyAPI, or:

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

Restart. There's genuinely nothing else: no pip install, no weights, no GPU - the pack declares zero dependencies and both the TTS and the avatar run on SpicyAPI's servers. Python 3.10+ and a ComfyUI new enough for the V3 node API. Key in Settings > SpicyAPI (or SPICY_API_KEY on a server), then restart once so the node list reflects your account.

Practical notes

  • Per-second pricing, so test short. Iterating on a 60-second monologue is over a dollar a pass. Write a 6-second line, get the portrait and the mood note right, then run the full script.
  • Audio shorter than the video is fine; longer sets the length. The clip runs as long as the audio does.
  • Long video means long teeth. Portrait animation works best on short, single-idea lines; run-on audio gives you a mouth that's technically in sync and a face that's stopped acting.
  • Mo-cap style artifacts - the mouth and jaw move; the hands, clothing and background don't. Better than a static frame, less than a performance.
  • Consent, again. A still photo plus a voice clip of a real person is a deepfake generator with extra steps. The node has no guard, so the guard is you.
CategorySpicyAPI/Video/Tools

Inputs (5)

NameTypeDefaultDescription
image_urlIMAGEPortrait of the person who will speak. One clearly visible face, looking roughly at the camera, works best.
audio_urlAUDIOSpeech that drives the lips, 3 to 60 seconds, MP3 or WAV. The video runs as long as this audio; files outside that range are rejected before any charge.
promptSTRINGOptional note on expression or mood, such as calm or cheerful. Identity and setting come from the portrait.
seedINT00–2147483647Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed.
mask_urloptIMAGEOptional black-and-white mask the same size as the portrait, white over the person who should speak. Only needed when the portrait shows several people.

Outputs (2)

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