Data Parallel Latent List
A different starting latent for every GPU
- latent_0
- latent_1
- latent_2
- latent_3
- latent_4
- latent_5
- latent_6
- latent_7
- LATENT
Data Parallel mode is at its most fun when the input differs per GPU, not just the seed. DPLatentList is the node that lets you hand each GPU its own starting latent, which matters the moment you're doing image-to-video or img2img and want one run to produce N variations from N different source images.
It's a dumb little node - and I mean that as a compliment. Eight LATENT inputs, one output.
The inputs that matter. latent_0 is required - that's your baseline. latent_1 through latent_7 are optional, each tooltipped "Latent for GPU N." Same backfill behavior as the rest of this family: any empty slot silently inherits latent_0. So on a 2-GPU box you fill latent_0 and latent_1, wire the output to DPKSamplerAdvanced's latent_image, and each GPU starts from its own image. Leave the rest empty; they're just copies of slot 0 that never get used.
The output is a single LATENT list, and it plugs straight into the sampler's latent_image input. That's the entire contract.
When you'd reach for it. The classic case is video: you've got four reference clips you want to animate with the same prompt and the same sampler settings, and you'd rather fire them all at once than queue four jobs. Encode each source to a latent (the usual VAE encode), drop them into slots 0–3, run. You also get it nearly for free as a side effect of the DP sampler's list-based design, so if DPConditioningList gives you per-GPU prompts and DPNoiseList gives you per-GPU seeds, this closes the triangle for per-GPU starting points.
One honest caveat: this node is only useful in DP mode, which means your RayInitializer needs Ulysses and Ring degrees at 0, and each GPU still needs to hold the full model plus a full-sequence latent. It's a throughput tool, not a VRAM-saver. If you're actually trying to fit a model that OOMs on one card, DP isn't the mode you want anyway - that's FSDP's job, and this node won't help there.
Install. It ships in the Raylight pack, so one install covers it:
cd ComfyUI/custom_nodes
git clone https://github.com/komikndr/raylight
cd raylight
pip install -r requirements.txt
or ComfyUI Manager → search "raylight" → Install, then restart. No separate model downloads for this node - the pack's xfuser dependency is the big install, and Windows users should expect to run under WSL2.
If you're coming from a normal batch-oriented workflow, this is just your "batch of latents, but with intent." Nothing clever under the hood, nothing that'll surprise you - unless you forget that empty slots copy slot 0, and you spend ten minutes wondering why every GPU is animating the same image.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_0 | LATENT | Latent for GPU 0 | |
| latent_1opt | LATENT | Latent for GPU 1 | |
| latent_2opt | LATENT | Latent for GPU 2 | |
| latent_3opt | LATENT | Latent for GPU 3 | |
| latent_4opt | LATENT | Latent for GPU 4 | |
| latent_5opt | LATENT | Latent for GPU 5 | |
| latent_6opt | LATENT | Latent for GPU 6 | |
| latent_7opt | LATENT | Latent for GPU 7 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |