SD3TwoStageDenoise
The 'just run SD3 RALU' node
- model
- conditioning
- latent
- noise_state
- negative_conditioning
- latent
- debug_info
If SD3LowResDenoise and SD3HighResDenoise are the microscope slides, this is the microscope: SD3TwoStageDenoise runs both stages of the SD3 RALU pipeline in a single node, with the latent handoff handled internally. You get the same low-res-then-high-res denoise - half-res coarse pass, upsample, Cholesky-correlated noise, full-res finish - without the two-node choreography.
The one thing worth understanding before you use it is the use_ralu_default toggle, because it silently decides which of your settings actually count.
The default-lock gotcha
Flip use_ralu_default to true (the default) and the node ignores your lowres_steps, highres_steps, and e_transition values and locks in the researched presets: N=[10, 20] steps and e1=0.35, with the Z=6.317 shared with FLUX RALU level 4. It's not being sneaky about it - the debug_info output literally reports your requested values next to the resolved ones, including a steps_locked_by_default flag. Turn use_ralu_default off and your explicit steps and transition are used instead.
Why does the lock exist? Because this pack is an export of experiments, and the experiments were tuned to those presets. If you're just trying SD3 RALU, leave it on. When you want to poke at the schedule - which is the whole point of a research pack - flip it off.
Inputs and outputs
latent+noise_state- empty SD3 latent andRALUNoiseSourceoutput, same as the two-node version.lowres_steps(10),highres_steps(20),e_transition(0.35) - only honored whenuse_ralu_defaultis off.downscale_factor- fixed at 2, don't touch it.cfg_scale(5.0) - SD3's CFG knob; real.end_sigma(0) - stop-denoising point for the high-res stage.negative_conditioning- optional, SD3 can use it.
Outputs: latent (decode with your SD3 VAE) and debug_info - this node's is the most verbose in the pack, showing resolved versus requested steps, the transition, and sub-reports from both stages. Read it once to see what the defaults actually did.
Installing
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/Milkyawaway/comfyui-ralu-sampling.git
cd /path/to/ComfyUI
python -m pip install opencv-python numpy typing-extensions
python main.py
ComfyUI Manager search "comfyui-ralu-sampling", restart. Model files as usual - sd3.5_large.safetensors plus its text encoders in the standard folders.
Common issues
- Changing steps and seeing no difference - that's the default-lock. Check
debug_info; ifsteps_locked_by_defaultis true, either that's the behavior you want or flipuse_ralu_defaultoff. - Grid artifacts - expected on this path; the author's README is upfront that the SD3 side is "a two-stage approximation" built to study SD3's regular latent-grid limitations. The FLUX side is the more faithful RALU implementation.
- No nodes in the palette - old ComfyUI; this pack registers via
comfy_api.latest, so update. - Family confusion - this node doesn't take a
familyinput; it's SD3-only by construction.
Bottom line: if you want to say "I ran SD3 with RALU sampling" without debugging a five-node graph, this is the node. Leave the defaults on, wire a prompt and an empty latent, and read the debug string if you're curious about what actually happened.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| conditioning | CONDITIONING | — | |
| latent | LATENT | — | |
| noise_state | NOISE | — | |
| lowres_steps | INT | 101–10000 | — |
| highres_steps | INT | 201–10000 | — |
| e_transition | FLOAT | 0.350.01–0.99 | — |
| downscale_factor | INT | 22–2 | — |
| cfg_scale | FLOAT | 5.000–100 | — |
| use_ralu_default | BOOLEAN | true | — |
| end_sigma | FLOAT | 0.000–1 | — |
| negative_conditioningopt | CONDITIONING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| debug_info | STRING | — |