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 3 days ago· 749
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—