Concurrent Submit | zhenzhen-sora2-fal
Sora 2 through fal, with character IDs and 4-second clips
- image
- task
Every Sora 2 node in Comfyui-zhenzhen wraps the same model, but the routes differ - and this one goes through fal.ai. That matters for two reasons. First, it unlocks Sora 2 clips as short as 4 seconds and as long as 20, which the other nodes' fixed 10/15/25 options don't offer. Second, fal's queue API is the stable, independently-hosted path - the author's changelog treats the fal Sora 2 node as the dependable lane when the main OpenAI groups are melting down.
The concurrent wrapper is the same pattern as all the other Submit nodes: it doesn't block. It validates your inputs, pushes the generation onto the pack's shared video pool (ten workers), and hands back a task. That task goes into the Concurrent Collect Videos node, and out comes your finished clip in its numbered slot.
Inputs worth your attention
- mode -
auto(default),text_to_video, orimage_to_video. Auto decides based on whether you gave it an image. The tooltip spells out the logic: image or image_url present → image-to-video, otherwise text-to-video. - image / image_url - the reference for image-to-video. Give it a connected image, or a public URL. If an image is connected, the URL is ignored.
- character_ids - the interesting one. Sora 2 supports up to two persistent characters, comma- or newline-separated. These are the
@username-style characters you can create once and reuse, which is a genuinely useful feature if you want a consistent face across clips. - model -
sora-2, plus the dated snapshotssora-2-2025-12-08andsora-2-2025-10-06. Pin one if you need reproducibility. - duration - 4 through 20 seconds, in 4s steps.
- aspect_ratio -
auto,16:9,9:16. Text-to-videoautois sent as 16:9; image-to-videoautofollows the image. - resolution -
autoor720p. - image_way -
base64(default) orimage_url, for how your reference is transmitted. - poll_interval / max_poll_attempts - how hard it polls fal for the result; the defaults (6s × 600) give a 3600s ceiling.
Then the usual api_key, seed, skip_error. Note the fal nodes take api_key, not apikey - the naming is inconsistent across the pack, so don't trip on it.
How it works
Under ComflyConcurrent.py's wrapper, the original Comfly_sora2_fal class submits a job to fal's queue endpoint and polls it until done. The wrapper itself is simpler: validate → hand the call to the bounded executor → return a COMFLY_VIDEO_FUTURE task immediately. The collector waits on all tasks, keeps your slot order, and reports per-slot status. Set its failure_mode to placeholder if you want failed jobs to return a blank clip instead of failing the run.
Setup
The pack installs once for all of it - ComfyUI Manager (search "Comfyui-zhenzhen"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
No models to fetch. You need a paid Zhenzhen key - ai.t8star.org overseas, api.seedance.nz domestic - and the fal route uses pre-deduction billing: fal charges a base amount when you submit and settles up when the job finishes, so don't be startled if credits move before the video appears.
The usual Sora 2 caveats
500s are frequently OpenAI's load, not your config - rerun. Timeouts don't always mean failure; the fal job can finish after the node gave up, so check the async task page in your account for the MP4. The overseas endpoint needs a reachable proxy from many regions (443 errors = network, not node). And since this shares the ten-worker video pool, an already-busy queue just means your jobs wait in line - which, with the whole point being concurrency, is usually exactly what you want.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| modeopt | COMBO | auto | auto: image/image_url -> image-to-video, otherwise text-to-video. |
| imageopt | IMAGE | — | |
| image_urlopt | STRING | Optional public image URL for image-to-video. If image is connected, this is ignored. | |
| api_keyopt | STRING | — | |
| modelopt | COMBO | sora-2 | 3 options: sora-2, sora-2-2025-12-08, sora-2-2025-10-06 |
| durationopt | COMBO | 4 | 5 options: 4, 8, 12, 16, 20 |
| aspect_ratioopt | COMBO | 16:9 | auto is only available for image-to-video; text-to-video auto is sent as 16:9. |
| resolutionopt | COMBO | 720p | text-to-video auto is sent as 720p. |
| delete_videoopt | BOOLEAN | true | — |
| detect_and_block_ipopt | BOOLEAN | false | — |
| character_idsopt | STRING | Optional character IDs, up to 2, separated by comma or newline. | |
| image_wayopt | COMBO | base64 | 2 options: image_url, base64 |
| poll_intervalopt | INT | 62–30 | — |
| 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 | — |