IPAdapter Precise Composition Batch V2
Composition control, one reference per frame
- model
- ipadapter
- image
- image_negative
- attn_mask
- clip_vision
- MODEL
The batch sibling of IPAdapterPreciseCompositionV2. Same idea - a dedicated composition_boost dial that biases IP-Adapter toward the reference's layout rather than its look - but instead of one reference image, it takes a batch and conditions each frame separately. The whole "Batch" designation here means unfold_batch = True under the hood: every image in the image input is encoded and conditioned as its own job, so frame 3's composition reference doesn't smear into frame 17's. For animation and sequence work where layout matters frame by frame, that's precisely what you want.
The inputs mirror the single version: image, weight, composition_boost (−5 to 5, default 0), combine_embeds (concat/add/subtract/average/norm average), start_at, end_at, and embeds_scaling. Optional image_negative, attn_mask, clip_vision. One output, MODEL, into your sampler. If you've read the single-image article, everything there about the knob transfers - positive values push the model to obey the reference's spatial arrangement, negative values suppress it, and a few tenths are already visible.
How the batch version differs
Only in the per-frame handling, but that difference is the reason the node exists. With the non-batch node, feeding it a multi-image batch folds the references into one conditioning - usable for "condition on a stack of similar layouts," wrong for "each frame should follow its own composition." This node keeps them apart. If you've got a storyboard where every frame has a different arrangement you want respected, this is the one. If you're doing a single still, the non-batch version is simpler and identical in effect.
When you'd reach for it
Animation with per-frame composition references, batch variation generation where each variation pairs with its own layout reference, or any sequence where "layout" is the signal you care about keeping frame-accurate. The usual IP-Adapter caveats apply harder here: it biases composition, it doesn't lock it - for pixel-precise placement you still want ControlNet stacked alongside.
Install
Part of chflame163/ComfyUI_IPAdapter_plus_V2, the V2 fork of cubiq's pack:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_IPAdapter_plus_V2
or ComfyUI Manager → search ComfyUI_IPAdapter_plus_V2, then restart. No pip requirements.
Gotchas
Batch-size mismatch is the main trap - the reference batch must line up with your frame count or frames silently pair with the wrong composition. And per-frame processing is slower than a single pass; if you only have one composition reference, don't pay the batch tax - use the single version. Everything else is the single node's gotchas: move composition_boost in small steps, and don't expect it to substitute for ControlNet's spatial locking.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| ipadapter | IPADAPTER | — | |
| image | IMAGE | — | |
| weight | FLOAT | 1.00-1–5 | — |
| composition_boost | FLOAT | 0.00-5–5 | — |
| 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 | — | |
| attn_maskopt | MASK | — | |
| clip_visionopt | CLIP_VISION | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |