Nodes/Muse-Upscale-Advanced/Upscale Model Advanced (Muse)
ComfyUI Node

Upscale Model Advanced (Muse)

One node for 'bigger, to an exact size, without dying on VRAM'

By muse-collective-26·Created about 18 hours ago·Updated about 18 hours ago· 0
Upscale Model Advanced (Muse)
  • image
  • IMAGE
  • width
  • height
upscale_model_name
use_fixed_resolutionfalse
output_multiplier1.00
fixed_width1024
fixed_height1024
tile_count1
precisionauto
batch_size1
offload_modeltrue
disable_cachefalse

Upscale Model Advanced (Muse) is the node that bothers to finish the job. Stock ComfyUI runs a 2x ESRGAN model and hands you a 2x image - and then you still reach for a separate resize node because 2x isn't the size you actually wanted. This one fuses load-model, tiled upscale and exact resize into a single step, then throws in precision control, offloading and a result cache. It is workflow glue, not a new upscaler, and knowing that is half the review.

Before anything: this is the "more pixels" job, not the "invent detail" job. Point it at an ESRGAN-class .pth from models/upscale_models and you get bigger, period - no hallucination, no face-rewriting. If you're after SeedVR2/SUPIR-style added detail, this isn't that tool, and using it that way is a category error. Where it earns its keep is the tail of a multi-stage pipeline: after your hi-res fix and detail passes, land on a specific print or frame size in one clean node.

How it works

The clever bit is what it doesn't reimplement. The author built it entirely on ComfyUI's own core - the same UpscaleModelLoader and ImageUpscaleWithModel you'd wire by hand, plus comfy.utils.tiled_scale for tiling. The scale factor is read from the model's own .scale attribute (exactly what stock uses), with a filename guess only as a last-resort fallback. Then:

  1. It computes the target size from your multiplier or fixed dimensions.
  2. Runs the model tiled, with blended tile edges so there are no seam lines.
  3. If the model's native output doesn't match the target, it Lanczos-resizes to hit it exactly.

The standout behavior is OOM tolerance. ComfyUI's tiled upscale can throw on a big image; this node wraps the pass in a retry loop that halves the tile on a CUDA out-of-memory error and tries again, down to a floor of 128px. A run that would have died on a mid-range card instead slows down and succeeds. auto precision means fp16 on CUDA, bf16 elsewhere, and the model loads through ComfyUI's own memory manager so it coordinates with whatever else is resident instead of fighting it.

The inputs that matter

  • use_fixed_resolution + fixed_width/fixed_height vs output_multiplier - the whole point of the node. Off (default), output_multiplier sizes relative to the original input. On, you get exact dimensions. The trap: the multiplier is independent of the model's native scale. A 4x model at multiplier 2.0 gives you 2x total, not 8x. People burn real time on this one.
  • tile_count (1/4/8/16) - starting tile grid per side; 1 is a single pass. Crank it on low VRAM; the auto-shrink covers you either way.
  • precision, batch_size, offload_model, disable_cache - VRAM and reprocessing levers. Leave them alone until you hit a wall.

Outputs are IMAGE plus width and height ints, which are handy to wire into downstream resolution math or video pipelines. One real gotcha on fixed mode: it does not preserve aspect ratio - it Lanczos-stretches to exactly width×height. Feed it an image whose aspect matches, or you'll get a politely squashed result.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/muse-collective-26/Muse-Upscale-Advanced

Restart ComfyUI (or use Manager and search "Muse Upscale Advanced"). That's the whole install - the README is honest about having no third-party dependency, just ComfyUI core. The real requirement is the model: nothing is bundled, so put your own ESRGAN weights in ComfyUI/models/upscale_models (4x-UltraSharp, Remacri, RealESRGAN x4plus all work) or the dropdown comes up empty.

Troubleshooting

  • Empty model dropdown - no .pth in models/upscale_models. That's the whole story.
  • It seems to "run" every time even with identical inputs - the node reports itself always-changed (IS_CHANGED returns NaN), so ComfyUI re-invokes it, but a small in-memory cache (about 5 results, keyed on your image plus every setting) short-circuits the actual model pass. Flip disable_cache when you're tuning and genuinely want a reprocess.
  • Output squashed or stretched - fixed resolution hit an aspect mismatch. Use the multiplier mode or match dimensions yourself.

Honest verdict: this is a tidy, well-commented single-node pack from a publisher with essentially no community footprint yet (searching for it surfaces nothing), and there's no magic inside - if you only ever run a 2x model at 2x with stock nodes, you don't need it. You want it when the exact output dimension is the actual requirement and your card can't take a full-size pass. For that, it's genuinely nicer than chaining four stock nodes.

CategoryMuse/Image

Inputs (11)

NameTypeDefaultDescription
imageIMAGE
upscale_model_nameCOMBOSelect upscale model from models/upscale_models folder
use_fixed_resolutionBOOLEANfalseEnable to use fixed width/height instead of a multiplier
output_multiplierFLOAT1.000.25–8Final output size multiplier relative to the ORIGINAL input (1.0=same as input, 2.0=double input size) — independent of the upscale model's own native scale factor.
fixed_widthINT102464–8192Target width for the upscaled image (used when use_fixed_resolution is on)
fixed_heightINT102464–8192Target height for the upscaled image (used when use_fixed_resolution is on)
tile_countCOMBO1Starting tile grid per side (1=single pass). Tiles are blended at their edges and automatically shrunk further on a CUDA out-of-memory error, rather than failing outright.
precisionCOMBOautoProcessing precision (auto=fp16 on CUDA, bf16 elsewhere)
batch_sizeINT11–16Number of images processed together per pass (lower = less peak VRAM)
offload_modelBOOLEANtrueOffload model to CPU after processing to save VRAM
disable_cacheBOOLEANfalseDisable caching to always reprocess images

Outputs (3)

NameTypeDescription
IMAGEIMAGE
widthINT
heightINT