Image Upscale (Umbra UI)
A model upscaler that respects a maximum dimension — and never double-scales
- image
- image
- width
- height
- upscale_model
Upscalers have a dirty secret the README owns up to: a 4x model will happily take your already-upscaled 2048px image and blow it to 8192px, eating VRAM and disk for nothing. Image Upscale (Umbra UI) exists to stop that. It runs a selected super-resolution model and then applies a true maximum-dimension cap - if the long edge is already past your limit, the output gets scaled down to fit, and it never re-enlarges a small model output a second time.
How it works
Two stages, both honest:
- The model pass. It loads your chosen upscale model and runs it (via ComfyUI's
ImageUpscaleWithModel). Theupscale_modeldropdown is built from yourComfyUI/models/upscale_models/folder, with4x-AnimeSharp.pthgiven the default slot - that's an ESRGAN-family anime-tuned 4x model, the same lineage the KB's upscaling doc flags as the community workhorse for "more pixels" jobs. - The cap. After the model runs, it computes the largest output dimension and, if that exceeds
max_dimension(default 3840, min 512, max 16384), downscales with Lanczos to bring the long edge exactly to the limit, preserving aspect ratio. The result is never bigger than you asked for - the cap is a hard ceiling, applied after upscaling, not a soft suggestion.
There's also an enabled toggle (off by default). Flip it on and the upscale runs; leave it off and the node is a pass-through that just reports your input's width/height and "disabled" as the model name. That makes it a convenient single junction: the toggle controls whether the whole output pipeline upscales without you rewiring anything.
Outputs: image, width, height (the actual post-cap dimensions - handy to feed a save node or downstream sizing), and upscale_model (a string naming what ran, or "disabled").
The inputs a beginner sets
- image - the tensor to upscale.
- upscale_model - pick from your installed models;
4x-AnimeSharp.pthis the default. - max_dimension - your ceiling. 3840 fits a 4K long edge nicely; drop it to 2048 for fast local work.
- enabled - the on/off switch.
Installing it
Part of Umbra-Nodes, the ComfyUI companion pack for Umbra Studio (NocturneLabs' open-source local AI suite). ComfyUI Manager → search "Umbra Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nocturne-Ai-Labs/Umbra-Nodes
Restart ComfyUI. No pip deps. You need an upscale model in ComfyUI/models/upscale_models/ for the model pass - the README's default profile expects 4x-AnimeSharp.pth, but any ESRGAN-family .pth in that folder shows up in the dropdown.
Gotchas
The ordering rule from the KB's detailing doc applies here in reverse: this is the last stage of a pipeline, after detailing. If you upscale first and detail after, the detail pass works on bigger pixels and costs more - detail at native resolution, then upscale. Second: the cap is a downscale, not a crop - if your source is a 16:9 and the model made it huge, the cap preserves aspect. And when enabled is off, width/height come straight from the input image, so if a downstream node "sees" the wrong size, check whether you forgot the toggle.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| upscale_model | COMBO | 4x-AnimeSharp.pth | 1 options: 4x-AnimeSharp.pth |
| max_dimension | INT | 3840512–16384 | — |
| enabledopt | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| width | INT | — |
| height | INT | — |
| upscale_model | STRING | — |