Nodes/comfyui-ralu-sampling/SD3HighResDenoise
ComfyUI Node

SD3HighResDenoise

The upsample-and-fix pass

By Milkyawaway·Created 3 months ago·Updated 3 months ago· 0
SD3HighResDenoise
  • model
  • conditioning
  • latent
  • negative_conditioning
  • latent
  • debug_info
highres_steps20
cfg_scale5.00
end_sigma0.00

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 from SD3LowResDenoise. 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 EmptySD3LatentImage or a latent that passed through other nodes. Feed it the latent output of SD3LowResDenoise directly.
  • 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.

Categorysampling/custom_sampling/sd3_ralu

Inputs (7)

NameTypeDefaultDescription
modelMODEL
conditioningCONDITIONING
latentLATENT
highres_stepsINT201–10000
cfg_scaleFLOAT5.000–100
end_sigmaFLOAT0.000–1
negative_conditioningoptCONDITIONING

Outputs (2)

NameTypeDescription
latentLATENT
debug_infoSTRING