Nodes/ComfyUI-Apt_Preset/chx_IPA_faceID
ComfyUI Node

chx_IPA_faceID

Face-consistent generation without training a LoRA — with a license catch

By cardenluo·Created 2 years ago·Updated 22 days ago· 309
chx_IPA_faceID
  • model
  • image
  • attn_mask
  • image_negative
  • insightface
  • model
  • image
  • mask
preset
weight1.00
weight_faceidv21.00
weight_type
combine_embeds
start_at0.000
end_at1.000
embeds_scaling

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

  • model and image - 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), plain FACEID, FACEID PLUS (SD1.5 only), FACEID PORTRAIT (style-transfer flavored, and the one that wants multiple reference photos rather than one), and FACEID PORTRAIT UNNORM (SDXL only, strong effect).
  • weight (default 1, -1 to 3) and weight_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, and insightface (an INSIGHTFACE type - 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.

CategoryApt_Preset/chx_tool/chx_IPA

Inputs (13)

NameTypeDefaultDescription
modelMODEL
imageIMAGE
presetCOMBO5 options: FACEID PLUS V2, FACEID, FACEID PLUS - SD1.5 only, FACEID PORTRAIT (style transfer), FACEID PORTRAIT UNNORM - SDXL only (strong)
weightFLOAT1.00-1–3
weight_faceidv2FLOAT1.00-1–5
weight_typeCOMBO15 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +9
combine_embedsCOMBO5 options: concat, add, subtract, average, norm average
start_atFLOAT0.0000–1
end_atFLOAT1.0000–1
embeds_scalingCOMBO4 options: V only, K+V, K+V w/ C penalty, K+mean(V) w/ C penalty
attn_maskoptMASK
image_negativeoptIMAGE
insightfaceoptINSIGHTFACE

Outputs (3)

NameTypeDescription
modelMODEL
imageIMAGE
maskMASK