Easy Apply PuLID (Advanced)
Flux face identity with the fidelity dials exposed
- model
- image
- attn_mask
- model
PuLID is how you put a specific face onto a Flux (or SDXL) generation from one photo, without training a LoRA - and crucially, without wrecking prompt adherence the way older adapters did. easy pulIDApplyADV is the advanced version of Easy-Use's PuLID node: same one-node convenience, but with the fidelity and projection controls exposed so you can actually tune the likeness.
It sits in the Adapter category next to easy instantIDApply, and the two split cleanly by architecture: InstantID owns SDXL, PuLID owns Flux. If you moved to Flux and wondered where your face-consistency tool went, this is it.
Why you'd reach for it
Because on Flux, PuLID is the answer for identity-from-a-photo. Its whole design goal was to inject a face while perturbing the base model as little as possible - ByteDance trained it with a contrastive loss against an identity-free branch specifically so that text following doesn't fall apart when you add the face. In practice that means your prompt still lands and the face is there, which older adapters struggled to do at once. The "ADV" node is the one to use when the plain apply isn't getting close enough and you need the fidelity/projection knobs.
How it works
It analyzes your reference face (InsightFace), builds the identity embedding, and patches it into the model you pass in - the output is a modified model you route onward to your sampler. Because it patches the model directly (rather than riding a pipe), you wire it between your loader's model output and the sampler.
The inputs that matter
model- the Flux/SDXL model to patch. Output is the patched model.image- the reference face.weight- identity strength, default 1.0. The main dial.fidelity- default 8, range 0–32. Higher pushes closer to the reference face; this is the "make it look more like them" knob and the reason to use the ADV node.projection-ortho_v2(default),ortho, ornone. Leave it onortho_v2unless you're chasing a specific look; it governs how the embedding is projected in.insightface- CUDA / CPU / ROCM.start_at/end_at- the denoising window the identity applies over.
Optional attn_mask restricts the effect to a region. Output: the patched model.
Installing it
Install Easy-Use (ComfyUI Manager → ComfyUI Easy Use, or clone + install requirements). PuLID itself is a separate stack the pack doesn't bundle:
- The PuLID for Flux custom nodes (the balazik or lldacing implementations).
- InsightFace plus its model pack.
- The PuLID model files and the required CLIP-vision/EVA encoders.
VRAM-wise, Flux + PuLID wants roughly 16GB comfortably (12GB is doable), and on Flux prefer an fp8 checkpoint over GGUF - iteration times under PuLID are far more consistent on fp8.
Where people trip
Same trio as every InsightFace-based node. First: empty pulid_file dropdown = models not installed or in the wrong folder. Second: InsightFace install pain - if it errors during face analysis, fix InsightFace before blaming PuLID. Third, the licensing reality: PuLID's own license is clean (Apache-2.0), but the default InsightFace face models are non-commercial, so selling PuLID output is a problem unless you use the FaceNet path some third-party nodes offer. And the honest ceiling: PuLID gets the face close and stops - for exact likeness, follow it with a refining/swap pass rather than cranking fidelity to 32 and hoping.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| pulid_file | COMBO | 0 options: | |
| insightface | COMBO | 3 options: CPU, CUDA, ROCM | |
| image | IMAGE | — | |
| weight | FLOAT | 1.00-1–5 | — |
| projection | COMBO | ortho_v2 | 3 options: ortho_v2, ortho, none |
| fidelity | INT | 80–32 | — |
| noise | FLOAT | 0.0-1–1 | — |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| attn_maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |