Nodes/ComfyUI-ArchAi3d-Qwen/๐Ÿš€ Smart USDU Split-Latent
ComfyUI Node

๐Ÿš€ Smart USDU Split-Latent

Different denoise for masked and unmasked regions, handled in latent space

By amir84ferdosยทCreated 11 months agoยทUpdated 5 months agoยท 70
๐Ÿš€ Smart USDU Split-Latent
  • image
  • model
  • conditionings
  • negative
  • vae
  • mask
  • upscale_model
  • IMAGE
โ—„denoise_high0.60โ–บ
โ—„denoise_low0.20โ–บ
โ—„upscale_by2.00โ–บ
โ—„seed0โ–บ
โ—„steps20โ–บ
โ—„cfg8.00โ–บ
โ—„sampler_nameโ–พโ–บ
โ—„schedulerโ–พโ–บ
โ—„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โ–บ

Most of the USDU family does its per-region control in image space with masks and patches. This one takes a different route: it's a standalone implementation of the "split-latent" idea, where the image is VAE-encoded once, the latent is split into masked/unmasked regions, and each region gets its own denoise level before sampling - the node's docstring calls it "manual noise injection with mask-based blending before sampling."

The pitch: instead of running two separate img2img passes at different denoise strengths and compositing the outputs (which gives you a hard seam you then have to hide), you inject noise at the right level per region inside the latent, sample once, and get one coherent image where the masked area changed a lot and the unmasked area barely moved. It's a genuinely different mechanism from the DiffDiff nodes, and it's the one to reach for when you want region-specific regeneration without the per-pixel patch overhead.

What it takes

The required inputs tell the story: image, model, conditionings, negative, vae, and a required mask - there's no optional path here, the mask is the whole point. Then two denoise values:

  • denoise_high (default 0.6) - applied to the masked region
  • denoise_low (default 0.2) - applied to the unmasked region

Beyond that it's the standard USDU block: upscale_by, upscale_model, seed/steps/cfg/sampler_name/scheduler, mode_type, tile size/padding/blur, seam-fix settings, force_uniform_tiles, tiled_decode. Output is a single IMAGE.

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, then it's usable. This node pulls from ComfyUI's own nodes module (VAE encode/decode, common_ksampler), so no extra install beyond the pack. Free for personal use; commercial use needs the paid license.

Where to be careful

It runs its own sampling loop - that's the point of being standalone - so it ignores whatever sampler objects you have elsewhere and uses the sampler_name/scheduler dropdowns. The mask is the single most important input: a soft, low-contrast mask will average both denoise levels toward a mushy middle, so keep boundaries crisp. And because masked regions get sampled at 0.6 denoise by default, that area will be visibly regenerated, not just detailed - if the masked zone is a face you need to keep, drop denoise_high toward 0.4 and feed it a good prompt, or the split-latent approach will happily rebuild it.

CategoryArchAi3d/Upscaling/USDU

Inputs (27)

NameTypeDefaultDescription
imageIMAGEโ€”
modelMODELโ€”
conditioningsCONDITIONING_LISTโ€”
negativeCONDITIONINGโ€”
vaeVAEโ€”
maskMASKโ€”
denoise_highFLOAT0.600โ€“1โ€”
denoise_lowFLOAT0.200โ€“1โ€”
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
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โ€”