Upscale Tiler
The tiling engine, plus the fix for upscaler colour drift
- images
- upscale_model
- source
- reference
- image_a
- image_b
- info
Two jobs in one node, and the second one is the reason to install it.
Tile is the memory-safe upscale path: chop the image into overlapping patches, upscale each one, blend them back together so you can't see the seams. ColourFix is a histogram match that removes the colour drift an upscaler leaves behind. Both are things you'd otherwise build by hand out of tile, paste and colour-match nodes, badly.
Tile mode
operation: Tile, images in, image_a out. Your controls: scale (2×, 4×, or 8× as two cascaded 4× passes), tile_size (default 512, input pixels), overlap (default 128), and blend_mode.
On the blend: laplacian_pyramid is the default and best quality - a 4-level pyramid blends each frequency band separately, so coarse structure blends over a long distance while fine detail blends tightly, which is why it doesn't produce the soft halo you get from naive feathering. gaussian_feather is the fast one; linear is the simple one. The module's own documentation adds the rule of thumb: overlap should be ≥20% of tile_size, which is exactly what a 128/512 default pairing satisfies. Shrink the overlap to save time and you'll find out why.
model_tier selects the built-in backend (Real-ESRGAN, HAT-L, SwinIR-L, SD x4, SeedVR2), or connect your own model to upscale_model - the tooltip is explicit that any ComfyUI UPSCALE_MODEL works and its native scale should match scale.
ColourFix mode
This is the sleeper feature. Every GAN upscaler drifts colour slightly - a touch warmer, a touch more contrast - and on a sequence that drift compounds until the shot no longer matches its neighbours. The fix has always been a histogram match back to the source; here it's one mode with four controls.
Wire the upscaled image into source and the original pre-upscale image into reference, set operation: ColourFix, then dial cf_strength (default 1, "full CDF match") and n_bins (default 512, the histogram resolution). Both images are optional in the schema - which means you get a confusing no-op if you leave them unconnected, not an error. Connect both.
Outputs and the one real trap
image_a, image_b and info. In Tile mode the pair gives you the processed result; in ColourFix mode the matched one. Read info - it reports what ran.
The trap is in the input list: Tile mode's output is clamped to 0–1. So if you're upscaling a scene-linear HDR plate, this is the wrong node in that mode - you'll lose everything above white. The pack's Upscale Image has proper HDR handling (hdr_mode, color_encoding) for that job, and the pack's Upscale 32-bit (RadianceProUpscale) for the plain-resize case. Upscale Tiler is the LDR tiling workhorse and the colour-drift fixer.
Install
- ComfyUI 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: use python_embeded\python.exe for that line.
The built-in backends fetch their weights on first use - Real-ESRGAN and SwinIR-L download from their original releases, SHA-256 checked. HAT-L is the exception: it lives on Google Drive with no pinned direct download, so it's a manual install, and until you do it Tier 2 quietly runs SwinIR-L at 4x and Real-ESRGAN at 2x. SeedVR2 (a Tier 3 option elsewhere and available here too) needs the separate ComfyUI-SeedVR2_VideoUpscaler pack for its weights. RADIANCE_ALLOW_DOWNLOADS=0 or RADIANCE_UPSCALE_OFFLINE=1 stops all of it.
Practical notes
Tiling is a VRAM dial, so tune it against your card rather than a number from a forum: 512 with 128 overlap is a sane start, 256 with 64 for a small card, 1024 with 256 when you have headroom and want the model to see more context per tile.
One subtlety specific to the pack: the confidence-style outputs elsewhere in the Upscale family (the ones showing tile weights) are geometric - they tell you where blending happened, not how much the model invented. Same spirit here: blend_mode changes how seamless the result looks, not how true it is. If your upscaled detail is wrong, a better blend won't fix it; a different tier will.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| operation | COMBO | Tile | Tile: tiled upscale of images (output clamped to 0-1). ColourFix: histogram-match source to reference to remove upscaler colour drift. |
| imagesopt | IMAGE | Input image batch (B,H,W,C) float32. | |
| scaleopt | COMBO | 4× | Upscale factor. 8× uses two cascaded 4× passes. |
| tile_sizeopt | INT | 512128–2048 | Tile side in input pixels. Smaller = less VRAM. |
| overlapopt | INT | 12832–512 | Tile overlap in input pixels. ≥20% of tile_size recommended. |
| blend_modeopt | COMBO | laplacian_pyramid | laplacian_pyramid: best quality. gaussian_feather: fast. linear: simple. |
| upscale_modelopt | UPSCALE_MODEL | Any ComfyUI UPSCALE_MODEL; its native scale should match scale. Leave empty to use the built-in model chosen by model_tier. | |
| model_tieropt | COMBO | tier1_fast (Real-ESRGAN — GAN, ms/frame) | Built-in model tier when no upscale_model is connected. |
| sourceopt | IMAGE | Upscaled image with colour drift (ColourFix mode). | |
| referenceopt | IMAGE | Original pre-upscale image — colour reference (ColourFix mode). | |
| cf_strengthopt | FLOAT | 1.000–1 | ColourFix strength: 0 = off, 1 = full CDF match. |
| n_binsopt | INT | 51264–2048 | Histogram resolution (ColourFix mode). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image_a | IMAGE | — |
| image_b | IMAGE | — |
| info | STRING | — |