Nodes/radiance/Upscale Router
ComfyUI Node

Upscale Router

It measures noise and sharpness, and it does not know faces

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Upscale Router
  • images
  • recommended_tier
  • content_class
  • stats_json
  • images
◄prefer_speedfalse►
◄sample_frame0►

The interesting thing about this node is not what it does - it's that the author wrote down exactly how dumb it is. Upscale Router measures four image statistics on one frame and recommends a model tier. In the source, where a vendor would say "AI-powered content analysis," this one says: content_class comes "from four image statistics; there is no face, text or scene classifier."

That's the right way to ship a heuristic, and it tells you both how to use it and when to ignore it.

What it measures

Noise, sharpness, saturation, and a derived ai_likelihood. The source maths: sharpness is the standard deviation of an inner Laplacian normalised by mean luma, scaled and clamped; ai_likelihood is a weighted blend - 40% inverted noise, 35% saturation, 25% sharpness - described in the docstring as "a weighted blend of the other three, not a detector." So a clean, saturated, gently sharp image reads as AI-generated. Which, honestly, is a fair description of a lot of AI output, and equally of a well-shot photograph.

content_class is one of ai_generated, degraded, greyscale, high_detail or generic. prefer_speed overrides everything and always returns Tier 1 fast. sample_frame (default 0) picks which frame of a video batch to analyse - measure on a representative frame, not on a black leader.

Outputs: recommended_tier (a STRING whose values match the model_tier dropdowns elsewhere in the pack), content_class, stats_json with the raw numbers, and images - your input, unchanged. Nothing here touches pixels.

How to actually use it

The honest verdict: this is an advice node, not an autopilot. A STRING output doesn't become an enum widget on its own, so you read the recommendation off the report and set the tier - or use the router in Route-style inspection on a shot you're unsure about before committing to a slow tier.

Where it's genuinely useful is video, and it's the same reason a QC pass exists in any VFX pipeline: you have 400 frames and a vague sense that some of them are softer, noisier or more compressed than others. Point sample_frame at a few positions, watch content_class and stats_json change, and you learn something true about your clip - that the first minute is grainy, that the last third is smeared - instead of guessing from the one frame you happened to look at.

It's also a decent sanity check on your own assumptions. Everybody believes they can tell AI output from a photograph at a glance. ai_likelihood letting a clean photo through as ai_generated is a useful reminder that the statistics are about image structure, not provenance.

Install

  1. ComfyUI Manager → search Radiance → Install → restart → refresh the browser.
  2. Or manually:
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: run the pip line with python_embeded\python.exe. This node downloads no weights and needs no model - it's statistics on a tensor. Radiance as a whole is a heavy install (OpenEXR, OpenImageIO, OpenColorIO, transformers, diffusers); if Manager installs an older build than the README's 3.5.0, hit Update or git pull in custom_nodes/radiance.

Gotchas

Analysis is on a single frame. Fast GAN upscaling done frame by frame flickers, and no amount of router advice fixes that - for video the temporal question matters more than the content one, and the pack's Upscale Video is where that's handled.

And don't ship on recommended_tier alone if a face is in frame. The node's own documentation says there's no face classifier, so the case the community cares about most - a recognisable person you don't want rewritten - is precisely the case it cannot see.

CategoryFXTD STUDIOS/Radiance/Upscale

Inputs (3)

NameTypeDefaultDescription
imagesIMAGEImage or frame batch to analyse; returned unchanged on the images output.
prefer_speedBOOLEANfalseAlways recommend Tier 1 fast regardless of content.
sample_frameINT00–9999Index of frame to analyse (for video batches).

Outputs (4)

NameTypeDescription
recommended_tierSTRING—
content_classSTRING—
stats_jsonSTRING—
imagesIMAGE—