SamplerLCMUpscale
Upscale while you sample, not after
- SAMPLER
SamplerLCMUpscale is the upscale-during-sampling trick from the community's advanced-samplers packs, now living in ComfyUI core. The classic way to get a big, coherent image is the two-pass "hires fix": generate small, upscale the latent, denoise again. This node collapses both into one sampler - it grows the latent between denoising steps, a little at a time, until it's at the size you asked for. One pass, one set of settings, and the upscaling is baked into the sampling trajectory instead of bolted on after.
How it works
Each step, it denoises normally, then - if it's still inside the upscale window - upscales the latent by the next fraction of your target ratio, and adds the next step's noise on top. The upscaling is spread across the later portion of the schedule (by default, roughly the second half of your steps), which is when the model has enough structure to benefit from the extra resolution.
Three inputs do all the work:
- scale_ratio (default 1.0, 0.1-20) - the final upscale factor. This is the one you actually set. Default 1.0 means no upscaling happens at all, so if you wire this node in and forget to change it, you've built a sampler that just adds noise per step.
- scale_steps (default -1) - how many steps the upscale is spread over.
-1is auto: roughlylen(sigmas)//2 + 1, i.e. the second half of your schedule. Set it explicitly if you want the growth front narrower or wider. - upscale_method (default
bislerp) - the interpolation. For latent-space upscaling,bislerpis the community's default because it preserves the latent's structure better than a plain pixel resize;nearest-exact,bilinear,area, andbicubicare the alternatives.
Output is a single SAMPLER for SamplerCustomAdvanced.
Why you'd reach for it
You want higher resolution without a separate second sampling pass - either to save the chore of setting up two stages, or because your VRAM prefers growing the latent progressively over decoding-and-re-encoding a big one. It plays well at low step counts, which is why the LCM name stuck: it's the low-step workflow that this node was built to pair with.
Where people get burned
- It's not a pixel upscaler. The latent grows, then the VAE decodes it at the end. It won't add detail the model never imagined, and it's a different beast from the upscaling stack (ESRGAN/Supir) that exists for pixel-space refinement.
- The sampler doesn't converge. Like its LCM relatives it adds noise each step, so it's not one to A/B against deterministic samplers.
- Resolution arithmetic. The final size is
original * scale_ratio, so keep that ratio aligned with what your model's VAE likes; a 1.5 ratio on an SD 1.5 latent is a different proposition than the same ratio on SDXL. - Set the ratio. Seriously - the single most common failure is the untouched
scale_ratio=1.0that silently does nothing.
Ships with ComfyUI core; nothing to install. If you've seen "latent upscale during sampling" in an old forum post and wondered where it went, this is where it ended up.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| scale_ratio | FLOAT | 1.000.1–20 | — |
| scale_steps | INT | -1-1–1000 | — |
| upscale_method | COMBO | 5 options: bislerp, nearest-exact, bilinear, area, bicubic |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SAMPLER | SAMPLER | — |