Nodes/CRT-Nodes/Upscale using model adv (CRT)
ComfyUI Node

Upscale using model adv (CRT)

Model upscaling with tiling, precision control, and exact output size

By PGCRT·Created 2 years ago·Updated 2 months ago· 123
Upscale using model adv (CRT)
  • 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

The stock "Upscale Image (using Model)" node gets the job done until it doesn't: big images blow past VRAM, you can't hit an exact target resolution, and every run redoes the same work. Upscale using model adv (CRT) is the CRT pack's version with the pain points addressed - tiling for big images, a multiplier or fixed-size mode, precision control, batch processing, model offloading, and a result cache so repeats are instant.

It's the "advanced" upscale node the KB's upscaling guide would approve of: it understands that there are two different jobs - "make this bigger without inventing detail" (an ESRGAN-style upscale model) versus "generate new detail" (tiled diffusion) - and this node is firmly in the first camp. Feed it a spandrel-loaded upscale model from your models/upscale_models folder and it upscales with real model inference, not interpolation.

The controls that matter

  • upscale_model_name - picks from whatever's in models/upscale_models (the pack uses ComfyUI's built-in spandrel-based upscale-model path, so your existing 4x models show up). Community favorites like 4x-UltraSharp or 4x_NMKD-Siax work unchanged.
  • use_fixed_resolution + fixed_width / fixed_height - flip this on to upscale to an exact pixel size instead of by multiplier. This is the feature the stock node lacks, and it's the answer to "I need exactly 2048×2048 for this deliverable."
  • output_multiplier - the multiplier path (1.0 = same as input, 2.0 = double, up to 8×).
  • tile_count - "1" (no tiling), or 4/8/16 for a 4×4, 8×8, or 16×16 tile grid. This is the VRAM escape hatch: upscaling a 4K frame with one pass on a 12GB card is a coin flip; tiling keeps each pass small.
  • precision - auto (fp16 on CUDA, fp32 on CPU), or force fp32/fp16/bf16. auto is right 95% of the time.
  • batch_size - process multiple images at once.
  • offload_model - pushes the upscale model back to CPU after processing to free VRAM. On by default, leave it.
  • disable_cache - the node caches results (keyed on a hash of the image + settings, capped at a few entries); turn this on only when testing or when you want fresh output.

Outputs are IMAGE, plus width and height ints - handy if the next node needs to know what size you ended up at.

Where it fits

End of pipeline, right before save or before a second generative pass. The typical production chain: render at base res → this node upscales with a sharp model to final size → optionally feed the result into a low-denoise refinement pass if you want generated detail (the KB's upscaling guide is explicit that a plain model upscale can't invent detail - that's a separate, diffusion-based step). If your output size is a hard requirement (print, spec, social platform), the fixed-resolution mode is the reason this node beats the stock one.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/PGCRT/CRT-Nodes.git
pip install -r requirements.txt

or ComfyUI Manager → search "CRT-Nodes". spandrel is in the requirements, so upscale-model support comes with the pack.

Gotchas

The tiling trade is real: tiles can show seams at aggressive sizes if the model isn't tile-aware - tile_count 4 is usually invisible, 16 starts to ask questions. The cache is a double-edged sword: it's keyed on a sample of the image plus settings, so genuinely different input images generally get different cache entries, but if you're comparing settings on the same image, remember disable_cache exists - otherwise your "changed" run returns the old result and you'll think nothing worked. And offload_model is great for VRAM but means the model reloads on the next run, which adds a beat of latency to batch work; turn it off if you're running many images in a row on a big card.

CategoryCRT/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 input (1.0=same as input, 2.0=double input size)
fixed_widthINT102464–8192Target width for the upscaled image
fixed_heightINT102464–8192Target height for the upscaled image
tile_countCOMBO1Number of tiles per side (1=no tiling, 4=4x4=16 tiles, 8=8x8=64 tiles, etc.)
precisionCOMBOautoProcessing precision (auto=fp16 on CUDA, fp32 on CPU)
batch_sizeINT11–16Number of images to process simultaneously
offload_modelBOOLEANtrueOffload model to CPU after processing to save VRAM
disable_cacheBOOLEANfalseDisable caching to always reprocess images (useful for testing or varying results)

Outputs (3)

NameTypeDescription
IMAGEIMAGE
widthINT
heightINT