Nodes/NN-custom-nodes/Image Upscale By
ComfyUI Node

Image Upscale By

Quick, clean upscaling that isn't a model

By bandifiu·Created about a month ago·Updated about a month ago· 0
Image Upscale By
  • image
  • image
scale_by1.00
batch_size1
devicegpu

There are two kinds of upscaling in ComfyUI, and knowing which one you need saves you a lot of VRAM and a lot of waiting. "Image Upscale By" is the honest, boring kind: pure interpolation. It makes your image bigger using high-quality bicubic sampling with anti-aliasing. It can't invent pores or fabric weave, it runs in milliseconds, and it's exactly the right tool more often than people admit.

What it is

NNImageUpscaleBy scales an image by a scale_by factor using bicubic interpolation - the "more pixels" category from the upscaling playbook, as opposed to a generative model like ESRGAN or SeedVR2 that adds detail. The pack's README is explicit about the recipe: "high-quality bicubic interpolation with anti-aliasing," with large-batch support, GPU/CPU selection, and memory-efficient chunked processing.

How it works

The mechanism is refreshingly direct. It reads the input shape, multiplies width and height by scale_by, and runs torch.nn.functional.interpolate in bicubic mode with align_corners=False and antialias=True. That antialias flag matters: plain bicubic can shimmer and alias when upscaling, and the antialias filter is what keeps edges from looking crunchy. Think of it as a Lanczos-quality resample without the extra dependency - the same "milliseconds, no hallucination" family the KB's upscaling doc puts alongside Lanczos.

The batch machinery is the second half of the story. Like the pack's other processing nodes, it chunks through the batch (batch_size, 1–256 frames per chunk), moves each chunk to the chosen device (gpu or cpu), and copies results back off-GPU as it goes. A 200-frame video sequence upscaled 2× won't balloon your VRAM the way a naive one-shot resize would.

Two fast paths to know: scale_by of 1.0 passes the image through unchanged (no-op), and it's a pure resampler - no model weights, no config files, nothing to download.

The inputs

  • image - the tensor to scale.
  • scale_by - 0.01 to 16, default 1.0. 2.0 doubles the dimensions; 0.5 halves them (yes, it downscales too, same filter).
  • batch_size - frames per chunk, 1–256.
  • device - gpu or cpu.

Single image output with the scaled dimensions.

When to use it

Reach for it when your image already has the detail and just needs more pixels: feeding a hires-fix second pass, resizing for a video model's input requirements, or making a small image display-ready before you run a detailer. This is the right move before any generative step, because upscaling-then-detailing gives the detailer clean large pixels to work on. The KB's upscaling doc is blunt that plain interpolation is "still the correct answer and gaining share" - when the source is already sharp, a generative upscaler wastes time and can even add unwanted texture.

Where it's wrong: genuinely low-res, soft sources. Interpolation can't fabricate detail, so if you want to "resurrect" a small image, this is the wrong node - that's ESRGAN/SeedVR2 territory (and the video world's FlashVSR), with this node as the optional clean-up pass after.

Installing

Ships in bandifiu/ComfyUI-NN-custom-nodes:

cd ComfyUI/custom_nodes
git clone https://github.com/bandifiu/ComfyUI-NN-custom-nodes

Restart ComfyUI (or Manager → "NN-custom-nodes"). Deps are just torch, numpy, pillow - no model downloads. GPL-3.0, V3 backend API, no classic registration dicts in the source.

The practical gotcha is overshoot: at scale factors above ~4×, bicubic interpolation runs out of information and you start seeing soft mush, not sharpness. For big jumps, scale in steps or switch to a model upscaler - this node's sweet spot is 1.5×–4× on already-clean images.

CategoryNN/image

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
scale_byFLOAT1.000.01–16
batch_sizeINT11–256
deviceCOMBOgpu2 options: gpu, cpu

Outputs (1)

NameTypeDescription
imageIMAGE