IPAdapter FaceID Batch V2
Keep one face across a whole animation
- model
- ipadapter
- image
- image_negative
- attn_mask
- clip_vision
- insightface
- MODEL
- face_image
IPAdapter FaceID Batch V2 is the version of the FaceID node you reach for when your reference isn't one image but a stack of them - a video clip, an animation sequence, or a crossfade between two faces. It's the same face-conditioning machinery as the plain FaceID node, with the "Batch" difference that it unfolds the batch and applies per-frame weights. In plain terms: it lets the face drift from person A to person B frame by frame, or hold one face steady while the scene behind it changes.
What it actually does
Like every FaceID node, this one swaps the usual CLIP image embedding for an InsightFace ArcFace embedding - a vector describing facial geometry rather than general appearance. That identity vector, plus a CLIP pass for face structure, gets injected into the model through decoupled cross-attention, which is the trick that makes IP-Adapter work at all: the image conditioning runs on its own attention path so your text prompt keeps working next to it. FaceID needs a companion LoRA applied to the model for the identity to take hold - typical LoRA weight 0.5–1.0 - and it needs the insightface Python package plus a face model like buffalo_l sitting in ComfyUI/models/insightface.
The Batch variant inherits all of that and adds unfold_batch. That's what lets a weight schedule - from IPAdapter Weights V2 or the From Params family - assign a different strength to every frame. Feed it a weights list of length equal to your frame count and the face influence ramps, holds, or fades exactly where you tell it to.
The inputs that matter
The one you'll actually touch is weight (default 1.0, range −1 to 3) - overall face strength. If you're on FaceID Plus v2 weights, weight_faceidv2 (default 1.0, up to 5) is the second dial that blends the CLIP structure contribution in separately. start_at/end_at (0 to 1) control which slice of the denoising steps the adapter is active, and it's worth using: running an adapter across every step measurably softens detail. weight_type picks the curve - linear is fine to start. combine_embeds decides how multiple frames merge (concat keeps them distinct, average blends them toward one face). There are two outputs: MODEL (the patched model, straight into your KSampler) and face_image, the cropped, aligned face InsightFace detected - handy for verifying the node found the right face.
Installing it
ComfyUI Manager: search "ComfyUI_IPAdapter_plus_V2" and install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_IPAdapter_plus_V2
Restart ComfyUI. The adapter and CLIP vision weights go in ComfyUI/models/ipadapter and ComfyUI/models/clip_vision. FaceID additionally needs the insightface package (pip install insightface) and its models under ComfyUI/models/insightface - the classic pain point, so budget for it.
Gotchas
Two things bite people. First, FaceID weights are research-only - the license inherited from InsightFace means you can't sell anything built on this. Second, this whole pack is a renamed copy of cubiq's V2 codebase so it can sit next to the v1-style pack without node-name collisions, which also means it's a snapshot: it doesn't auto-track cubiq's upstream fixes. And a batch of faces is only as good as its alignment - if face_image looks off, your schedule will too.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| ipadapter | IPADAPTER | — | |
| image | IMAGE | — | |
| weight | FLOAT | 1.00-1–3 | — |
| weight_faceidv2 | FLOAT | 1.00-1–5 | — |
| weight_type | COMBO | 15 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +9 | |
| 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 | — | |
| insightfaceopt | INSIGHTFACE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| face_image | IMAGE | — |