IPAdapter FaceID Kolors V2
Face consistency on the Kolors model
- model
- ipadapter
- image
- image_negative
- attn_mask
- clip_vision
- insightface
- MODEL
- face_image
IPAdapter FaceID Kolors V2 is the niche-of-a-niche node: FaceID identity conditioning, but for the Kolors base model. If you're generating with Kolors checkpoints and want a specific face without training a LoRA, this is one of the very few ways to do it, and honestly, it's about the only reason anyone lands here. For everyone working on SD1.5 or SDXL, the plain IPAdapter FaceID V2 is the node you want; this one exists specifically because Kolors uses a different CLIP vision setup (336×336) and needed its own adapter weights.
How it works
Mechanically it's FaceID with one extra dial. Your reference face gets an InsightFace ArcFace embedding (the biometric vector that encodes facial geometry), combined with a CLIP structure pass and the FaceID companion LoRA. On top of that, Kolors brings weight_kolors (default 1.0, up to 5) - a third strength control that balances the Kolors-specific adapter contribution against the FaceID v2 contribution. So you get three weights to juggle: weight for overall strength (default 1.0, up to 3), weight_faceidv2 for the FaceID structure component (default 1.0, up to 5), and weight_kolors for the Kolors component. Everything else - weight_type, combine_embeds, start_at/end_at, embeds_scaling, optional image_negative, attn_mask, clip_vision, insightface - matches the other FaceID nodes. Outputs are MODEL plus face_image, the cropped aligned face InsightFace detected.
The baggage you're signing up for
Everything hard about FaceID is here and then some. You need the insightface Python package and its models in ComfyUI/models/insightface. You need the Kolors FaceID adapter weights and the companion LoRA in ComfyUI/models/ipadapter and ComfyUI/models/loras - and Kolors adapter weights are scarcer and less battle-tested than the SD1.5 line, so expect to hunt for them. The FaceID licensing trap applies fully: these weights inherit InsightFace's non-commercial terms, so nothing you build with this is sellable. And the general FaceID verdict holds - it gets you a stylized likeness, short of photoreal, and it's at its best when you're not asking for an exact face.
Installing it
ComfyUI Manager: search "ComfyUI_IPAdapter_plus_V2". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_IPAdapter_plus_V2
Restart ComfyUI. Then the real install: pip install insightface, plus the Kolors adapter, its LoRA, and the 336 CLIP vision file.
Gotchas
The ecosystem history should temper expectations: FaceID on SDXL was labeled experimental and widely reported as weaker than SD1.5, and Kolors is a smaller pond still. If FaceID likeness is the goal and Kolors is optional, try SD1.5 first. And remember this pack is a renamed snapshot of cubiq's V2 codebase - it won't follow upstream fixes.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| ipadapter | IPADAPTER | — | |
| image | IMAGE | — | |
| weight | FLOAT | 1.00-1–3 | — |
| weight_faceidv2 | FLOAT | 1.00-1–5 | — |
| weight_kolors | 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 | — |