Nodes/ComfyUI Impact Pack/Iterative Upscale (Image)
ComfyUI Node Runs on cloud

Iterative Upscale (Image)

The same stepwise upscaler, but it takes and returns pixels

By ltdrdata·Created 3 years ago·Updated 4 months ago· 3,242
Iterative Upscale (Image)
  • pixels
  • upscaler
  • vae
  • image
upscale_factor1.5
steps3
temp_prefix
step_modesimple
vae_compression8

This is the image-in, image-out version of Impact Pack's stepwise upscaler. Same idea as the latent one - split a big upscale into several small steps so detail keeps pace with resolution instead of the model having to invent everything in a single jump - but it takes a pixel image and gives you a pixel image back. If your working data is already decoded (you're upscaling a loaded photo, or a result from a node that outputs IMAGE), this saves you from manually encoding to latent, running the latent version, and decoding again. It just does that round-trip inside itself.

Under the hood it is the latent version. The docs say so plainly: this node runs Iterative Upscale (Latent) internally and handles the VAE encode/decode for you.

How it works

You give it an image, a scale factor, a step count, an upscaler provider, and a VAE. It encodes the image to latent, calls the latent iterative upscaler (which enlarges-and-resamples in stages, dividing the scale across the steps), then decodes back to pixels. The stepwise part is what buys the coherence: at each stage the upscale is small enough that the sampling pass can fill in plausible detail rather than smearing.

The inputs and outputs that matter

  • pixels (IMAGE) - the image to upscale.
  • upscale_factor (default 1.5) - total enlargement. 1.5–2x per node is the comfortable range.
  • steps (default 3) - number of stages the scale is divided across. More steps, gentler growth, better coherence, more time.
  • upscaler (UPSCALER) - the provider node (typically PixelKSampleUpscalerProvider) that does the actual upscale-and-sample each step. Required; the node is inert without it.
  • vae (VAE) - needed here because this node does its own encode/decode. The latent version doesn't ask for a VAE input on the way in; this one does.
  • step_mode (simple / geometric) - how the scale factor is spread across steps.

The single output is the upscaled image.

How to install it

ComfyUI Manager: search ComfyUI Impact Pack, Install, restart.

Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack
cd ComfyUI-Impact-Pack
pip install -r requirements.txt

Run the pip in ComfyUI's Python environment and restart. Drop a 4x upscale model into ComfyUI/models/upscale_models to feed the provider - that's what makes each step cheap.

Common issues & troubleshooting

Missing upscaler again. Same gotcha as the latent version: the upscaler input wants a provider node (PixelKSampleUpscalerProvider), not an upscale-model file. If you're hunting for a model dropdown, there isn't one - wire the provider.

Which one should I use, image or latent? If your data is already a latent (fresh out of a KSampler and you're going to keep sampling), use the latent node and skip the extra decode/encode. If you're holding pixels, this node is the convenient choice. They produce the same thing; it's purely about avoiding needless VAE round-trips.

Out of memory on big targets. The pixel provider decodes the full frame each step. Switch the provider to the tiled variant (PixelTiledKSampleUpscalerProvider, which needs ComfyUI_TiledKSampler installed) to keep VRAM in check.

Judge whether you even want a generative upscale. This adds detail via sampling. On an already-sharp source that only needs more pixels, a plain ESRGAN model is faster and won't alter content - reach for that instead.

CategoryImpactPack/Upscale

Inputs (8)

NameTypeDefaultDescription
pixelsIMAGE
upscale_factorFLOAT1.51–10000
stepsINT31–10000
temp_prefixSTRING
upscalerUPSCALER
vaeVAE
step_modeCOMBOsimple2 options: simple, geometric
vae_compressionINT80–256

Outputs (1)

NameTypeDescription
imageIMAGE