Nodes/Comfyui-zhenzhen/Concurrent Submit | zhenzhen-bernini-r-video-fal
ComfyUI Node

Concurrent Submit | zhenzhen-bernini-r-video-fal

Submit 10 clips at once, collect them in order

By T8mars·Created about a year ago·Updated 2 days ago· 740
Concurrent Submit | zhenzhen-bernini-r-video-fal
  • video
  • reference_image1
  • reference_image2
  • reference_image3
  • reference_image4
  • reference_image5
  • task
promptA cinematic subtle motion shot.
modereference_to_video
video_url
reference_image_urls
api_key
negative_prompt
max_image_size848
num_frames81
frames_per_second16
num_inference_steps30
accelerationnone
aspect_ratio16:9
enable_prompt_expansionfalse
seed0
image_waybase64
video_wayupload
poll_interval6
max_poll_attempts600
skip_errorfalse

Video jobs are the worst thing to run one-at-a-time: a single Bernini clip can sit in the queue for minutes, and if you're iterating on five reference-to-video shots, the blocking version of this node means five sequential waits. This submit node fixes that by not waiting at all. It's the concurrent wrapper around zhenzhen-bernini-r-video-fal - same three modes (reference_to_video, edit_video, reference_edit_video), same fal-ai/bernini-r endpoints, but the job goes into the shared video pool and you get a task handle back instead of a finished clip.

The catch, and it's an important one: video concurrency here is 10, not 30. The pool is deliberately smaller because video jobs are long and expensive. So when the README brags about "30 concurrent," that's the image pool talking - video gets a tenth of that, and there's a reason.

How it works

Same auto-generated machinery as every concurrent node in the pack: the submit class is built from the base node's inputs at import time, wraps the real process() call in a bounded ThreadPoolExecutor, and returns a COMFLY_VIDEO_FUTURE. You collect those with ComflyConcurrent_Video_Await ("Concurrent Collect Videos (10)"), which waits for the whole batch and returns VIDEO tensors in slot order. The pool size is COMFLY_VIDEO_CONCURRENCY (default 10) in the environment.

The inputs mirror the base node exactly: mode, prompt, video/video_url, reference_image1-5, reference_image_urls, api_key, negative_prompt, max_image_size, num_frames (snapped to 4k+1 - use 5 for cheap smoke tests), frames_per_second, num_inference_steps, acceleration, aspect_ratio, seed (FAL max 65535), image_way, video_way, and the poll settings. Pick the mode, wire the references, feed the collector.

Installing it

One clone gets the whole pack:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen

Restart ComfyUI, or install "Comfyui-zhenzhen" via ComfyUI Manager. No model downloads - video renders on hosted Bernini through the Zhenzhen proxy.

Common issues

Pack-level: account + credit required, 443 errors need a VPN with TUN mode, and 500s are usually upstream - re-run. Video-specific: ten concurrent Bernini clips is ten simultaneous paid renders, and the meter ticks on frames, so a 121-frame batch at 4k is not a cheap experiment. Also remember Bernini output has no audio - that's a model property, not a bug in the concurrent wrapper. And if video submits sit in a queue while image submits race ahead, that's the two separate pools working as designed; video is just the slower lane.

Categoryzhenzhen/FAL/Concurrent Submit

Inputs (25)

NameTypeDefaultDescription
promptSTRINGA cinematic subtle motion shot.
modeoptCOMBOreference_to_video3 options: reference_to_video, edit_video, reference_edit_video
videooptVIDEO
video_urloptSTRING
reference_image1optIMAGE
reference_image2optIMAGE
reference_image3optIMAGE
reference_image4optIMAGE
reference_image5optIMAGE
reference_image_urlsoptSTRINGOptional reference image URLs, one per line. Up to 5 total.
api_keyoptSTRING
negative_promptoptSTRING
max_image_sizeoptINT848256–1280
num_framesoptINT815–121Snapped internally to 4k+1. Use 5 for lowest-cost smoke.
frames_per_secondoptINT164–30
num_inference_stepsoptINT301–50
accelerationoptCOMBOnone2 options: none, regular
aspect_ratiooptCOMBO16:9reference_to_video mode only.
enable_prompt_expansionoptBOOLEANfalse
seedoptINT00–655350 = random seed. FAL seed max is 65535.
image_wayoptCOMBObase642 options: base64, image_url
video_wayoptCOMBOupload2 options: upload, video_url
poll_intervaloptINT61–60
max_poll_attemptsoptINT60010–3600Default 600*6s = 3600s timeout.
skip_erroroptBOOLEANfalse

Outputs (1)

NameTypeDescription
taskCOMFLY_VIDEO_FUTURE