Upscale Image By (Using Model)
The two-node upscale-then-resize dance, done in one
- upscale_model
- image
- IMAGE
If you've ever loaded a 4x ESRGAN model expecting to dial in "I just want 1.7x, thanks" and instead gotten a giant image you now have to shrink by hand, this node is the fix. It wraps the classic two-step dance - upscale with a model, then resize down to what you actually wanted - into one node, and it does it a bit more carefully than "always resize" would.
That two-step dance isn't a niche complaint; it's the standard confusion beginners hit with ComfyUI's own upscale nodes. A model-based upscale node bakes in whatever factor the model was trained at - almost always 4x, sometimes 2x or 8x - full stop, no dial, no target size. So the accepted move in plain ComfyUI is: run the model, then feed the result into a separate downscale node to land on the size you actually wanted. This node just does both steps for you.
How it works
Three steps, straight from the author's own description. First, it runs your image through upscale_model at whatever fixed factor that model was trained at. Then it computes a target size from upscale_by, your requested multiplier relative to the original. Then it compares: if the model's output is bigger than that target, it shrinks it down to the target using rescale_method. If the model's output is already at or under the target, it leaves the image alone - no resize pass, no quality lost to an unnecessary step.
That last bit is the detail worth internalizing, because it cuts both ways. Ask for upscale_by 2 with a 4x model and you get a clean 2x - the model runs at 4x, then gets shrunk down to your target. Ask for upscale_by 8 with that same 4x model and you'll be disappointed: the node caps out at whatever the model produced, since 4x is smaller than 8x and it only ever shrinks, never grows past the model's native output. It's not a general-purpose resize node in a costume; it's specifically "upscale with a model, then clamp down if needed."
Inputs and outputs
Four inputs, all required, and only two you'll actually tune day to day:
- upscale_model - an
UPSCALE_MODEL, from a Load Upscale Model node feeding it your ESRGAN/Real-ESRGAN-family file. - image - what you're enlarging.
- upscale_by - the multiplier you actually want, 1 to 8, default 2, in 0.05 steps. This is your real target, not the model's baked-in factor.
- rescale_method - how the downscale step is filtered, if it happens:
nearest-exact,bilinear,area,bicubic, orlanczos. Lanczos is the safe default for a clean shrink; the rest exist for speed or a specific look.
One IMAGE comes out. Wire it straight to Save Image, or into a second sampler pass if you're layering detail work on top.
Where it fits
This is a pixel-upscaler node - it adds resolution, not invented detail, and it can't hallucinate a face or texture that wasn't in the source. That's exactly right when your generation is already sharp and you just need it bigger at a controlled size. If the source is soft, low-res, or genuinely damaged, no ESRGAN-family model will manufacture detail that isn't there - that's a job for something generative like SeedVR2, a different node entirely, and it's currently the community's default answer for that job. Also run this late in your workflow, after you've fixed faces and hands at native resolution - upscaling first just bakes defects in bigger.
Install
The pack is one file, one node, no extras. In ComfyUI Manager, search comfyui-upscale-by-model and install. By hand: cd ComfyUI/custom_nodes && git clone https://github.com/TheBill2001/comfyui-upscale-by-model, then restart ComfyUI. No Python dependencies, no bundled models - you supply your own upscale model, dropped in ComfyUI/models/upscale_models/ and loaded through a standard Load Upscale Model node.
Common issues
Output isn't the size you expected. upscale_by is capped by the model, not guaranteed. If your model is 2x and you set upscale_by to 4, you'll get 2x - the node never upscales past what the model actually produced, it only ever shrinks toward your target.
"Required input is missing: upscale_model." This node has no built-in model; it needs a Load Upscale Model node feeding it, same as any ESRGAN-based upscaler in ComfyUI.
Out of memory partway through. The model runs at its full native factor before any downscale happens, so a big source image with an 8x model can spike VRAM hard even if your final upscale_by is modest. Drop to a smaller-factor model, or shrink the source first if you're working with large images.
Result looks over-sharp or plasticky. That's the model you loaded, not this node - the rescale step is a plain interpolation, not a sharpening filter. Swap in a gentler model like 4x-UltraSharp instead.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| upscale_model | UPSCALE_MODEL | — | |
| image | IMAGE | — | |
| upscale_by | FLOAT | 2.001–8 | — |
| rescale_method | COMBO | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |