Image Scale @zn123
A plain pixel upscaler — and an honest look at why you might not need it
- image
- upscaled_image
Image Scale @zn123 is a "more pixels, no new detail" upscaler from the image/processor pack: you feed it an image, a multiplier, and a resize method, and it comes back bigger. That's the entire job. If you're expecting it to invent detail the way SUPIR or a 4x ESRGAN model does, stop right there - it can't and isn't trying to. This is the interpolation category of upscaling, the one that's fast, free and incapable of hallucinating a face.
What it actually does
The mechanism is dead simple. The node computes new_width = width × scale_by and new_height = height × scale_by, then calls ComfyUI's own common_upscale with your chosen method. That means it uses the exact same resize machinery as ComfyUI's built-in image nodes - same code path, same results. A couple of details worth knowing:
scale_byis a FLOAT from 0.1 to 10 (default 2, step 0.1). It scales both dimensions, so 2x means four times the pixels.upscale_methodoffers the five standard choices:nearest,bilinear,bicubic,area,lanczos(defaultbicubic).- If
scale_byis exactly 1.0, the node returns the image untouched - no wasted work.
It outputs a single upscaled_image (type IMAGE). Wire it into SaveImage, into a hi-res fix second pass, or into any node that wants a bigger input.
And here's the bit the README lies about: it claims ImageUpscale has a "Crop: Optional cropping to maintain aspect ratio" parameter. It does not. The shipped code has no crop input - scaling a factor up doesn't change aspect ratio anyway, so there's nothing to crop. The docs mention a parameter that doesn't exist; trust the node's actual widget list.
Which method when
nearest- pixel art, sprites, anything where you want crisp hard edges. Blurry garbage on photos.area- genuinely the best for downscaling (i.e.scale_bybelow 1) because it averages neighborhoods instead of guessing.lanczos- highest quality for upscaling photos, slowest.bicubic- the balanced default; most of the time it's the right call.
The community's rule of thumb holds here: a plain interpolator like this belongs in the "more pixels" job, not "more detail." If your source is soft or compressed and you want it restored, reach for a real upscaler like SeedVR2 or an ESRGAN model instead - and keep recognisable faces out of purely generative upscalers. If your source is already sharp and you just need it bigger for print or a tiling pass, this node is perfect and runs in milliseconds.
Installing it
Part of the ComfyUI-image-processor-zn123 pack:
- ComfyUI Manager - search "ComfyUI-image-processor-zn123", install, restart.
- Manual - from
ComfyUI/custom_nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/zn123/ComfyUI-image-processor-zn123
Restart, and it's under image/processor. No models to fetch, no dependencies beyond torch/numpy/Pillow (all already present in ComfyUI).
Gotchas
- The honest take: ComfyUI already ships equivalent nodes.
ImageScaleandImageScaleByFactordo this exact job with the same interpolation list, andImageScaleToTotalPixelsis arguably more useful. You're not missing anything by skipping this one - it only earns its keep if you've installed the pack anyway for the smart short/long-side scaling nodes and want everything in one place. - Memory climbs fast: 4x on a large input is 16x the pixels. Keep
scale_bysane if you're piping straight into a VRAM-hungry node. - This adds zero detail. Don't use it as a substitute for hi-res fix - that's a second generation pass with low denoising strength, a different tool entirely.
Simple, honest, slightly redundant. If you want pixels and nothing else, it'll do exactly that - just know the built-in nodes were already doing it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| scale_by | FLOAT | 2.00.1–10 | — |
| upscale_method | COMBO | bicubic | 5 options: nearest, bilinear, bicubic, area, lanczos |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| upscaled_image | IMAGE | — |