๐๏ธ Smart USDU Universal (No Upscale) V3
Solver-driven upscaling with feather masks so tile edges stop fighting
- upscaled_image
- model
- conditionings
- negative
- vae
- denoise_mask
- model_patch
- control_image
- control_mask
- image
- debug_info
- debug_tiles
- debug_feather_masks
- debug_combined
The V3 of the solver-driven Universal upscaler answers a complaint that shows up constantly in tiled-upscale threads: tiles don't match at the boundaries. Each tile is an independent img2img pass, so even with overlapping context and mask_blur, adjacent tiles can land on slightly different colors or contrast, and you see the grid. V3's answer is a feather mask: a gradient zone at each tile's interior edges that tells the sampler to trust the source more near the boundary and regenerate more toward the tile center.
The feathering is the new headline feature: feather_enabled (default True), feather_width (16px gradient zone, must stay below tile_padding), and feather_blur (8px Gaussian). Interior edges get a 1.0โ0.0 gradient, while true outer image boundaries stay un-feathered so the image's edges don't fade. The practical effect is that tile-to-tile color drift - the thing that makes multi-tile upscales look patchworked - gets smoothed before blending, on top of the usual USDU seam-fix machinery.
What's on the board
Same solver contract as V2: upscaled_image + output_width/output_height/tiles_x/tiles_y/tile_width/tile_height/tile_padding from the Smart Tile Solver, safe_guard validation, the enable_diffdiff/enable_controlnet toggles, per-tile conditionings, sampler block, mode_type, seam fix, tiled_decode. Optional: denoise_mask, multiplier, model_patch, control_image, control_strength, control_mask.
The outputs are where V3 shows its debugging pedigree: image, debug_info, plus three visual debug outputs - debug_tiles (grid of input tile crops), debug_feather_masks (the masks as grayscale images), and debug_combined (tiles with the feather zones tinted red). If you want to see what the feather mask is doing, that last output is gold.
Installing it
Part of ComfyUI-ArchAi3d-Qwen by Amir Ferdos (ArchAi3d). ComfyUI Manager โ search "ArchAi3d Qwen" โ install โ restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/amir84ferdos/ComfyUI-ArchAi3d-Qwen.git
cd ComfyUI-ArchAi3d-Qwen
pip install -r requirements.txt
Restart after. Only ComfyUI's own torch/numpy/Pillow are needed; the heavy deps in requirements.txt serve other pack nodes. Free for personal use; commercial use needs the paid license.
Where it trips people up
feather_width must be less than tile_padding or the gradient can't fit inside the padded context - the tooltip calls it out, and the failure mode is muddy edges. Feathering trades a little per-tile regenerated detail for consistency: if your upscale looks too blended and soft, lower feather_width or turn feather_enabled off rather than fighting it. And it inherits the family rules - solver values in, raw source out, safe_guard on until you trust the graph.
Inputs (38)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_image | IMAGE | Pre-upscaled image from Matrix Search | |
| output_width | INT | 102464โ8192 | โ |
| output_height | INT | 102464โ8192 | โ |
| tiles_x | INT | 21โ64 | โ |
| tiles_y | INT | 21โ64 | โ |
| safe_guard | BOOLEAN | true | โ |
| enable_diffdiff | BOOLEAN | true | โ |
| enable_controlnet | BOOLEAN | true | โ |
| feather_enabled | BOOLEAN | true | Enable tile feather mask for color consistency |
| feather_width | INT | 164โ128 | Width of gradient zone (must be < tile_padding) |
| feather_blur | INT | 80โ64 | Gaussian blur radius for feather gradient |
| model | MODEL | โ | |
| conditionings | CONDITIONING_LIST | โ | |
| negative | CONDITIONING | โ | |
| vae | VAE | โ | |
| seed | INT | 00โ18446744073709550000 | โ |
| steps | INT | 201โ10000 | โ |
| cfg | FLOAT | 8.000โ100 | โ |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.200โ1 | โ |
| mode_type | COMBO | 3 options: Linear, Chess, None | |
| tile_width | INT | 51264โ8192 | โ |
| tile_height | INT | 51264โ8192 | โ |
| mask_blur | INT | 80โ64 | โ |
| tile_padding | INT | 320โ8192 | โ |
| seam_fix_mode | COMBO | 4 options: None, Band Pass, Half Tile, Half Tile + Intersections | |
| seam_fix_denoise | FLOAT | 1.000โ1 | โ |
| seam_fix_width | INT | 640โ8192 | โ |
| seam_fix_mask_blur | INT | 80โ64 | โ |
| seam_fix_padding | INT | 160โ8192 | โ |
| tiled_decode | BOOLEAN | false | โ |
| denoise_maskopt | MASK | Optional mask for per-pixel denoise | |
| multiplieropt | FLOAT | 1.000-10โ10 | โ |
| model_patchopt | MODEL_PATCH | ControlNet patch | |
| control_imageopt | IMAGE | Control image for ControlNet | |
| control_strengthopt | FLOAT | 1.00-10โ10 | โ |
| control_maskopt | MASK | Optional mask for ControlNet |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | โ |
| debug_info | STRING | โ |
| debug_tiles | IMAGE | โ |
| debug_feather_masks | IMAGE | โ |
| debug_combined | IMAGE | โ |