Nodes/radiance/Upscale 32-bit
ComfyUI Node

Upscale 32-bit

Radiance Pro Upscale — clean vectorized upscaling when you don't want a model rewriting your image

By FXTD-Studios·Created 9 months ago·Updated about 16 hours ago· 250
Upscale 32-bit
  • image
  • upscaled_image
  • width
  • height
  • info
◄scale_factor2.0►
◄preset▾►
◄method▾►
◄sharpening0.30►
◄sharpen_radius1.0►
◄detail_enhancement0.20►
◄antialiasing0.30►
◄input_color_space▾►
◄process_in_lineartrue►
◄use_tilesfalse►
◄tile_size512►
◄tile_overlap64►
◄output_bit_depth▾►

There are two kinds of upscaler, and the KB's upscaling doc makes the split brutally clear: ones that add pixels (interpolators) and ones that add detail (generative models like SeedVR2 or SUPIR that invent plausible texture and will happily rewrite a face). Most people reach for the generative ones when they'd be better served by a fast, honest interpolator - and a good Lanczos pass is still the community's correct answer for "source already sharp, I just need it bigger." Radiance Pro Upscale is that honest interpolator, done carefully, with Flux-oriented presets and HDR handling.

It's the "more pixels, not more detail" job, and it's the one you want before you print, before you feed a diffusion upscaler a better base, or whenever a model would hallucinate on top of clean data. No weights, no downloads, no GPU model to fit in VRAM - it's math over your tensor.

How it works

Nine kernels, all classic signal processing: lanczos, lanczos4, bicubic, mitchell, catrom, hermite, gaussian, bilinear, nearest. The source ships its own vectorized Lanczos implementation (with a scipy fast path and a numpy fallback) rather than trusting whatever resize the host provides. On top of the kernel it layers sharpening (unsharp-mask style, with a sharpen_radius), detail_enhancement, and antialiasing - the standard trilogy for keeping an upscale crisp without ringing halos.

The Flux presets are the friendly entry: Flux Default (balanced lanczos), Flux Sharp (lanczos4 + more sharpening), Flux Smooth (mitchell + gentle), Flux HDR, Flux Print, Flux Cinematic, and Flux Maximum - each a curated combo of method/sharpen/detail/AA rather than a different algorithm. process_in_linear (on by default) converts to linear, upscales, and converts back, which is the correct way to resize - interpolating gamma-encoded values smears brightness. input_color_space (sRGB/Linear/Auto) tells it what it's starting from.

For big images there's tiling: use_tiles with tile_size and tile_overlap splits the job so a huge upscale doesn't blow memory - the move when you're heading to 4K+ print sizes on limited VRAM.

The inputs that matter

  • scale_factor - 0.1 to 8×. Default 2.
  • preset - start here. Custom falls back to your manual settings.
  • method - the kernel. Lanczos for detail, Mitchell for smoothness.
  • sharpening, sharpen_radius, detail_enhancement, antialiasing - the post-kernel quality controls.
  • output_bit_depth - 32-bit Float, 16-bit Float, or 8-bit. 32 keeps the pack's float promise; 8-bit if your chain is display-bound.

Outputs: upscaled_image, plus width, height, and an info string describing what it did.

The honest take

Read the KB's upscaling hierarchy before you buy anything bigger. If your source is soft or damaged, Pro Upscale won't fix it - that's a SeedVR2/SUPIR job, and this node can be the cheap base step before those, not a replacement for them. But for already-sharp Flux output that needs to be 2× or 4× for print, this is faster than any model, deterministic, and it can't invent artifacts or faces. The community's strongest upscale comparison even concluded that interpolation reads more "natural" than generative upscalers on clean sources - this is that category, tuned.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt   # or requirements_windows.txt / requirements_linux.txt / requirements_mac_silicon.txt

Or search Radiance in ComfyUI Manager. Linux needs libopenexr-dev first; restart after.

Gotchas

Sharpening is where people overdo it: crank sharpening past ~0.8 and you get the classic white halos around edges, because unsharp mask is blur-and-difference and high amounts exaggerate the difference. The presets keep this sane; Custom doesn't protect you from yourself. Second, process_in_linear is correct but changes how a gamma-encoded source responds - if you're on an sRGB image and the result looks lighter or washed compared to the input, that's linear processing doing its job, not a bug. Third, tiling only engages when you turn use_tiles on; a giant single-pass upscale on low VRAM will OOM before you remember it exists.

CategoryFXTD STUDIOS/Radiance/Upscale

Inputs (14)

NameTypeDefaultDescription
imageIMAGEImage or batch to resize, display-encoded sRGB or linear float (see input_color_space). Alpha is resized separately.
scale_factorFLOAT2.00.1–8Output size as a multiple of the input (rounded down to whole pixels). Below 1.0 downscales.
presetCOMBOCustom uses the widgets below. Any other preset overrides method, sharpening, detail_enhancement and antialiasing, and the HDR/Cinematic presets force process_in_linear on.
methodoptCOMBOResampling kernel, run exactly on every path (GPU, CPU and tiled): lanczos (3 lobes), lanczos4, bicubic and catrom (Catmull-Rom), mitchell (B=C=1/3), hermite, gaussian, bilinear, nearest.
sharpeningoptFLOAT0.300–2Unsharp-mask amount applied after resizing. 0 = off, 1 = add the full detail difference once.
sharpen_radiusoptFLOAT1.00.5–5Gaussian sigma in output pixels for the unsharp mask. Larger sharpens coarser detail.
detail_enhancementoptFLOAT0.200–1Multi-scale luma detail boost (blur sigmas 1, 2 and 4 px) added equally to RGB after resizing. 0 = off.
antialiasingoptFLOAT0.300–1Edge-aware softening applied last: blends in a 1 px Gaussian blur in proportion to edge strength. 0 = off; counteracts sharpening on edges.
input_color_spaceoptCOMBOEncoding of the input. sRGB allows the linear-light conversion; Linear leaves values untouched. Auto: Linear when any value is outside 0-1 (HDR), else sRGB; the info output says which.
process_in_linearoptBOOLEANtrueDecode sRGB to linear before resampling and re-encode after, for gamma-correct filtering. Only acts when input_color_space is sRGB; linear/HDR input is never converted.
use_tilesoptBOOLEANfalseProcess image in overlapping tiles to handle large images that exceed VRAM.
tile_sizeoptINT512128–2048Input tile size in pixels for the tiled CPU path. Used only when tiling is on (or forced above 64 MP) and the image is larger than this.
tile_overlapoptINT6416–256Overlap in input pixels between tiles, blended to hide seams. Tiled path only.
output_bit_depthoptCOMBOPrecision of the result (always returned as float). 32-bit keeps values above 1.0; 16-bit rounds to half precision; 8-bit clamps to 0-1 and quantises to 256 levels.

Outputs (4)

NameTypeDescription
upscaled_imageIMAGE—
widthINT—
heightINT—
infoSTRING—