Layer Images IPAdapter Advanced
Every product gets its own image conditioning
- layer_images
- layer_canvas
- model
- ipadapter
- image_negative
- clip_vision
- MODEL
- layerImages
- extendedMASK
"Layer Images IPAdapter Advanced" is the fanciest node in this pack, and the one with the most moving parts. It applies IP-Adapter image prompting per layer: for each layer of the type you select, it uses that layer's image as the reference and that layer's mask as the conditioning mask, so a product, a prop, and a hand each pull the model toward their own look independently - rather than one reference fighting to control the whole canvas.
That's the whole point of the layer system this pack builds toward. You describe an e-commerce scene (product, prop, hand, model), fuse it, and then instead of a single image-prompt reference you get targeted conditioning: the product region is guided by the product's reference, the hand region by the hand's reference, and so on. It's a neat trick, and it's built directly on cubiq's reference IP-Adapter implementation - the class is an adapted copy of IPAdapterAdvanced from ComfyUI_IPAdapter_plus.
The hard dependency - read this first
This node imports IPAdapterAdvanced from custom_nodes.ComfyUI_IPAdapter_plus.IPAdapterPlus, so you must have cubiq's ComfyUI_IPAdapter_plus installed or the node throws ComfyUI_IPAdapter_plus.IPAdapterPlus not found, you should install it first. That's a second pack on top of this one, and it's non-negotiable. Related quirk: the weight_type dropdown is populated from that pack's WEIGHT_TYPES - until ComfyUI_IPAdapter_plus is installed, it's an empty list, which is your clue something's missing.
How it works
It filters the layer list by layer_filter_type (same Product/Prop/Human-* choices as the rest of the family). Then, if layer_need_fuse is on, it composites the selected layers into one image, derives one mask, and runs IPAdapterAdvanced once with that fused reference + mask. If it's off, it runs IPAdapterAdvanced sequentially per layer, chaining the model through each call. Either way, layers you didn't select pass through untouched on the layerImages output, and an extendedMASK gives you the combined mask of everything that was conditioned.
Inputs that matter
- model, ipadapter - your diffusion model and an IPAdapter model (from an IPAdapter loader).
- layer_images, layer_filter_type, layer_need_fuse, layer_canvas - the layer-system plumbing, same as "Layer Image Seleted".
- weight (FLOAT, default
1,-1to5) - IP-Adapter strength. The community default for style-ish transfer tends to sit lower - 0.6–0.8 - and if it's too high the reference overrides the prompt entirely. - weight_type, combine_embeds, embeds_scaling - advanced IP-Adapter controls passed straight through from
IPAdapter_plus; leave them unless you know what they do. - start_at / end_at (defaults
0/1) - which denoising steps the adapter affects. - image_negative, clip_vision (optional) - negative reference and a custom CLIP vision model.
Outputs
- MODEL - your model, now conditioned.
- layerImages - the non-selected layers, untouched.
- extendedMASK - combined mask of the processed layers.
The honest take
This is a powerful node and a fiddly one. It's aimed at product-photography workflows where per-region identity matters; for a single-image style transfer you don't need it - plain IP-Adapter_plus is simpler. And treat the weight default of 1.0 with suspicion: that's often too hot for this kind of conditioning. Start lower, and remember IP-Adapter shines inside SD 1.5/SDXL workflows (nothing here loads on Flux-era models).
Installing it
Two packs, not one:
cd ComfyUI/custom_nodes
git clone https://github.com/longgui0318/comfyui-common-util
cd comfyui-common-util && pip install -r requirements.txt
# plus the required IP-Adapter pack (cubiq's ComfyUI_IPAdapter_plus via Manager or GitHub)
Restart after. requirements.txt lists only opencv-python, but this pack also imports scipy, scikit-image, and PyWavelets at load - if it won't load, pip install scipy scikit-image PyWavelets. And without ComfyUI_IPAdapter_plus, this node will refuse to run.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| layer_images | LAYER_IMAGES | — | |
| layer_filter_type | COMBO | 6 options: all, Product, Prop, Human-Hand, Human-Male, Human-Female | |
| layer_need_fuse | BOOLEAN | true | — |
| layer_canvas | IMAGE | — | |
| model | MODEL | — | |
| ipadapter | IPADAPTER | — | |
| weight | FLOAT | 1.00-1–5 | — |
| weight_type | COMBO | 0 options: | |
| combine_embeds | COMBO | 5 options: concat, add, subtract, average, norm average | |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| embeds_scaling | COMBO | 4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty | |
| image_negativeopt | IMAGE | — | |
| clip_visionopt | CLIP_VISION | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| layerImages | LAYER_IMAGES | — |
| extendedMASK | MASK | — |