Nodes/ComfyUI-ArchAi3d-Qwen/๐ŸŽ›๏ธ Smart USDU Universal (No Upscale) V2
ComfyUI Node

๐ŸŽ›๏ธ Smart USDU Universal (No Upscale) V2

Same solver-driven upscaler, now with a debug string to read the run

By amir84ferdosยทCreated 11 months agoยทUpdated 5 months agoยท 70
๐ŸŽ›๏ธ Smart USDU Universal (No Upscale) V2
  • upscaled_image
  • model
  • conditionings
  • negative
  • vae
  • denoise_mask
  • model_patch
  • control_image
  • control_mask
  • image
  • debug_info
โ—„output_width1024โ–บ
โ—„output_height1024โ–บ
โ—„tiles_x2โ–บ
โ—„tiles_y2โ–บ
โ—„safe_guardtrueโ–บ
โ—„enable_diffdifftrueโ–บ
โ—„enable_controlnettrueโ–บ
โ—„seed0โ–บ
โ—„steps20โ–บ
โ—„cfg8.00โ–บ
โ—„sampler_nameโ–พโ–บ
โ—„schedulerโ–พโ–บ
โ—„denoise0.20โ–บ
โ—„mode_typeโ–พโ–บ
โ—„tile_width512โ–บ
โ—„tile_height512โ–บ
โ—„mask_blur8โ–บ
โ—„tile_padding32โ–บ
โ—„seam_fix_modeโ–พโ–บ
โ—„seam_fix_denoise1.00โ–บ
โ—„seam_fix_width64โ–บ
โ—„seam_fix_mask_blur8โ–บ
โ—„seam_fix_padding16โ–บ
โ—„tiled_decodefalseโ–บ
โ—„multiplier1.000โ–บ
โ—„control_strength1.00โ–บ

The V2 of the solver-driven Universal (No Upscale) is a small but useful step: it adds a second output, debug_info (STRING), alongside the IMAGE. Everything else is the same contract as V1 - pre-upscaled upscaled_image plus output_width, output_height, tiles_x, tiles_y, tile_width, tile_height, tile_padding from the Smart Tile Solver, the safe_guard validation switch, and the Universal feature toggles (enable_diffdiff, enable_controlnet).

So why would you pick V2 over V1? Debugging. Tile-upscaling failures are notoriously opaque - a seam shows up and you don't know which tile did it, or the grid silently came out wrong. The debug_info string gives you a text log of what the node actually did: tile layout, per-tile processing, conditioning count, warnings. Wire it to a text display node or just read it in the console, and the mystery usually evaporates.

That's a bigger deal than it sounds, because the two silent failure modes in this family - conditioning count โ‰  tile count, and a safe_guard bypass hiding a wrong value - are exactly the kind of thing a debug log makes visible. If you're still tuning your first solverโ†’USDU graph, take V2 over V1. When it's stable and you want a cleaner node, V1 is fine.

The inputs, briefly

Same required set as V1: upscaled_image, output_width/output_height/tiles_x/tiles_y/tile_width/tile_height/tile_padding (all "from Matrix Search" per the tooltips), safe_guard, the two toggles, model/conditionings/negative/vae, the sampler block, mode_type, mask_blur, seam-fix settings, tiled_decode. Optional: denoise_mask, multiplier, model_patch, control_image, control_strength, control_mask. Outputs: image + debug_info.

Installing it

One of ~100 nodes in 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. Only ComfyUI's own torch/numpy/Pillow required; the heavy deps in requirements.txt serve other pack nodes. Free for personal/non-commercial use; commercial work needs the paid license.

The usual suspects

Same gotchas as V1, plus one new habit: actually read the debug_info when a seam or grid problem shows up - it usually names the tile and the mismatch. Keep safe_guard on during setup, feed the solver's upscaled image (not the raw source), and remember the tile sizes here are output-space.

CategoryArchAi3d/Upscaling/USDU

Inputs (35)

NameTypeDefaultDescription
upscaled_imageIMAGEPre-upscaled image from Matrix Search
output_widthINT102464โ€“8192Expected output width from Matrix Search
output_heightINT102464โ€“8192Expected output height from Matrix Search
tiles_xINT21โ€“64Number of tile columns from Matrix Search
tiles_yINT21โ€“64Number of tile rows from Matrix Search
safe_guardBOOLEANtrueValidate all values match Matrix Search exactly. Error if ANY mismatch.
enable_diffdiffBOOLEANtrueEnable/disable Differential Diffusion
enable_controlnetBOOLEANtrueEnable/disable ControlNet per-tile
modelMODELโ€”
conditioningsCONDITIONING_LISTโ€”
negativeCONDITIONINGโ€”
vaeVAEโ€”
seedINT00โ€“18446744073709550000โ€”
stepsINT201โ€“10000โ€”
cfgFLOAT8.000โ€“100โ€”
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT0.200โ€“1โ€”
mode_typeCOMBO3 options: Linear, Chess, None
tile_widthINT51264โ€“8192Tile width from Matrix Search
tile_heightINT51264โ€“8192Tile height from Matrix Search
mask_blurINT80โ€“64โ€”
tile_paddingINT320โ€“8192Overlap/padding from Matrix Search
seam_fix_modeCOMBO4 options: None, Band Pass, Half Tile, Half Tile + Intersections
seam_fix_denoiseFLOAT1.000โ€“1โ€”
seam_fix_widthINT640โ€“8192โ€”
seam_fix_mask_blurINT80โ€“64โ€”
seam_fix_paddingINT160โ€“8192โ€”
tiled_decodeBOOLEANfalseโ€”
denoise_maskoptMASKOptional mask for per-pixel denoise. White=more denoise, Black=less
multiplieroptFLOAT1.000-10โ€“10Controls effect strength. <1=stronger, >1=weaker
model_patchoptMODEL_PATCHControlNet patch (from ModelPatchLoader)
control_imageoptIMAGEControl image (e.g., Canny/Depth) - will be cropped per tile
control_strengthoptFLOAT1.00-10โ€“10ControlNet strength
control_maskoptMASKOptional mask for ControlNet (separate from denoise_mask)

Outputs (2)

NameTypeDescription
imageIMAGEโ€”
debug_infoSTRINGโ€”