Nodes/comfyui-ralu-sampling/SD3LowResDenoise
ComfyUI Node

SD3LowResDenoise

Denoise small, decide later

By Milkyawaway·Created 3 months ago·Updated 3 months ago· 0
SD3LowResDenoise
  • model
  • conditioning
  • latent
  • noise_state
  • negative_conditioning
  • latent
  • debug_info
lowres_steps10
e_transition0.35
downscale_factor2
cfg_scale5.00
use_ralu_defaulttrue
highres_steps_hint20

SD3LowResDenoise is the first half of the pack's two-stage RALU implementation for SD3. The idea is the same as the FLUX side - don't waste full-resolution compute on the whole image for the whole schedule - but SD3 gets a deliberately simpler version: denoise at low resolution, then hand off to SD3HighResDenoise for an upsampled finish. In the author's own words, this SD3 path is "a two-stage approximation," built mainly to study grid artifacts and SD3's latent-grid limitations. So treat it as an experiment you can run, not a tuned-up feature.

What it does

The node takes your SD3 latent (typically from EmptySD3LatentImage), runs a shift-aware denoise pass at low resolution, and - this is the important part - stashes the computed RALU parameters inside the latent's metadata (ralu_sd3_target_h, ralu_sd3_target_w, the stage params, and more). The high-res node reads those keys back out. That's why they're designed to be chained: SD3LowResDenoise → SD3HighResDenoise, with the latent as the handoff.

The low-res pass uses stage one of the two-stage schedule: default shift 5.87 for the first stage, Z = 6.317 (the same value as FLUX RALU level 4), and an Euler-style denoise loop.

Inputs worth knowing

  • latent - your empty SD3 latent. The node fixes channels and computes the target high-res size from it.
  • noise_state - feed it from RALUNoiseSource; the seed here drives the noise that starts the whole process.
  • lowres_steps (default 10) and highres_steps_hint (default 20) - steps for each stage. highres_steps_hint is just a hint; the high-res node ultimately owns its own step count.
  • e_transition (default 0.35) - where the schedule transitions from the low-res to the high-res regime.
  • downscale_factor - locked at exactly 2 (the min and max are both 2). Set anything else and it raises.
  • cfg_scale (default 5.0) - SD3 is CFG-friendly, unlike FLUX, so this is a real knob here.
  • use_ralu_default - when true, steps and transition are locked to the researched presets (N=[10,20], e1=0.35).

Outputs are latent and debug_info (a JSON string with the stage report). You'll decode the final image after the high-res node, not this one.

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" also works; restart after install. You'll want sd3.5_large.safetensors and its text encoders in the standard model folders - the shipped sd3.5-ralu.json example wires everything up (SD3 LowRes → HighRes → VAEDecode).

Common issues

  • You forgot the high-res node. The low-res node alone won't give you a clean image at full size - it hands off a half-res latent plus metadata. Chain it to SD3HighResDenoise.
  • "supports only 2x upscale factor" - downscale_factor is fixed at 2; don't change it.
  • "missing RALU params" on the high-res node - the latent came from somewhere other than SD3LowResDenoise. The metadata didn't survive; rerun through this node.
  • Old ComfyUI shows no nodes - this pack uses the modern comfy_api.latest registration; update ComfyUI.

If you want the whole SD3 RALU pass without managing the handoff yourself, skip to SD3TwoStageDenoise, which runs both stages in one node. But if you want to watch the two-stage behavior separately - which is what the author did when studying those grid artifacts - this is the front half of the microscope.

Categorysampling/custom_sampling/sd3_ralu

Inputs (11)

NameTypeDefaultDescription
modelMODEL
conditioningCONDITIONING
latentLATENT
noise_stateNOISE
lowres_stepsINT101–10000
e_transitionFLOAT0.350.01–0.99
downscale_factorINT22–2
cfg_scaleFLOAT5.000–100
use_ralu_defaultBOOLEANtrue
highres_steps_hintINT201–10000
negative_conditioningoptCONDITIONING

Outputs (2)

NameTypeDescription
latentLATENT
debug_infoSTRING