Nodes/Pseudocomfy/Apply IPAdaper Conditioning (SDXL)
ComfyUI Node

Apply IPAdaper Conditioning (SDXL)

Give each masked region its own reference image with IPAdapter conditioning

By Pseudotools·Created 2 years ago·Updated 19 days ago· 4
Apply IPAdaper Conditioning (SDXL)
  • model
  • clip
  • ipadapter
  • mat_imgs_lst
  • mat_msks_lst
  • model
  • positive
  • negative
mat_txts_lst
env_scene
env_style
env_negative
width
height
env_cond_strength0.30
mat_cond_strength1.00
ipadapter_weight1.00
start_at0.00
end_at1.00

Dense diffusion tells each masked region what to say. Apply IPAdaper Conditioning (SDXL) is the sibling that tells each region what to look like. Where the Dense Diffusion node takes text prompts and masks, this one adds a per-region reference image and runs it through IPAdapter - so the wood region doesn't just get the prompt "white oak planks," it gets an actual photo of the grain you want, masked to only that part of the frame.

It's the ComfyUI half of the same architectural-rendering pipeline as its sibling, and it reuses the same list plumbing: you feed it the unpacked snapshot's material texts, images, and masks, plus the environment prompts, and it returns a patched model plus positive/negative conditioning ready for a KSampler.

The inputs that matter

Beyond the usual model, clip, ipadapter, the lists (mat_txts_lst, mat_imgs_lst, mat_msks_lst) and env_scene/env_style/env_negative, there are four dials you'll actually touch:

  • env_cond_strength (default 0.3) - how hard the full-canvas scene+style conditioning presses. Low by design; the scene is context, not content.
  • mat_cond_strength (default 1.0) - how hard each per-region text conditioning presses within its mask.
  • ipadapter_weight (default 1.0, range −1 to 3) - the strength of the reference-image attention. Crank it and the reference wins; drop toward 0.5 and the text does the talking. (IPAdapter's rule of thumb lives in the wider community: on SDXL, weight 0.6–0.8 is a sane starting point before you tune.)
  • start_at / end_at - which sampling steps the image conditioning is active for. Leave 0→1, or end early (e.g. 0.7) so the last steps stop fighting the reference.

One mechanism note worth knowing: the per-region text conditioning is applied with ConditioningSetMask + ConditioningCombine under the hood, and the image conditioning uses IPAdapter's attention path with the region mask as an attention mask - the reference only leaks inside its own region. If start_at > end_at it throws rather than silently doing nothing.

Wiring and prerequisites

ipadapter comes from PseudoIPAdapterUnifiedLoaderClone (the pack's clone of cubiq's loader), which is your reminder that this node doesn't bring its own weights. The README is explicit about what you need installed first: cubiq's ComfyUI_IPAdapter_plus custom nodes, a CLIP Vision model in models/clip_vision, and the IP-Adapter .safetensors in a models/ipadapter folder - for SDXL the recommended pick is ip-adapter-plus_sdxl_vit-h.safetensors. No IPAdapter model file, and the whole node is a non-starter.

It's an SDXL-only node in practice (the name says it, and the IPAdapter models are version-matched to SDXL). Masks must arrive as [1, H, W] tensors, and the material lists have to be lists - wire them from the snapshot unpacker, not from a plain text widget. If you're already running the Dense Diffusion path, this is the same graph with images swapped in for part of the text, and it's genuinely one of the cleanest per-region IPAdapter setups you'll find.

CategoryPseudocomfy/Conditioning

Inputs (16)

NameTypeDefaultDescription
modelMODEL
clipCLIP
ipadapterIPADAPTER
mat_txts_lstSTRING
mat_imgs_lstIMAGE
mat_msks_lstMASK
env_sceneSTRING
env_styleSTRING
env_negativeSTRING
widthINT
heightINT
env_cond_strengthFLOAT0.300–10
mat_cond_strengthFLOAT1.000–10
ipadapter_weightFLOAT1.00-1–3
start_atFLOAT0.000–1
end_atFLOAT1.000–1

Outputs (3)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING