Concurrent Submit | zhenzhen-heygen-avatar4-i2v-fal
Talking-head video from a single photo, HeyGen Avatar 4, batched
- image
- audio
- task
This is the node that turns a still photo into a talking-head video. It wraps zhenzhen-heygen-avatar4-i2v-fal, the HeyGen Avatar 4 image-to-video endpoint on FAL: you feed a face, the node animates it speaking your prompt. The default prompt is just "Hi." - the endpoint's party trick is lip-synced speech from a single portrait, which is a whole category of work that local models still struggle with.
It's a concurrent submit node, so you can fire ten of these at once in the shared video pool. That's the use case: batch-test voices, compare talking styles, or animate the same photo across a dozen lines of dialogue and pick the reads you like.
How the wrapper works
The plain Comfly_heygen_avatar4_i2v_fal node is a FAL-queue client: it hits HeyGen's Avatar 4 endpoint through Zhenzhen's FAL proxy, and it's smart about options - the voice dropdown is actually loaded from HeyGen's live OpenAPI schema at runtime, with a fallback list if the fetch fails. The Submit wrapper keeps every input but returns a single task of type COMFLY_VIDEO_FUTURE, deferring the call to the video worker pool (default 10, COMFLY_VIDEO_CONCURRENCY env var).
The task output must flow into ComflyConcurrent_Video_Await, which waits for all connected tasks and returns video_1 … video_10 in order plus a status JSON. failure_mode (fail_fast / placeholder) controls whether one bad job aborts the batch or blanks the slot.
Inputs that matter
prompt is required - it's what the avatar says, not a scene description. image is the face (or image_url if you have a public URL). The audio path splits in two: connect audio (an AUDIO tensor) or audio_url to drive the exact audio you want, or leave both empty and pick a voice from the dropdown (104 options, or type into custom_voice to override). If audio is provided, voice is ignored - the tooltip says so explicitly.
talking_style (stable / expressive) and expression (none / happy) steer the performance. background_type (none/color/image/video) plus background_value (a hex like #FFFFFF, or a URL for image/video backgrounds) swap the backdrop. resolution goes 360p–1080p, aspect_ratio offers 16:9/9:16/4:5/5:4/1:1/auto. caption adds burned-in subtitles. image_way and audio_way pick upload vs URL transport for each.
Install and gotchas
Pack install as always: ComfyUI Manager → search Comfyui-zhenzhen, or git clone https://github.com/T8mars/Comfyui-zhenzhen into ComfyUI/custom_nodes, restart. No local models.
FAL billing here is the hold-then-settle model (预扣制): a deposit is taken at submit and the real price lands after the render. The live-loaded voice catalog is a real feature - but it only loads if the node can reach HeyGen's schema, so in a firewall-happy environment you'll see the fallback list instead. Timeouts after a long render usually mean the video finished and the poll expired; check the site's task page before re-running. And HeyGen's avatar pipeline is sensitive to the source photo - a well-lit front-facing portrait will give you far better results than a side-angle crop, no matter what the node settings say.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Hi. | — |
| imageopt | IMAGE | — | |
| image_urlopt | STRING | — | |
| api_keyopt | STRING | — | |
| audioopt | AUDIO | — | |
| audio_urlopt | STRING | — | |
| voiceopt | COMBO | server_default | server_default leaves voice unset and lets FAL use its default. Ignored when audio is provided. |
| custom_voiceopt | STRING | Overrides voice dropdown when filled. | |
| talking_styleopt | COMBO | stable | 2 options: stable, expressive |
| expressionopt | COMBO | none | 2 options: none, happy |
| background_typeopt | COMBO | none | 4 options: none, color, image, video |
| background_valueopt | STRING | #FFFFFF | Hex color for color background, or URL for image/video background. |
| resolutionopt | COMBO | 720p | 5 options: 360p, 480p, 540p, 720p, 1080p |
| aspect_ratioopt | COMBO | 16:9 | 6 options: 16:9, 9:16, 4:5, 5:4, 1:1, auto |
| captionopt | BOOLEAN | false | — |
| image_wayopt | COMBO | base64 | 2 options: base64, image_url |
| audio_wayopt | COMBO | upload | 2 options: upload, audio_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
| seedopt | INT | 00–18446744073709550000 | Execution seed for ComfyUI cache control. Fixed reuses the cached result; randomize/increment/decrement requests a new run. This compatibility seed is not sent to APIs that do not expose a native seed parameter. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| task | COMFLY_VIDEO_FUTURE | — |