Nodes/ComfyUI-ArchAi3d-Qwen/๐Ÿš€ Smart Ultimate SD Upscale
ComfyUI Node

๐Ÿš€ Smart Ultimate SD Upscale

The tiled upscaler that lets each tile read its own prompt

By amir84ferdosยทCreated 11 months agoยทUpdated 5 months agoยท 70
๐Ÿš€ Smart Ultimate SD Upscale
  • image
  • model
  • conditionings
  • negative
  • vae
  • upscale_model
  • IMAGE
โ—„upscale_by2.00โ–บ
โ—„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โ–บ

If you've ever tried to push a 1024px render up to print size on an 8GB card, you know the problem: the sampler can't hold a 4K latent, so it OOMs, tiles it badly, or quietly gives up. This node is the answer. It's a ComfyUI port of Ultimate SD Upscale - the A1111 tiled upscaler that's been the community workhorse for big outputs since 2023 - with one genuinely useful twist: it accepts a CONDITIONING_LIST, so each tile can be driven by its own prompt instead of one global one.

Why you'd reach for it

This is the "more detail AND more pixels on limited VRAM" rung of the upscaling ladder, per the framing in the KB's upscaling essay. It's not a pixel upscaler (that's ESRGAN/Lanczos, milliseconds, adds nothing) and it's not a detail restorer like SeedVR2. It's tiled diffusion: slice the image into tiles, run a real sampling pass on each one, feather the seams back together. You get arbitrary output size from a small card. If your whole image is one uniform scene, the plain UltimateSDUpscale from Impact Pack is the more battle-tested choice - grab this one when you want per-tile conditioning.

How it works

The math is USDU's classic grid: cols = ceil(output_width / tile_width), rows = ceil(output_height / tile_height). Each tile samples tile_padding extra pixels of context around it (that's context, not overlap), and mask_blur feathers the edges so adjacent tiles blend. The seam-fix modes - Band Pass, Half Tile, Half Tile + Intersections - do a second low-denoise pass over the boundaries to kill the grid lines. Tile order is row-major (left-to-right, top-to-bottom), which is exactly the order the pack's Smart Tile prompt nodes output their conditionings in. If your conditioning count doesn't match the tile count, the node logs a warning and reuses the last one.

The inputs that matter

You don't need to touch all 25. The ones a beginner actually sets:

  • conditionings - the CONDITIONING_LIST. The whole point. Wire in one per tile, or a single entry if you don't care.
  • denoise - default 0.2. This is your composition-safety knob. Raise it for more pronounced redraw, but past ~0.4 the layout starts drifting.
  • upscale_by - 1.5โ€“2x per pass is the sweet spot; going straight to 4x tempts hallucination.
  • upscale_model - an optional ESRGAN/4x model that pixel-upscales before diffusion so tiles stay aligned to real content.
  • tile_width / tile_height / tile_padding - 512/512/32 defaults are sane; drop tile size if you OOM.
  • mode_type - Linear for most work; Chess processes tiles in a checkerboard order that helps some seam modes.

Output is a single IMAGE - the stitched result, ready for a save node or another upscale pass.

Install

This ships inside the ArchAi3D Qwen pack, so install the pack once:

cd ComfyUI/custom_nodes
git clone https://github.com/amir84ferdos/ComfyUI-ArchAi3d-Qwen.git
cd ComfyUI-ArchAi3d-Qwen
pip install -r requirements.txt

Or skip all that: ComfyUI Manager โ†’ search "ArchAi3d Qwen" โ†’ Install โ†’ restart.

Common issues

The big one is seams - if your output shows a visible grid, you've left seam_fix_mode on None or set tile_padding too small. Turn on Band Pass and give it a couple more padding pixels. The other classic: conditioning-count mismatch warnings when you add a tile to the solver but forget to add a matching prompt. And know the license gotcha shared by the whole pack - free for personal use, paid license required for client/commercial work. Check that before you ship prints for money.

It's fiddly, it's slow, and it's the right tool when the job is "make this bigger with detail, on a card that shouldn't be able to."

CategoryArchAi3d/Upscaling/USDU

Inputs (25)

NameTypeDefaultDescription
imageIMAGEโ€”
modelMODELโ€”
conditioningsCONDITIONING_LISTโ€”
negativeCONDITIONINGโ€”
vaeVAEโ€”
upscale_byFLOAT2.000.05โ€“4โ€”
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โ€”
upscale_modelUPSCALE_MODELโ€”
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โ€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEโ€”