๐ฎ Smart USDU DiffDiff + CN (No Upscale)
Per-tile ControlNet and diffdiff on an image you've already upscaled
- upscaled_image
- model
- conditionings
- negative
- vae
- denoise_mask
- model_patch
- control_image
- control_mask
- IMAGE
Same pipeline as the Smart USDU DiffDiff + ControlNet node, with the pixel upscale moved out. No upscale_by, no upscale_model - it expects a pre-upscaled upscaled_image and runs the tiled, per-pixel-denoise, per-tile-ControlNet pass on top of that. If you're already running the Smart Tile Solver V6.2 to plan the grid and produce the upscale, this is the variant to reach for.
It's the middle of the three-way split in this family, and it's honestly the sensible default: let the solver plan an efficient grid (95โ100% efficiency, per its own math) and upscale with lanczos, then run one diffusion pass over the tiles with a canny/depth condition holding the structure and a denoise mask deciding what actually gets rebuilt. Do the pixel job and the detail job in separate, well-typed steps instead of cramming both into one node.
The wiring
The ControlNet machinery is identical to the full variant: optional control_image (cropped per tile to match the main image's tiling), model_patch (from a ModelPatchLoader), control_strength, and a separate control_mask. Both the patch and the control image must be connected for ControlNet to engage. The diffdiff pair - denoise_mask (white = more denoise, black = less) and multiplier (<1 = stronger, >1 = weaker) - is there too.
The one thing to keep straight: tile_width/tile_height are now in output space. The solver's numbers are the solver's numbers - wire tile_width, tile_height, and tile_padding (the overlap) straight from its INT outputs and you're guaranteed the grid lines up with the upscaled image.
Installing it
Ships 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 after. Only ComfyUI's own torch/numpy/Pillow are needed here - the big dependencies in requirements.txt serve other nodes in the pack. Free for personal use; commercial use requires the author's paid license.
Where people get burned
Feeding the un-upscaled source in is the top mistake - you get a 1.0-scale pass and think the node is broken. The control image must match the upscaled image's framing or per-tile cropping misaligns. And if you disconnect either model_patch or control_image, ControlNet silently switches off, leaving you with a diffdiff-only upscale that can drift harder than you expect at higher denoise - keep a canny map wired in when you want structure preserved.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| upscaled_image | IMAGE | โ | |
| 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 | โ |
| force_uniform_tiles | BOOLEAN | true | โ |
| tiled_decode | BOOLEAN | false | โ |
| denoise_maskopt | MASK | Optional mask for per-pixel denoise. White=more denoise, Black=less | |
| multiplieropt | FLOAT | 1.000-10โ10 | Controls effect strength. <1=stronger, >1=weaker |
| model_patchopt | MODEL_PATCH | ControlNet patch (from ModelPatchLoader) | |
| control_imageopt | IMAGE | Control image (e.g., Canny/Depth) - will be cropped per tile | |
| control_strengthopt | FLOAT | 1.00-10โ10 | ControlNet strength |
| control_maskopt | MASK | Optional mask for ControlNet (separate from denoise_mask) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |