Nodes/ComfyUI-ArchAi3d-Qwen/๐ŸŽญ Smart USDU DiffDiff (No Upscale)
ComfyUI Node

๐ŸŽญ Smart USDU DiffDiff (No Upscale)

Differential-diffusion tiling, with the upscale step done elsewhere

By amir84ferdosยทCreated 11 months agoยทUpdated 5 months agoยท 70
๐ŸŽญ Smart USDU DiffDiff (No Upscale)
  • upscaled_image
  • model
  • conditionings
  • negative
  • vae
  • denoise_mask
  • IMAGE
โ—„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โ–บ
โ—„force_uniform_tilestrueโ–บ
โ—„tiled_decodefalseโ–บ
โ—„multiplier1.000โ–บ

This is the exact same node as Smart USDU Differential Diffusion, minus the upscaling. No upscale_by, no upscale_model - instead it takes a pre-upscaled image and tiles that, keeping all the per-pixel denoise-mask control. If you read the DiffDiffusion article, this one is the variant you want when the Smart Tile Solver is doing the pixel work upstream.

That split is worth doing more often than people do it. The Solver V6.2 computes the optimal tile grid and produces the lanczos upscale, so the "No Upscale" variants can take upscaled_image plus the exact tile_width/tile_height/overlap values the solver chose - the grid is guaranteed to line up with the image. Do it all inside the USDU node and you're letting it pick the grid implicitly, which is fine, but you lose the solver's efficiency planning.

What's here and what isn't

The full DiffDiff feature set is present: optional denoise_mask (white = more denoise, black = less), multiplier (<1 = stronger effect, >1 = weaker), per-tile conditionings list, and the whole USDU tiling suite - mode_type (Linear/Chess/None), tile_width/tile_height, mask_blur, tile_padding, and the seam-fix block. The only real differences from the non-NoUpscale version are:

  • upscaled_image replaces image (it's the same IMAGE type, renamed to make the contract obvious)
  • no upscale_by - the node assumes the upscale already happened, so it runs at 1.0
  • no upscale_model input at all

One subtle thing: because this node takes the pre-upscaled image, tile_width/tile_height are now in output pixel space, not input space. If the solver said tile 1024ร—1024 for a 2ร— upscale, that's the size to type in here. Get this wrong and you'll either be sampling way too much per tile or chopping the upscaled image into more tiles than the solver planned.

Installing it

It's one of the ~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

Then restart. This node needs nothing beyond ComfyUI's own torch/Pillow/numpy - the heavy dependencies in requirements.txt belong to other parts of the pack. Free for personal use; commercial use needs the author's paid license.

Common gotchas

Feeding the raw, un-upscaled source into upscaled_image is the classic mistake - you get a "no-op" 1.0-scale pass and wonder why nothing happened. Pair it with the solver, wire tile_params or the individual INT outputs through, and keep safe_guard on wherever the Matrix Search values are plumbed into the tile fields. If your conditioning list count doesn't match the total tile count, the node reuses the last entry rather than erroring - great when you want one prompt everywhere, a trap when you wanted per-tile prompts and miscounted.

CategoryArchAi3d/Upscaling/USDU

Inputs (25)

NameTypeDefaultDescription
upscaled_imageIMAGEโ€”
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โ€“8192โ€”
tile_heightINT51264โ€“8192โ€”
mask_blurINT80โ€“64โ€”
tile_paddingINT320โ€“8192โ€”
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โ€”
force_uniform_tilesBOOLEANtrueโ€”
tiled_decodeBOOLEANfalseโ€”
denoise_maskoptMASKOptional mask for per-pixel denoise. White=more denoise, Black=less
multiplieroptFLOAT1.000-10โ€“10Controls effect strength. <1=stronger, >1=weaker

Outputs (1)

NameTypeDescription
IMAGEIMAGEโ€”