Concurrent Submit | zhenzhen-veed-fabric-1.0-fal
Talking-avatar video from one image and one audio file
- image
- audio
- task
This node wraps VEED's Fabric 1.0 - a talking-avatar service. You give it a person's image and an audio track, and it produces a video of that person "speaking" the audio, with lip-sync and head movement. It's the same trick as HeyGen's avatars, and it's the kind of thing that's awkward to do locally but trivial as a paid API call: upload a photo, upload a voice file, get a video. Inside ComfyUI it means you can build a graph where an image and a TTS node's audio feed straight into a talking-head video.
The concurrent wrapper is the standard Zhenzhen Submit pattern, and here it's video-pooled (ten workers). Each Submit returns a task; you collect them in Concurrent Collect Videos (ComflyConcurrent_Video_Await), which waits on all of them and restores slot order.
Inputs that matter
The required pair is the whole trick:
- image_url - a public URL to the face/avatar image. Required in the schema, but the optional image socket is there too: if you connect an image directly it gets uploaded and used instead.
- audio_url - a public URL to the speech audio. Same deal: the optional audio socket lets you connect ComfyUI audio (say, from a TTS node) and the node uploads it.
- resolution -
480por720p. - api_key, image_way (
base64/image_url), audio_way (upload/audio_url), poll_interval, max_poll_attempts, seed, skip_error - the standard fal-node set.
The audio_way and image_way dropdowns decide how your input travels: connect real tensors and leave them at upload/base64, or paste hosted URLs and switch to the URL modes.
How it works
Like the rest of the fal nodes, the original Comfly_veed_fabric_1_0_fal submits a job to fal's queue API (VEED Fabric 1.0 runs there) and polls until the video is rendered, then hands back a ComfyVideoAdapter. The concurrent wrapper skips straight to "submit": validate, push onto the bounded video executor (ten workers), return the COMFLY_VIDEO_FUTURE immediately. The collector does the waiting. Set its failure_mode to placeholder if you'd rather have a failed avatar render as a blank clip than abort the whole batch.
Setup
Install the pack once - ComfyUI Manager (search "Comfyui-zhenzhen"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
No models, no VRAM, no weights. You need a paid Zhenzhen key from ai.t8star.org (overseas) or api.seedance.nz (domestic). The fal channel pre-deducts credits on submit and settles after, so the cost hits your account before the video lands.
Gotchas
The quality ceiling is real: Fabric 1.0 is a solid avatar pipeline, but it's not deepfake-level - expect a working lip-sync, not a perfect twin, and feed it a clean frontal face photo. If nothing renders, the usual suspects are an audio URL the server can't fetch, an expired image URL, or a face that the detector simply won't pick out of a busy frame. And because both your inputs leave the machine and hit fal's servers, don't send anything here you'd be embarrassed to have processed off-site - the avatar-resale space has a checkered privacy history, and you're renting someone's GPU either way.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | STRING | — | |
| audio_url | STRING | — | |
| imageopt | IMAGE | — | |
| audioopt | AUDIO | — | |
| api_keyopt | STRING | — | |
| resolutionopt | COMBO | 480p | 2 options: 480p, 720p |
| 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 | — |