NIX_ImageUpscaleProportionally
Proportionally scale to a target side and keep the numbers divisible by 8
- image
- IMAGE
NIX_ImageUpscaleProportionally is the resize node you reach for when you want one image (or a batch) normalized to a target size without stretching it into a funhouse mirror. It scales to a chosen side, preserves the aspect ratio, and - the useful part - rounds the result to multiples of 8. That last bit is what makes it ComfyUI-native: latents want dimensions that divide cleanly, and this node handles it for you.
Let's be clear about what it is not, because the name oversells it: this is not a generative upscaler. It won't invent detail, restore a damaged face, or turn a blurry thumbnail into a sharp render. It adds pixels - plain Lanczos interpolation, nothing invented. That's a feature, not a bug. In the upscaling world this is the "more pixels" rung, and it's the one that's quietly making a comeback because it's instant, free, and can't hallucinate.
How it works
Feed an image and set side_length (default 1024, up to 8192) and side. The side dropdown decides which dimension the target applies to:
- Longest / Shortest - scale so the longest (or shortest) edge hits side_length. The "fit it in a box" option; safest default.
- Width / Height - fix one edge exactly and derive the other from the aspect ratio.
eight_multiples (default on) rounds the final width and height to the nearest multiple of 8. Leave it on unless you have a specific reason not to - most models want latent sizes that divide by 8, and SDXL-class models are happiest when the numbers also fit their preferred resolutions. One caveat: it guarantees multiples of 8, not the 64-multiple convention Flux and friends prefer, so if you're feeding a Flux latent you may still want to hand-tune the target.
The output is a single IMAGE, resized. Feed it to a VAE encode, an img2img pass, or a save node.
When you'd actually use it
The boring jobs, mostly, and they come up constantly:
- Normalize a batch of source images to the same resolution before an img2img or video pass, so the batch doesn't fight over canvas size.
- Up-scale before a hi-res fix - feed the sampler a properly-sized base instead of hoping it handles an odd resolution.
- Downscale to native resolution first, the classic troubleshooting move: generate at the model's native size, then upscale after sampling rather than trying to generate big directly (which is how you get tiling and duplicated anatomy).
Getting it installed
Same story as every node in this pack - one install, all NIX nodes.
- ComfyUI Manager: search "NIX" (or "NIX ComfyUI Plugin"); if the search misses, use the Git URL tab with
https://github.com/J-ChenX/ComfyUI-NIX, then restart. - By hand:
Restart ComfyUI. No model downloads. It's under the "NIX" category.cd ComfyUI/custom_nodes git clone https://github.com/J-ChenX/ComfyUI-NIX
Gotchas
- Not a detail upscaler. If you resize a soft image and it comes out looking soft, that's interpolation being honest. For real detail, pair the resize with a generative step - ESRGAN-family for clean upscales, SeedVR2 if you want it to add detail and you can spare the VRAM.
- Multiples of 8, not 64. Fine for SD 1.5/SDXL; double-check for Flux-class latents.
- Image space, not latent space. This node resizes pixels. If you want to upscale a latent, that's a different node entirely.
- Quiet pack. No meaningful community discussion around this one as of mid-2026; the source is a single readable file if you ever want to see exactly what
sidedoes.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| side_length | INT | 10241–8192 | — |
| side | COMBO | Longest | 4 options: Longest, Shortest, Width, Height |
| eight_multiples | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |