Upscale (full-pipe)
I2i upscale with an optional upscale model
- full_pipe
- image
- full_pipe
- image
Upscale (full-pipe) is a hires-fix in a single pipe node: it scales an image up, VAE-encodes it, samples it img2img-style, and decodes the result - with an optional upscale model to keep the details sharp while the sampler works. If you know ComfyUI's classic two-pass workflow (generate small, upscale, low-denoise resample), this is that, collapsed into one node that reads and writes a FULL_PIPE.
It's worth being clear about which kind of "upscale" this is, because the community distinguishes sharply. This is the generative upscaler (the KB's "more detail" bucket): the sampler invents detail during the resample, which is why the denoise dial exists. It is not a pure pixel-pusher like Lanczos alone. The author's own SDXL example workflow does exactly this - generate, upscale, then detail the face - which is the classic recipe.
How it works
It takes the image (from the pipe, or an optional image input), scales it by scale_by using either lanczos or an upscale model (CombinedUpscaleNode - model + lanczos to hit the target), encodes the scaled image to a latent once, then samples it variations times. Each variation uses the base seed from the pipe incremented by its index (seed, seed+1, …), so you get a batch of related results from a single encode - a cheap way to pick the best of several. The decoded images are concatenated into a batch and stored back into the pipe.
Notable quirk: the scheduler list here includes beta57 (via the BetaSamplingScheduler) and align_your_steps is the default, because the author's sampling helper routes those through SamplerCustom. If you're on an SDXL anime model, the align_your_steps default is a known good pairing.
The inputs that matter
- scale_by - default 2.0, up to 8x. This is the multiplier; 1.0 means no upscale but still a resample.
- denoise - default 1.0, which is a red flag for newcomers: at full denoise you're not "upscaling," you're re-rolling the image. For a classic hires-fix you want 0.3–0.6. The author ships it at 1.0, which makes sense as a "generate a bigger version" default but will destroy your composition if you expected a gentle upscale. Dial it down.
- upscale_model -
noneor any.pth/.pt/.safetensorsin yourupscale_modelsfolder. A good ESRGAN-family model here adds real sharpness before the sampler touches it. - variations - default 1. Bump it to get N sampled versions as a batch.
- steps / cfg / sampler_name / scheduler - the usual sampler controls, all exposed because this is a full sampling pass, not just a resize.
Outputs: the updated full_pipe (with the batch as image) and the image batch itself.
Installing
Part of the mudknight utils pack. ComfyUI Manager → search comfyui-mudknight-utils, or:
cd ComfyUI/custom_nodes
git clone https://github.com/mudknight/comfyui-mudknight-utils
Restart. If you want the model path, drop an ESRGAN-family upscaler (4x-UltraSharp, Remacri, etc.) into ComfyUI/models/upscale_models - the node picks them up automatically.
Gotchas
- Output looks completely different →
denoiseis at 1.0. Lower it. This is the #1 surprise with this node. - "No image in pipe" - feed the optional
imageinput or make sure the pipe carries one. - Huge batch memory spike -
variations× decode at 2x+ resolution adds up fast. Each decoded frame is full res; on a 12GB card keep variations modest at 2x. - align_your_steps on non-SDXL - the helper detects model type (SD1/SDXL/SVD) to pick sigmas, so it mostly just works. If results look off, switch scheduler to
karras.
A niche pack with zero comfy.icu impressions, but if you're already chaining full-pipe nodes this is the least-fiddly hires-fix on offer - once you've met the denoise default.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| full_pipe | FULL_PIPE | — | |
| sampler_name | COMBO | euler_ancestral_cfg_pp | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | align_your_steps | 11 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +5 |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 1.50–100 | — |
| denoise | FLOAT | 1.000–1 | — |
| upscale_model | COMBO | 1 options: none | |
| scale_by | FLOAT | 2.000.01–8 | — |
| variations | INT | 1 | Number of images to generate. Each variation uses the base seed incremented by its index. |
| imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| full_pipe | FULL_PIPE | — |
| image | IMAGE | — |