chx_IPA_faceID
Face-consistent generation without training a LoRA — with a license catch
- model
- image
- attn_mask
- image_negative
- insightface
- model
- image
- mask
Regular IP-Adapter conditions on what a reference image looks like, in a broad CLIP-embedding sense - enough for style, not quite enough for "this is specifically this person's face." IP-Adapter FaceID solves that by swapping the CLIP embedding for an InsightFace ArcFace face-recognition vector instead, which encodes facial geometry rather than general appearance. chx_IPA_faceID is Apt_Preset's preset-driven wrapper around that FaceID line. It's still the standard no-training way to hold a face consistent across generations - read the license note below before you build anything commercial on it.
How it's different from the plain IP-Adapter nodes
The mechanism is the same attention-patching trick as chx_IPA_basic, but the embedding source changed, and that swap drags in a real dependency: InsightFace. FaceID also ships a companion LoRA alongside the adapter, because - per the tool's own history - identity is a harder signal for a model to absorb than a plain CLIP embedding, so the LoRA does some of the work the adapter alone can't. That's why this node's preset list looks different from the plain-IPA one, and why it exposes weights specific to that combination.
The part that actually matters before you use this for anything beyond your own testing: the CLIP-based IP-Adapter variants are Apache 2.0, but FaceID's own model card states plainly that because it depends on InsightFace's pretrained models - which are release for non-commercial research purposes only - the FaceID weights inherit that restriction and are not for commercial use. That's not this pack's choice; it's baked into the weights themselves, and it applies no matter which node loads them.
The inputs and outputs that matter
modelandimage- base model and the face reference.preset- five choices:FACEID PLUS V2(the variant most workflows actually settle on - it makes the CLIP structure contribution a separate weight you can tune), plainFACEID,FACEID PLUS(SD1.5 only),FACEID PORTRAIT(style-transfer flavored, and the one that wants multiple reference photos rather than one), andFACEID PORTRAIT UNNORM(SDXL only, strong effect).weight(default 1, -1 to 3) andweight_faceidv2(default 1, -1 to 5) - two separate strength dials, because FaceID v2 splits identity strength from the CLIP-structure contribution. The community's working range for the companion LoRA that FaceID needs is 0.5–1.0.weight_type,combine_embeds,embeds_scaling- same advanced curve/combination controls as the other IPA nodes.start_at/end_at- step range for the adapter's influence.- Optional
attn_mask,image_negative, andinsightface(anINSIGHTFACEtype - feed it from a separate InsightFace loader node if your workflow needs to control which model pack it uses; leave it unconnected and the node will use its own default).
Outputs: model, image, mask.
Installing it
Through ComfyUI Manager: search ComfyUI-Apt_Preset, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
then install.bat on Windows for the pack's own dependencies, restart. On top of that, this node specifically needs the insightface Python package working and the FaceID adapter + companion LoRA files downloaded into your models/ipadapter (and LoRA) folders. Install insightface itself via pip if install.bat doesn't cover it for your platform - as of InsightFace's 1.0 release the notorious C++ build-tools requirement is gone, but plenty of install guides in the wild still predate that and will send you chasing Visual Studio build tools you no longer need.
Common issues
Results are good on SD 1.5, meh on SDXL. That's the honest state of FaceID across architectures, not a config mistake on your end - the SD 1.5 line has the fullest variant support and is consistently reported as the strongest; SDXL FaceID is real but reported weaker across the board.
insightface won't install / import. This is a genuinely common pain point across every tool that uses this library, not specific to Apt_Preset - real reports include people spending days fighting it inside a portable ComfyUI's embedded Python. If you're stuck, check your insightface version first (1.0+ dropped the C++ build requirement), then confirm you actually have the model pack it needs (buffalo_l auto-downloads; antelopev2, which some FaceID setups expect, has to be fetched by hand - dead download links for it are a recurring complaint).
You're building a product, not just testing. Stop and read the license before shipping: FaceID's weights are research-only. For commercial face conditioning, stay on the CLIP-based PLUS FACE / FULL FACE presets in chx_IPA_basic instead - no InsightFace dependency, no restriction.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| image | IMAGE | — | |
| preset | COMBO | 5 options: FACEID PLUS V2, FACEID, FACEID PLUS - SD1.5 only, FACEID PORTRAIT (style transfer), FACEID PORTRAIT UNNORM - SDXL only (strong) | |
| 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 | |
| attn_maskopt | MASK | — | |
| image_negativeopt | IMAGE | — | |
| insightfaceopt | INSIGHTFACE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| image | IMAGE | — |
| mask | MASK | — |