Nodes/ComfyUI_IPAdapter_plus/IPAdapter Style & Composition Batch SDXL
ComfyUI Node Runs on cloud

IPAdapter Style & Composition Batch SDXL

Take the look from one image, the layout from another

By cubiq·Created 3 years ago·Updated about a year ago· 6,086
IPAdapter Style & Composition Batch SDXL
  • model
  • ipadapter
  • image_style
  • image_composition
  • image_negative
  • attn_mask
  • clip_vision
  • MODEL
weight_style1.00
weight_composition1.00
expand_stylefalse
start_at0.000
end_at1.000
embeds_scaling

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_style and image_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_style and weight_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 just weight_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.

Categoryipadapter/style_composition

Inputs (13)

NameTypeDefaultDescription
modelMODEL
ipadapterIPADAPTER
image_styleIMAGE
image_compositionIMAGE
weight_styleFLOAT1.00-1–5
weight_compositionFLOAT1.00-1–5
expand_styleBOOLEANfalse
start_atFLOAT0.0000–1
end_atFLOAT1.0000–1
embeds_scalingCOMBO4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty
image_negativeoptIMAGE
attn_maskoptMASK
clip_visionoptCLIP_VISION

Outputs (1)

NameTypeDescription
MODELMODEL