SD3HighResDenoise
The upsample-and-fix pass
- model
- conditioning
- latent
- negative_conditioning
- latent
- debug_info
SD3HighResDenoise is the second half of the pack's two-stage SD3 RALU pipeline, and it's where the resolution actually gets created. The low-res node did the cheap coarse denoising; this node upscales, re-injects noise the RALU way, and finishes the job at full resolution. It's also the node that will yell at you if you wire it up wrong - more on that in a second.
What it does
From the runtime source, the flow is: take the latent handed over from SD3LowResDenoise, nearest-upsample it 2×, inject Cholesky-correlated noise (the RALU signature - block-correlated noise so the new high-res detail is built on top of the low-res structure instead of destroying it), then run a shift-aware denoise pass using stage two of the schedule.
The vae-based token scoring from the FLUX path doesn't apply here - SD3's approach is the plain two-stage approximation, no selective upsampling. It's simpler by design.
Inputs and outputs
latent- must come fromSD3LowResDenoise. This is the hard requirement: the low-res node embeds the RALU parameters (ralu_sd3_*keys) in the latent's metadata, and this node reads them. Skip the low-res node and it raises "missing RALU params."highres_steps(default 20) - denoise steps for this stage.cfg_scale(default 5.0) - SD3's CFG works, so this is a real quality knob.end_sigma(default 0) - where to stop denoising, as a fraction from 1 (noise) to 0 (clean). Default runs all the way to clean; a small value above 0 leaves the result slightly noisy, which some folks like before a final upscale pass.negative_conditioning(optional) - SD3 can use it, unlike FLUX.
Outputs: latent (this one is the real output - decode it with your SD3 VAE) and debug_info, a JSON string confirming the upsample + Cholesky noise + denoise sequence ran.
Installing
Same pack as the rest:
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. Needs sd3.5_large.safetensors and encoders in standard folders.
Common issues
- "SD3HighResDenoise: missing RALU params" - the most common failure and the easiest to understand: the latent you fed it doesn't carry the RALU metadata. It happens when you plug in a fresh
EmptySD3LatentImageor a latent that passed through other nodes. Feed it thelatentoutput ofSD3LowResDenoisedirectly. - Mushy or blurry output - you're likely skipping the low-res stage entirely. The two stages are designed as a pair; the high-res pass assumes the low-res structure is already there.
- Node not in the palette - this pack registers through
comfy_api.latest; update an old ComfyUI. - Grid-like artifacts - the author explicitly built this SD3 path to study SD3's latent-grid limitations, so if you see grid artifacts, congratulations, you're reproducing the research. The FLUX path is the more mature of the two.
If you'd rather not manage the two-node handoff at all, SD3TwoStageDenoise runs both stages in one node - same math, less wiring.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| conditioning | CONDITIONING | — | |
| latent | LATENT | — | |
| highres_steps | INT | 201–10000 | — |
| cfg_scale | FLOAT | 5.000–100 | — |
| end_sigma | FLOAT | 0.000–1 | — |
| negative_conditioningopt | CONDITIONING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| debug_info | STRING | — |