Nodes/Comfyui-zhenzhen/Concurrent Submit | Zhenzhen_sora2
ComfyUI Node

Concurrent Submit | Zhenzhen_sora2

Fire off 10 Sora 2 jobs at once without freezing your graph

By T8mars·Created about a year ago·Updated 2 days ago· 740
Concurrent Submit | Zhenzhen_sora2
  • image1
  • image2
  • image3
  • image4
  • task
prompt
modelsora-2
aspect_ratio16:9
duration15
hdfalse
apikey
seed0
privatetrue
skip_errorfalse

OpenAI's Sora 2 is a cloud-only model - no weights, no local copy, nothing to download. The only way to get it into a ComfyUI graph is an API-wrapper node, and the original Comfly_sora2 did exactly that: you typed a prompt, it blocked for five to twenty minutes, then handed back a video. Fine for one clip. Painful when you want to seed variations, compare two models, or pick the best of five takes.

This node is the fix for that specific pain. It's the same Sora 2 node, rebuilt as a submit node. It takes all the same inputs but doesn't wait for the video - it drops the job into the pack's shared video pool and immediately returns a task you can collect later. The "10" in the description is the pool size: the pack runs up to ten video jobs concurrently, so you can queue a whole batch of Sora 2 generations and let them churn in parallel instead of one after another.

How the concurrent trick works

The pack's ComflyConcurrent.py auto-generates one of these wrappers for every eligible Zhenzhen video node. Under the hood it's a bounded ThreadPoolExecutor - ten workers for video, thirty for images - with a semaphore so an over-queued graph doesn't explode. Each Submit node validates your inputs, fires the real Sora 2 call into the pool, and returns a COMFLY_VIDEO_FUTURE task object. Nothing has generated anything yet; you've just queued it.

Then you wire the task into the pack's Concurrent Collect Videos node (ComflyConcurrent_Video_Await). It has ten task_N sockets, waits for every task you connect, restores the order you plugged them in, and outputs video_1 through video_10 plus a status string. Leave a socket empty and it gets a not_connected placeholder - no error. Set its failure_mode to placeholder and a failed slot returns a blank video instead of killing the run. One subtle thing: the collect node returns NaN from its IS_CHANGED hook, so it always re-runs and waits for fresh results every execution.

The inputs that actually matter

The task output is the whole game, but the inputs are the Sora 2 controls from the original node:

  • model - sora-2 (cheap, ~0.1 credits, occasional watermark), sora-2-pro (no watermark, HD-capable, pricier), sora-2-vip (the stable premium group).
  • duration - 10, 15, or 25 seconds. Heed the pack's warning: 25s can't be combined with HD, and 25s runs are genuinely slow - the changelog says up to half an hour.
  • hd - boost to HD where the model supports it. Off by default for a reason.
  • prompt - the usual Sora 2 text prompt.
  • image1–image4 - optional reference images for image-to-video. The original node supports up to four.
  • apikey - paste your Zhenzhen key here, or leave it and use the pack's Zhenzhen API Settings node.

There's also skip_error. Leave it off; when it's on, a failed job returns a default empty result instead of raising, which hides exactly the error you need to see.

Installing and getting a key

This is part of Comfyui-zhenzhen, so install the pack once:

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

Then restart ComfyUI. Or use ComfyUI Manager and search "Comfyui-zhenzhen". There are no model files to fetch - everything runs in the cloud - and the requirements are the usual suspects (requests, aiohttp, Pillow, numpy, opencv-python, openai). You need a paid key from the author's site: ai.t8star.org for the overseas service or api.seedance.nz for the domestic one. Every video costs site credits, so check the model price before batch-queueing twenty of them.

Gotchas

Sora 2's upstream is flaky and it's rarely your fault. The README is blunt: a 500 error is usually OpenAI's problem, so just rerun. A timeout is also not the same as failure - the job can finish server-side after the node gives up, so check your account's async task page and download the MP4 from there. The overseas endpoint sits behind a server that needs a working proxy from many regions; if you get 443 connection errors, that's the network, not the node. And remember the pool: ten concurrent video jobs max, so if your queue feels stuck, you're probably bumping against the cap.

Categoryzhenzhen/Openai/Concurrent Submit

Inputs (13)

NameTypeDefaultDescription
promptSTRING
modelCOMBOsora-23 options: sora-2, sora-2-pro, sora-2-vip
aspect_ratioCOMBO16:92 options: 16:9, 9:16
durationCOMBO153 options: 10, 15, 25
hdBOOLEANfalse
apikeySTRING
image1optIMAGE
image2optIMAGE
image3optIMAGE
image4optIMAGE
seedoptINT00–2147483647
privateoptBOOLEANtrue
skip_erroroptBOOLEANfalse开启后,节点失败时不报错、按旧行为返回默认空结果;关闭时(默认)失败直接抛出错误。

Outputs (1)

NameTypeDescription
taskCOMFLY_VIDEO_FUTURE