Nodes/ComfyUI Seedance/并发提交|Vidu Q4 Preview 图生/参考视频(4 合 1)
ComfyUI Node

并发提交|Vidu Q4 Preview 图生/参考视频(4 合 1)

Ten Vidu Q4 clips in one queue — batching preview models without burning credits

By T8mars·Created 4 months ago·Updated 3 days ago· 43
并发提交|Vidu Q4 Preview 图生/参考视频(4 合 1)
  • image1
  • image2
  • image3
  • image4
  • image5
  • image6
  • image7
  • image8
  • image9
  • image10
  • image11
  • image12
  • image13
  • image14
  • image15
  • audio1
  • audio2
  • audio3
  • api_config
  • future
◄modelvidu-q4-preview-i2v►
◄prompt►
◄seconds5►
◄resolution720p►
◄ratio16:9►
◄generate_audiotrue►
◄is_rectrue►
◄watermarkfalse►
◄audio_url1►
◄audio_url2►
◄audio_url3►
◄skip_errorfalse►
◄seed0►

Video generation is where a fan-out stops being a luxury. A Vidu Q4 clip takes minutes, not seconds, and if you're rendering six shots for a sequence you do not want to watch them happen one at a time. This node is Vidu_Q4_Preview_Video with a future output: same model dropdown, same seconds/resolution/ratio/generate_audio/is_rec/watermark controls, same fifteen image slots and three audio inputs - it just enqueues and returns instead of sitting there.

Why batch this specific node

Because the four Q4 variants are slow and expensive, and a batch lets you do the sensible thing: run the whole set cheap first. Six branches at 3 seconds and 540p tells you which prompts produce motion you like. Then re-run the two that worked at 1080p and a real duration. Sequential execution makes that loop painful enough that people skip it and pay for the expensive version of a prompt that was never going to work.

The receiver side is 并发接收视频(10 路): ten future inputs, ten video outputs, plus status_json. The pack's video pool defaults to 10 workers, so slots and threads line up - dial it with SEEDANCE_VIDEO_CONCURRENCY (1 to 10) if you'd rather not have ten renders in flight.

export SEEDANCE_VIDEO_CONCURRENCY=4   # restart ComfyUI after changing it

One receiver for a mixed batch, incidentally. The receiver is generic over video futures, so you can wire a Vidu generation into future_1, a Topaz upscale of yesterday's clip into future_2, and get video_1 and video_2 out in order. Results are re-ordered by slot, not by completion time, so a fast clip can't shuffle your outputs.

Preflight is where you learn things

The wrapper runs the base node's validation synchronously before enqueuing, and this node's validation is unusually picky - which is a feature at batch scale. In particular:

  • An R2V model with an empty prompt fails immediately. Good. That's a remote job you didn't pay for.
  • I2V requires exactly one image. Two images in I2V mode is an error, not a coin flip.
  • Same for R2V with zero images.
  • An audio slot with both a local audio1 connection and an audio_url1 string fails, per slot.
  • A malformed audio_url (anything that isn't HTTP or HTTPS) fails before anything is uploaded.

Ninety percent of your batch debugging happens in milliseconds, locally, with a message that names the input. That's genuinely better than the "one node in a chain of thirty went wrong somewhere" experience you get from most API packs.

Audio across a batch

generate_audio is per branch, and that's a nicer setup than it sounds. Branches 1–6 with audio on to see what the model invents, branches 7–10 with it off if you're scoring the sequence yourself with audio1/audio2/audio3 - the local AUDIO inputs get encoded to MP3 and uploaded automatically, so you can wire an audio file from the same graph without leaving ComfyUI.

Keep in mind that a ten-branch R2V sweep with reference audio is ten uploads per audio slot. It'll work; it just won't be instant, and rate limiting during the upload phase is the slowest part of a big batch.

failure_mode, and why it matters more for video

raise stops the run and names the slot. placeholder keeps the nine clips that worked, puts a placeholder video in the slot that didn't, and writes a redacted per-slot status into status_json. On a ten-wide video sweep, placeholder is usually the correct choice - a single upstream hiccup on slot 7 shouldn't cost you nine renders you've already paid for. Branch-level skip_error composes with both.

And note what "preview" means for a batch: if the provider's endpoint starts 502-ing at submit time, it does it for all ten. The pack's own changelog has a chapter on exactly that with Vidu Q3. Build the sweep, but test with one branch first.

Install

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

ComfyUI Manager: search ComfyUI Seedance, install, restart. One dependency, requests>=2.28, and the receiver node ships in the same pack. Load examples/并发视频2路最小验证.json first if you've never wired a submit/receive pair - it's two branches and it makes the pattern obvious. Each submit node still needs a key: its own api_config connection, or SEEDANCE_API_KEY in the environment, or config/.env.

Last thing, and it's the one that matters: ten slots means ten billed renders, several of them minutes long. The 2-way example exists for a reason. Draft the whole batch at 540p, then spend real money on the two branches that deserve it.

CategorySeedance/并发提交

Inputs (32)

NameTypeDefaultDescription
modelCOMBOvidu-q4-preview-i2v4 options: vidu-q4-preview-i2v, vidu-q4-preview-r2v, vidu-q4-preview-global-i2v, vidu-q4-preview-global-r2v
promptSTRINGRequired for R2V; optional for I2V | 参考生视频必填,图生视频可留空
secondsCOMBO514 options: 3, 4, 5, 6, 7, 8, +8
resolutionCOMBO720p5 options: 540p, 720p, 1080p, 2k, 4k
ratioCOMBO16:9R2V only | 仅参考生视频生效
generate_audioBOOLEANtrue—
is_recBOOLEANtrue—
watermarkBOOLEANfalse—
audio_url1STRINGPublic MP3 URL or connect audio | MP3 直链或连接音频
audio_url2STRINGPublic MP3 URL or connect audio | MP3 直链或连接音频
audio_url3STRINGPublic MP3 URL or connect audio | MP3 直链或连接音频
image1optIMAGEReference 1/15 | 参考图 1/15
image2optIMAGEReference 2/15 | 参考图 2/15
image3optIMAGEReference 3/15 | 参考图 3/15
image4optIMAGEReference 4/15 | 参考图 4/15
image5optIMAGEReference 5/15 | 参考图 5/15
image6optIMAGEReference 6/15 | 参考图 6/15
image7optIMAGEReference 7/15 | 参考图 7/15
image8optIMAGEReference 8/15 | 参考图 8/15
image9optIMAGEReference 9/15 | 参考图 9/15
image10optIMAGEReference 10/15 | 参考图 10/15
image11optIMAGEReference 11/15 | 参考图 11/15
image12optIMAGEReference 12/15 | 参考图 12/15
image13optIMAGEReference 13/15 | 参考图 13/15
image14optIMAGEReference 14/15 | 参考图 14/15
image15optIMAGEReference 15/15 | 参考图 15/15
audio1optAUDIOR2V audio 1/3; encoded as MP3 | 参考音频 1/3,自动转为 MP3
audio2optAUDIOR2V audio 2/3; encoded as MP3 | 参考音频 2/3,自动转为 MP3
audio3optAUDIOR2V audio 3/3; encoded as MP3 | 参考音频 3/3,自动转为 MP3
api_configoptSEEDANCE_CONFIG—
skip_erroroptBOOLEANfalse—
seedoptINT00–18446744073709550000ComfyUI cache seed. Fixed reuses the cached result while all other inputs stay unchanged; randomize/increment/decrement starts a new execution. This value is not sent to models without documented seed support. | ComfyUI 缓存种子;Fixed 在其他输入不变时复用缓存,随机、递增或递减会触发新任务。未声明支持 seed 的模型不会收到此参数。

Outputs (1)

NameTypeDescription
futureSEEDANCE_VIDEO_FUTURE—