Nodes/radiance/Upscale Image
ComfyUI Node

Upscale Image

Three model tiers, one dropdown, and no more upscaler shopping

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Upscale Image
  • images
  • upscale_model
  • image_a
  • image_b
  • info
  • data1
  • data2
◄operationUpscale►
◄scale4×►
◄hdr_modeauto►
◄color_encodingpassthrough►
◄modeprecise►
◄tile_size512►
◄overlap128►
◄sharpness_boost0.00►
◄denoise_pre0.00►
◄model_tierauto►
◄diffusion_steps20►
◄diffusion_noise_level20►
◄guidance_scale7.5►
◄enhancement_prompt►
◄prefer_speedfalse►
◄sample_frame0►

"Which upscaler should I use?" is three questions wearing one coat: do you need more pixels, more detail, or more pixels that weren't invented? Upscale Image answers all three from a single node by putting the whole ladder behind one model_tier dropdown - a fast GAN rung, a quality transformer rung, and a diffusion rung that will cheerfully hallucinate.

The tiers

tier1_fast (Real-ESRGAN - GAN, ms/frame) is the classic 4x GAN upscale: no invented content, milliseconds per frame, the correct answer when your source is clean and you just want it bigger. tier2_quality covers HAT-L (a transformer with state-of-the-art PSNR) and SwinIR-L. tier3_creative is SD x4 or SeedVR2 - diffusion passes that invent detail. auto picks for you based on content analysis.

Because the tooltips name the rungs rather than hiding them, you can treat this as the same decision tree the community has argued about for years, with the shopping trip removed. The one honest caveat from the wider ecosystem applies: a generative rung rewrites faces, so a portrait still wants a face pass afterwards.

How the non-obvious parts work

hdr_mode is where this pack earns its keep compared to a generic upscaler node. auto preserves the range when the input exceeds 1.0 and clamps otherwise; preserve Reinhard-tonemaps before the super-resolution pass and re-expands afterwards, so highlights above 1.0 survive; clamp is the legacy 0–1 LDR path. If you're upscaling a scene-linear plate from the pack's HDR side, preserve is the difference between keeping your speculars and flattening them.

color_encoding (passthrough, linear<->sRGB, linear<->LogC3) addresses the real reason generative upscalers look bad on linear input: the network was trained on display-referred images. Encode to sRGB or LogC3 before the pass and decode after, and the model sees the domain it expects.

scale is 2×, 4× or 8× (tile cascade) - the 8× option runs the 4× model twice with the second pass area-downsampled by half, which is a clever way to get a big number without a model that was never trained for it, at roughly four times the cost.

mode is the taste dial: precise is Real-ESRGAN fidelity-first, balanced adds light sharpening, creative reaches for diffusion and needs the VRAM. tile_size (512) and overlap (128) are your OOM controls - drop the tile size first. And if you already own a favourite upscale model, connect it to upscale_model: it replaces the built-in tiers, and model_tier and creative mode are ignored from then on.

operation: Route runs the analysis and passes the image straight through - useful when you want the content class and stats without spending GPU time.

Outputs are image_a, image_b, info, data1 and data2. Read info; it says which tier and path actually ran, which is how you find out that your Tier 2 request quietly fell back to Real-ESRGAN.

Install

Manager → search Radiance → Install → restart → refresh the browser. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt

Windows portable users: python_embeded\python.exe. Real-ESRGAN and SwinIR-L weights download on first use, SHA-pinned. RADIANCE_ALLOW_DOWNLOADS=0 or RADIANCE_UPSCALE_OFFLINE=1 disables that.

The three traps

HAT-L has no automatic download. It's published only on Google Drive, so there's no pinned URL - install it by hand from the HAT page. Until you do, Tier 2 runs SwinIR-L at 4x and Real-ESRGAN at 2x, and says so in the log.

SeedVR2 needs company. The Tier 3 SeedVR2 path needs the separate ComfyUI-SeedVR2_VideoUpscaler node pack, which fetches its own weights; without it, Tier 3 falls back to the SD x4 upscaler. SeedVR2 is the option the wider community rates highest for detail on a clean image, so this is worth installing properly rather than tripping over.

The confidence map is geometric, not epistemic. The pack's confidence output is 1.0 at tile centres falling toward tile edges - it locates seam blending. It does not measure hallucination, and the known-issues list says no backend reports that. Don't read "high confidence" as "this detail is real."

CategoryFXTD STUDIOS/Radiance/Upscale

Inputs (18)

NameTypeDefaultDescription
operationCOMBOUpscaleUpscale: run super-resolution. Route: pass images through and output the recommended tier, content class and stats (no upscale).
imagesIMAGEInput image batch.
scaleoptCOMBO4×Output scale. 8× runs the 4× model twice, the second pass area-downsampled by half.
hdr_modeoptCOMBOautoScene-linear / HDR handling. auto: preserve range when input exceeds 1.0, else clamp. preserve: Reinhard tonemap before SR and re-expand after (keeps highlights >1.0). clamp: legacy [0,1] (LDR).
color_encodingoptCOMBOpassthroughEncode scene-linear -> display (sRGB/LogC3) before SR and decode after, so the LDR-trained network sees the domain it expects. passthrough: feed pixels unchanged.
modeoptCOMBOpreciseprecise: Real-ESRGAN fidelity-first. creative: diffusion detail hallucination (requires VRAM). balanced: GAN upscale + light sharpening.
tile_sizeoptINT512128–1024Tile size in input pixels. Reduce if OOM.
overlapoptINT12832–256Overlap between tiles in input pixels, blended to hide seams.
sharpness_boostoptFLOAT0.000–1Unsharp mask strength applied after upscale.
denoise_preoptFLOAT0.000–1Gaussian pre-denoise strength.
upscale_modeloptUPSCALE_MODELOptional ComfyUI UPSCALE_MODEL; its native scale should match scale. When connected it replaces the built-in tiers (model_tier and creative mode are ignored).
model_tieroptCOMBOautoModel tier. 'auto' selects based on content analysis.
diffusion_stepsoptINT201–50Inference steps for Tier 3 diffusion (creative mode or a tier3 model_tier). More steps are slower; SeedVR2 is one-step.
diffusion_noise_leveloptINT200–350SD x4 upscaler only: noise added to the low-res input. Higher lets the model invent more detail and drift further from the source.
guidance_scaleoptFLOAT7.51–20SD x4 upscaler only: classifier-free guidance toward enhancement_prompt. Higher follows the prompt more strongly.
enhancement_promptoptSTRINGText prompt for creative mode diffusion steering.
prefer_speedoptBOOLEANfalseAlways recommend Tier 1 fast regardless of content.
sample_frameoptINT00–9999Index of frame to analyse (for Route operation).

Outputs (5)

NameTypeDescription
image_aIMAGE—
image_bIMAGE—
infoSTRING—
data1STRING—
data2STRING—