IPAdapter FaceID Batch
Put a real face into a batch of generations
- model
- ipadapter
- image
- image_negative
- attn_mask
- clip_vision
- insightface
- MODEL
- face_image
FaceID is the branch of IPAdapter that's actually good at faces. Regular IPAdapter reads a CLIP embedding - a general "what does this look like" fingerprint - which is great for style and only okay for identity. FaceID swaps that for an InsightFace ArcFace embedding, the same kind of vector face-recognition systems use, so it encodes facial geometry rather than surface appearance. That's what made it the go-to "consistent face without training a LoRA" tool through the SD 1.5 and SDXL years. This node is the Batch variant - the one you use when you're conditioning a whole batch of latents, like an animation or a grid of a person in different poses.
Set expectations, though: FaceID gets you a strong likeness, not a perfect one. The standing community verdict is that it's "great if you don't care about photorealism" - excellent for stylized work, a bit short of a flawless photo-real match. People routinely finish with a pixel-level face swap on top to close the gap. And FaceID is where it works best on SD 1.5; the SDXL ports are widely called weaker.
How it works
Under the hood it detects the face in your image with InsightFace, extracts the identity embedding, and injects it into the model - but because that identity signal is harder to absorb than a CLIP embedding, FaceID models need a companion LoRA loaded alongside them. Each FaceID model is paired with its own specific LoRA; mismatch them and it won't work right. Use the Unified Loader FaceID and it handles the LoRA for you if your filenames follow the naming convention. The node returns a patched MODEL plus a face_image output showing the cropped face it detected, which is handy for confirming it locked onto the right one.
The inputs that matter
image- the face reference. A clear, front-ish shot works far better than a tricky angle.weightandweight_faceidv2- overall strength and the FaceID-v2-specific contribution. If you're on a v2 model,weight_faceidv2is the dial for how hard the identity pushes.weight_type- the profile enum (linear, ease curves, style/composition options).insightface(optional but effectively required for FaceID) - the InsightFace loader output. Without it, FaceID has nothing to extract identity with.
combine_embeds, start_at / end_at, and embeds_scaling behave as across the pack. Optional attn_mask, image_negative, and clip_vision cover masking, a negative reference, and the encoder.
Installing the pack
ComfyUI Manager: search ComfyUI IPAdapter plus, install, restart. Or cd ComfyUI/custom_nodes && git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus, then restart. FaceID has extra requirements the CLIP variants don't:
- The
insightfacePython package must be installed in your ComfyUI environment. This is a genuine install headache - plenty of people get stuck here - so budget time and check the pack's linked issue if the import fails. - The FaceID model goes in
ComfyUI/models/ipadapterand its paired LoRA inComfyUI/models/loras, named per the README so the Unified Loader can match them.
Where people get burned
Two big ones. First, the LoRA. Most FaceID models are useless without their companion LoRA, and it has to be the right one for that exact model - this is the number-one "why is my face all wrong" cause. Let the Unified Loader FaceID pair them, or wire the matching LoRA yourself.
Second, licensing, if you sell anything. FaceID rides on InsightFace's embeddings, and InsightFace's pretrained models are non-commercial - so FaceID is research-only, full stop, regardless of what the code license says. For commercial face work, stay on the CLIP-based Plus Face / Full Face variants, which are Apache 2.0 and skip the face-recognition step entirely. And the usual scope note: FaceID lives on SD 1.5 and SDXL, strongest on SD 1.5, with nothing for Flux.
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 | — |