Easy Apply IPAdapter (StyleComposition)
Borrow one image's style and another's layout
- model
- image_style
- image_composition
- image_negative
- attn_mask
- clip_vision
- optional_ipadapter
- model
- ipadapter
The neat idea here: feed it two reference images and it'll take the look from one and the layout from the other. Style from image A, composition from image B. That's the thing you can't do with a single IP-Adapter pass, and it's genuinely useful when you have a color palette / rendering style you love and a separate shot with the framing you want.
IP-Adapter, as a technique, takes a reference image, pulls CLIP embeddings out of it, and injects them into the diffusion model through decoupled cross-attention - semantic content rather than spatial structure (that's ControlNet's job). This node is Easy-Use's wrapper over cubiq's ComfyUI_IPAdapter_plus, pre-wired for the style-plus-composition combo so you don't hand-assemble the encoder chain.
How it works
It runs IP-Adapter twice conceptually - once weighting toward the style reference, once toward the composition reference - and blends them onto your model. You get back a patched model plus the loaded ipadapter object (so you can chain another apply node without reloading).
The inputs and outputs that matter
modelin,model+ipadapterout. The model goes to your sampler.image_style- required. The reference whose style you want.image_composition- optional, but it's the whole point of this node. The reference whose layout you want.preset- picks the IP-Adapter model family: SD1.5, SDXL "PLUS (high strength)", ViT-G, kolors, FLUX/SD3.5, etc. Match this to your checkpoint - a SD1.5 preset on an SDXL model just fails.weight_style/weight_composition- the two dials you'll actually tune. Push composition up if the layout isn't holding; pull style down if the reference is overwhelming your prompt. Around 0.6–1.0 each is a sane starting zone.start_at/end_at- when in sampling the adapter is active.
Optional inputs include image_negative, attn_mask, clip_vision, and optional_ipadapter if you've already loaded one.
How to install it
ComfyUI Manager: search ComfyUI-Easy-Use, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install.bat / pip install -r requirements.txt, restart. You still need the IP-Adapter models and a CLIP vision model - Easy-Use wraps the logic but doesn't ship the weights. If you don't already have cubiq's IP-Adapter files in place, install them (the setup is the same as using IPAdapter_plus directly).
Common issues & troubleshooting
"IPAdapter model not found" / clip_vision errors. The preset you chose expects a specific IP-Adapter file and CLIP vision encoder that aren't installed. This is the #1 failure. Install the matching IP-Adapter models for your base model family; wire an explicit clip_vision if auto-detection misses.
The reference takes over the image. Above roughly weight 0.7–0.8, IP-Adapter starts drowning out your text prompt and flattening detail - a known trade-off, not a bug. Back the weights off until the prompt breathes again.
Style and composition bleed into each other. They're not perfectly separable; a very busy style reference will drag some of its own composition along. Try a cleaner, flatter style reference, or lean harder on weight_composition.
Wrong preset for your model. SD1.5 presets on SDXL (or vice versa) throw shape-mismatch errors. The preset list is explicit about which family each entry targets - read it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| image_style | IMAGE | — | |
| preset | COMBO | 9 options: LIGHT - SD1.5 only (low strength), STANDARD (medium strength), VIT-G (medium strength), PLUS (high strength), PLUS (kolors genernal), REGULAR - FLUX and SD3.5 only (high strength), +3 | |
| weight_style | FLOAT | 1.00-1–5 | — |
| weight_composition | FLOAT | 1.00-1–5 | — |
| expand_style | BOOLEAN | false | — |
| combine_embeds | COMBO | average | 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 | |
| cache_mode | COMBO | all | 5 options: insightface only, clip_vision only, ipadapter only, all, none |
| image_compositionopt | IMAGE | — | |
| image_negativeopt | IMAGE | — | |
| attn_maskopt | MASK | — | |
| clip_visionopt | CLIP_VISION | — | |
| optional_ipadapteropt | IPADAPTER | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| ipadapter | IPADAPTER | — |