🐧 DualSamplerDPMPP_SDE
Two model evals per step, two noise knobs, one DiT call — the H3 dual sampler
- DUAL_SAMPLER
If you found this node, you're almost certainly building a MiniMax H3 workflow - the open-weight model that generates video and native stereo audio from one latent. That "one latent" is the catch. H3 packs picture and sound into a single tensor, so a stock sampler has to treat them with the same noise settings. This node exists to break that coupling: it runs DPM-Solver++ stochastic on the video stream and the audio stream separately, with its own eta and s_noise for each, while still stepping both through a single model forward pass. The description is honest about the price: two model evaluations per step.
The name does overpromise a little. This node doesn't sample anything by itself - it builds a DUAL_SAMPLER config and hands it to DualSamplerCustomAdvanced (same pack), the node that actually takes the packed latent, the video sigmas, the audio sigmas, the noise, and the guider. Think of it as the sampler-selection dropdown on a diet.
How it works
DPM-Solver++ SDE takes each step in two halves: a solve to a midpoint, then another solve from there. That's where the two model evals come from. On top of the solve, each substep re-injects noise - that's what eta (how much of the step is taken stochastically; 0 makes it fully deterministic) and s_noise (scales the injected noise) control. This pack gives each stream its own copies of both knobs, and the driver pairs the two streams' requests into one DiT call, so the audio can run a completely different sigma schedule than the video without extra forward passes.
The inputs that matter
eta_video/eta_audio- how much of each stream's step is stochastic. 0 turns that stream into a plain deterministic solve.s_noise_video/s_noise_audio- scales the noise added to each stream.noise_device- where each stream's Brownian path is generated.cpukeeps a run reproducible across GPUs;gpubuilds it on the accelerator instead, which is faster but ties your results to your hardware.
That's the whole interface. Output is a single DUAL_SAMPLER wired into DualSamplerCustomAdvanced. It's its own socket type, so you can't accidentally plug a stock SAMPLER in - the error would be yours to find anyway.
Install
ComfyUI Manager → search "ComfyUI-SuperNodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/sonnybox/ComfyUI-SuperNodes
then restart ComfyUI. The only real dependency is matplotlib. No model downloads, nothing to babysit. The pack is by "SuperCC", and the sampling folder makes its focus obvious: DualSamplerEulerAncestral is the cheaper twin, and the scheduling section ships SigmaAncestry for exactly the eta tuning you'll now be doing in stereo.
Where people get burned
The node refuses to run rather than silently corrupting, and the errors are unusually good at telling you why:
- "The dual sampler only supports rectified flow (CONST) models" - H3 is a flow model; you're on the wrong checkpoint if you see this.
- The timestep-multiplier error means the guider's model isn't patched correctly. Use
ModelSamplingMiniMaxH3orModelSamplingSD3on the guider, and keepModelSamplingAuraFlowoff that branch (it belongs on a separate one feeding BasicScheduler). - Both schedules must have the same number of steps, and you can't start one stream at sigma 1.0 while the other sits below it - the model's mapping fixes 1.0. Use
0.9999for the first sigma of whichever stream is starting high. - An all-zero schedule freezes that stream, meaning "leave it alone, it's already x0." Freeze both and it raises on principle.
If the audio sounds wrong on a first pass, the first lever to pull is eta_audio → 0. Deterministic audio with stochastic video is a perfectly reasonable place to start, and it isolates which stream is actually the problem.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| eta_video | FLOAT | 1.000–100 | How much of the video stream's step is taken stochastically. 0 makes the step deterministic. |
| eta_audio | FLOAT | 1.000–100 | How much of the audio stream's step is taken stochastically. 0 makes the step deterministic. |
| s_noise_video | FLOAT | 1.000–100 | Scales the noise added to the video stream. |
| s_noise_audio | FLOAT | 1.000–100 | Scales the noise added to the audio stream. |
| noise_device | COMBO | Where each stream's Brownian path is generated. cpu keeps a run reproducible across GPUs. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| DUAL_SAMPLER | DUAL_SAMPLER | Sampler for DualSamplerCustomAdvanced. |