并发接收视频(10 路)
The node that waits on 10 video generations so you don't have to
- future_1
- future_2
- future_3
- future_4
- future_5
- future_6
- future_7
- future_8
- future_9
- future_10
- video_1
- video_2
- video_3
- video_4
- video_5
- video_6
- video_7
- video_8
- video_9
- video_10
- status_json
This is the receiving end of the ComfyUI_Seedance concurrency system. If you've only used the single Seedance 文生视频-style nodes, you've never needed it. But the moment you stack several video jobs in one workflow - three Seedance clips, two Hailuo, a Kling edit, whatever - you want this node, because it's what lets all of them run at the same time and land in the graph together.
Here's the mental model, because it's the thing people get backwards. The 并发提交|... nodes don't generate video synchronously like a normal Comfy node does. They kick the job off in the background and hand you a little handle - typed SEEDANCE_VIDEO_FUTURE - that represents "a video is being made, I'll have the result later." This node is the other half: you wire one to ten of those handles into its slots, and it sits there waiting on all of them in parallel, then hands you the finished videos in slot order.
Why bother? Because video generation takes minutes and costs per call. Without this pattern you either run jobs one after another (serial, slow, and it multiplies your wall-clock time) or you run a whole bunch of separate single nodes and try to time them yourself. This collect-then-output design is the clean way to fire a batch and get a batch.
The inputs that matter
future_1is required,future_2throughfuture_10are optional. Connect any mix of并发提交|video nodes - the slots are typed to video futures, but not to a specific model, soSeedance 2.5on slot 1 andVidu Q3on slot 4 is fine. The README is explicit about this: the receiver is generic by design.failure_mode-raise(default) stops the workflow and points at the offending slot the moment any job fails;placeholderswaps the failed slot for a placeholder error video and keeps the survivors. Pickplaceholderif you're batch-testing and don't want one bad prompt to kill ten jobs.
Each connected slot gets a matching output: video_1 through video_10 (real ComfyUI VIDEO values you can feed straight into SaveVideo or a preview node), plus one status_json string that summarizes connected/completed/failed per slot with secrets scrubbed.
A note on seeds: each submit node carries its own cache seed. Set those to fixed and the whole pipeline reuses cached results until an input changes; leave them randomize and every run fires fresh jobs. The receiver itself always runs (its IS_CHANGED forces a re-execution), which is what you want - it needs to actually wait.
Installing it
This node ships inside ComfyUI_Seedance, so you install the pack once and get all of its nodes:
# ComfyUI Manager: search "ComfyUI Seedance" (or just "seedance"), install, restart.
# Or via the Comfy CLI:
comfy node install seedance
# Or manual:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/ComfyUI_Seedance.git
cd ../.. && python -m pip install -r custom_nodes/ComfyUI_Seedance/requirements.txt
The only real dependency is requests - no model weights to download, since everything runs on the upstream API. You'll still need an API key from the provider's console, wired in via the Seedance API Config node, the SEEDANCE_API_KEY env var, or config/.env.
Troubleshooting
- "Concurrent video slot 3 failed" - the job really did fail (bad prompt, expired asset, upstream hiccup). Check
status_jsonfor the slot's error with the URL/task-ID fields redacted, and note that one slot failing is not a workflow bug. - Placeholder video showing up with
skip_erroron - that's the feature working. The submit node returned a placeholder because its job failed, and the receiver respects it. - Unconnected slots output placeholder videos too - normal; it's so batch output stays slot-aligned.
Nobody's out there writing long r/comfyui threads about this pack specifically - it's a Chinese-first gateway pack, so English discussion is thin. The pattern itself (fire N cloud jobs, collect by slot) is standard for API-wrapper workflows, which is exactly the category the KB calls "API nodes" - convenient, metered per call, and worth remembering your prompt and reference video go to a server you don't control.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| future_1 | SEEDANCE_VIDEO_FUTURE | — | |
| failure_mode | COMBO | raise | 2 options: raise, placeholder |
| future_2opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_3opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_4opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_5opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_6opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_7opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_8opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_9opt | SEEDANCE_VIDEO_FUTURE | — | |
| future_10opt | SEEDANCE_VIDEO_FUTURE | — |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| video_1 | VIDEO | — |
| video_2 | VIDEO | — |
| video_3 | VIDEO | — |
| video_4 | VIDEO | — |
| video_5 | VIDEO | — |
| video_6 | VIDEO | — |
| video_7 | VIDEO | — |
| video_8 | VIDEO | — |
| video_9 | VIDEO | — |
| video_10 | VIDEO | — |
| status_json | STRING | — |