Easy Apply IPAdapter (FaceID Kolors)
Face transfer for the Kolors model
- model
- image
- image_negative
- attn_mask
- clip_vision
- optional_ipadapter
- model
- images
- masks
- ipadapter
This is the narrow, purpose-built one: FaceID identity transfer wired specifically for Kolors, the Kuaishou text-to-image model. If you're generating with Kolors and you want a specific face carried in from a reference photo - without training anything - this is the node. If you're on SD 1.5, SDXL, or Flux, this isn't your node; use easy ipadapterApply (or its Advanced sibling) and pick the preset that matches your checkpoint instead.
The reason it exists as its own node rather than just another preset is that Kolors' FaceID path needs an extra weight the other architectures don't - that's the weight_kolors control below. Bundling it into a dedicated node keeps the generic apply node from sprouting a Kolors-only knob.
How it works
FaceID is the face-recognition branch of IP-Adapter. Instead of a general CLIP image embedding, it reads an InsightFace ArcFace vector - facial geometry and biometric structure, not just "what the picture looks like" - and pairs it with a companion LoRA, because identity is harder for the model to absorb than a style embedding. This node runs that pipeline against Kolors and folds all the loaders (IPAdapter, CLIP-Vision, InsightFace) into itself, so you plug in your Kolors model and a face image and go.
The inputs that matter
image- the face reference. A clean, front-facing, well-lit crop works best; extreme angles are where FaceID gets shaky.preset- locked to FACEID PLUS KOLORS (it's the only choice), so there's nothing to pick. It's here for consistency with the other IPAdapter nodes.weight(default 0.8) - overall identity strength.weight_faceidv2(default 1) - the FaceID-v2 contribution, i.e. how much the ArcFace identity signal drives the result.weight_kolors(default 0.8) - the Kolors-specific weight, the one thing this node has that the others don't. Between these three you dial how hard the face is pushed versus how much freedom the prompt keeps.lora_strength(default 0.6) - the companion FaceID LoRA's weight; the community range is 0.5-1.0.start_at/end_at- when the adapter is active during sampling. Ending before 1.0 preserves detail.
provider (InsightFace backend, CUDA by default), combine_embeds, embeds_scaling, use_tiled, use_batch, sharpening, and cache_mode are refinements you can leave at defaults. Optional image_negative, attn_mask, and clip_vision are there if you need a negative reference, a region mask, or your own CLIP-Vision.
Outputs: the patched model for your sampler, plus images, masks, and ipadapter.
Installing it
ComfyUI Manager: search ComfyUI Easy Use, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then run the requirements install (install.bat on Windows, else pip install -r ComfyUI-Easy-Use/requirements.txt) and restart. You'll also need a Kolors checkpoint loaded upstream - Easy-Use ships an easy kolorsLoader for that.
Common issues
Two things bite here. First, InsightFace - the FaceID line depends on the insightface Python package, which is one of the flakiest installs in the ecosystem; if the node won't load, that's the first thing to check in your startup console. Second, a licensing reality worth knowing before you build a product on it: FaceID reads InsightFace's ArcFace models, and those are released for non-commercial research use only. That restriction is inherited, not chosen, and it applies to everything in the FaceID family. For sellable work you want the CLIP-based face variants (Plus Face / Full Face) instead - but those aren't a Kolors option, so if commercial Kolors face-transfer is the goal, this node isn't a clean fit.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| image | IMAGE | — | |
| preset | COMBO | FACEID PLUS KOLORS | 1 options: FACEID PLUS KOLORS |
| lora_strength | FLOAT | 0.600–1 | — |
| provider | COMBO | CUDA | 6 options: CPU, CUDA, ROCM, DirectML, OpenVINO, CoreML |
| weight | FLOAT | 0.80-1–3 | — |
| weight_faceidv2 | FLOAT | 1.00-1–5 | — |
| weight_kolors | FLOAT | 0.80-1–5 | — |
| weight_type | COMBO | 14 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +8 | |
| 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 | |
| cache_mode | COMBO | all | 5 options: insightface only, clip_vision only, ipadapter only, all, none |
| use_tiled | BOOLEAN | false | — |
| use_batch | BOOLEAN | false | — |
| sharpening | FLOAT | 0.000–1 | — |
| image_negativeopt | IMAGE | — | |
| attn_maskopt | MASK | — | |
| clip_visionopt | CLIP_VISION | — | |
| optional_ipadapteropt | IPADAPTER | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| images | IMAGE | — |
| masks | MASK | — |
| ipadapter | IPADAPTER | — |