IPAdapter Style & Composition Batch SDXL
Take the look from one image, the layout from another
- model
- ipadapter
- image_style
- image_composition
- image_negative
- attn_mask
- clip_vision
- MODEL
Most IPAdapter setups hand the model one reference and take everything from it - the colors, the brushwork, and the arrangement of stuff in the frame. This node splits that. You give it two separate images: one for style (the palette, texture, the vibe) and one for composition (where things sit, the overall layout), and it pulls each from its own source. That separation is the whole point, and it's genuinely one of the more useful tricks in the pack.
If you've ever wanted "paint this scene in that artist's style" without also inheriting the reference artist's exact framing, this is the node. It works by targeting different attention layers for style versus layout - the same idea behind InstantStyle, which cubiq's pack credits directly. The "Batch" in the name is the tell that this is the batched sibling, meant for when you're driving a batch of latents (think an AnimateDiff sequence) rather than a single still. For one image, the plain Style & Composition node is fine; grab this one when you're working across frames. And note the display name says SDXL - this variant targets SDXL, not SD 1.5.
How it fits the graph
It sits between your model loader and your sampler, like every other IPAdapter apply node. It takes a model and an ipadapter (both come out of a Unified Loader or the separate loader + model pair), plus your two IMAGE references, and it hands back a patched MODEL. That model output is all there is - you route it straight into your KSampler. Nothing downstream needs to know IPAdapter was involved.
The inputs that matter
image_styleandimage_composition- your two references. Style is the "what does it look like," composition is the "how is it arranged." Swap them and you'll immediately see why the split is useful.weight_styleandweight_composition- how hard each one pushes, default 1.0 each. This is where you'll spend your time. The general IPAdapter wisdom applies: back off toward 0.8 if the references start bulldozing your prompt. You can dial them independently, so if the style is landing but the layout is too rigid, drop justweight_composition.expand_style- a boolean that widens which layers the style touches. Flip it on if the style feels too timid; leave it off for a cleaner separation.start_at/end_at- the fraction of sampling where the adapter is active (0 to 1). Ending early (say 0.8) lets the last steps sharpen detail the adapter tends to soften.
embeds_scaling (how the embeddings get injected) defaults to something sane; a beginner can ignore it. The optional attn_mask lets you confine the effect to a region, and clip_vision lets you feed the encoder explicitly if your loader didn't.
Installing the pack
ComfyUI Manager is easiest: search ComfyUI IPAdapter plus, install, restart. Manual works too:
cd ComfyUI/custom_nodes
git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus
then restart ComfyUI. IPAdapter always wants the latest Comfy - if a node throws errors right after install, update Comfy before anything else. Then the weights: the CLIP vision encoders go in ComfyUI/models/clip_vision and the IPAdapter models in ComfyUI/models/ipadapter (create that folder if it's missing). If you use the Unified Loader, the filenames have to match the README's naming exactly or it won't find them.
Where people get burned
The single most common IPAdapter error, full stop, is the ClipVision/IPAdapter mismatch - you'll see it as a shape/size error the moment you queue. As one r/comfyui regular put it, it "still happens to me all the time, first thing I check on an error." It means your CLIP vision encoder doesn't match the IPAdapter model: SDXL adapters expect the ViT-H (or bigG, for the vit-G models) encoder, and pairing the wrong one blows up immediately. Since this node is SDXL-only, make sure both references, the adapter, and the encoder are all in the SDXL family.
One reality check worth having: this whole pack is maintenance-only now and loads on nothing past SDXL. On an SDXL or Illustrious workflow it's still excellent. If you're on Flux or newer, the style/composition split lives in different tools entirely.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| ipadapter | IPADAPTER | — | |
| image_style | IMAGE | — | |
| image_composition | IMAGE | — | |
| weight_style | FLOAT | 1.00-1–5 | — |
| weight_composition | FLOAT | 1.00-1–5 | — |
| expand_style | BOOLEAN | false | — |
| 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 | — | |
| attn_maskopt | MASK | — | |
| clip_visionopt | CLIP_VISION | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |