Nunchaku FLUX PuLID Apply V2
Inject a reference face into a 4-bit Flux
- model
- pulid_pipline
- image
- attn_mask
- options
- MODEL
This is the node that actually does the face. NunchakuPuLIDLoaderV2 sets PuLID up; NunchakuFluxPuLIDApplyV2 takes your reference photo and injects that person's identity into a Nunchaku 4-bit Flux, giving you back a MODEL that generates them. It's the second half of a two-node PuLID setup, and the one where you tune how strong the likeness comes through.
PuLID's appeal is that it holds identity without trashing your prompt. Older adapters would lock the face but flatten everything else you asked for; PuLID's contrastive training keeps the base model's behavior mostly intact while pulling the face toward your reference. This "V2" apply node is the current one - NunchakuPulidApply is deprecated.
How it works
You hand it three things: the model and pipeline from the loader, and an image - the reference face. Internally PuLID runs that image through InsightFace to get an identity embedding and through EVA-CLIP for finer facial features, then conditions the diffusion model on both. The weight, start_at, and end_at controls decide how hard and when during sampling that conditioning is applied. Output is a patched MODEL you send to your KSampler as normal.
One honest expectation-setter from the community: PuLID gets the face structure right - contour, skin tone, the skeleton of the likeness - and then stalls a few percent short of exact. The standard high-quality recipe is PuLID for the base, then a finishing swap pass (ACE++ / Flux Fill) to close the last gap. Don't expect one-node perfection.
The inputs and outputs that matter
modelandpulid_pipline- from the loader. (Yes, the input is spelledpulid_piplinein the node; that's the field name.)image(IMAGE) - the reference face. A clean, front-facing photo works best.weight(default 1.0, range -1 to 5) - identity strength. 1.0 is a sane start; push up if the face isn't coming through, ease down if it's overriding your prompt or looking pasted-on.start_at/end_at(0–1, default 0 and 1) - the fraction of the sampling schedule where PuLID is active. Full range by default. Ending it early (sayend_at~0.7) lets the model finish details freely and can look more natural.- Optional
attn_mask(MASK) to confine the identity to a region, andoptions(OPTIONS) for advanced tweaks.
Output: a MODEL.
How to install it
Comes with ComfyUI-nunchaku. ComfyUI Manager → search "ComfyUI-nunchaku" → install, or
cd ComfyUI/custom_nodes
git clone https://github.com/mit-han-lab/ComfyUI-nunchaku
then restart. This node is downstream of NunchakuPuLIDLoaderV2, so all of PuLID's dependencies apply: the backend wheel, a quantized Flux model, InsightFace (use 1.0+) with the antelopev2 models, the PuLID weights, and EVA-CLIP.
Common issues & troubleshooting
"No face detected." InsightFace couldn't find a face in your reference. Use a clear, reasonably large, front-facing photo; a tiny or side-profile face often fails detection.
Likeness is weak. Raise weight, and make sure start_at/end_at cover the early steps where identity is set. If it's still soft, that's PuLID's known ceiling - add a face-swap finishing pass.
Face overrides everything / looks stuck-on. Lower weight and pull end_at back so the model finishes on its own. Over-strong identity is the usual culprit for that "collaged" look.
It errors before generating. Almost always the PuLID/InsightFace dependency chain upstream - debug the NunchakuPuLIDLoaderV2 install first, since this node can't run without a working pipeline from it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| pulid_pipline | PULID_PIPELINE | — | |
| image | IMAGE | — | |
| weight | FLOAT | 1.00-1–5 | — |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| attn_maskopt | MASK | — | |
| optionsopt | OPTIONS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |