Load PuLID Flux Model
Load the PuLID-Flux adapter that puts a real face on Flux
- PULIDFLUX
This is the node that loads the actual PuLID brain - the small adapter file that lets Flux paint a specific real face from a single reference photo, no LoRA training, no dataset. If you've seen "get someone's face into Flux with one image" workflows, this is where the identity part of that chain starts.
PuLID itself is ByteDance's identity adapter (the paper is Pure and Lightning ID Customization via Contrastive Alignment). The clever bit is that it injects a face without wrecking everything else - earlier adapters degraded style, detail and prompt adherence when they forced an identity in, a problem the paper calls ID pollution. PuLID trains two branches, one with the face and one without, and a contrastive loss keeps the face-conditioned output close to the clean one. Result: you get the likeness and your prompt still works. It's the default answer for faces on Flux, mostly because it shipped a Flux port when nothing else did.
This pack - lldacing/ComfyUI_PuLID_Flux_ll - is the third-party ComfyUI implementation people actually run. It fixed a nasty bug in the older balazik nodes where the model stayed patched between runs, and added a few extras (TeaCache/WaveSpeed support, a commercial-friendly FaceNet path). PulidFluxModelLoader is your entry point into all of it.
What it actually does
Almost nothing glamorous, honestly - it reads a .safetensors adapter file off disk and hands it downstream. One input, one output:
pulid_file- a dropdown of whatever's sitting inComfyUI/models/pulid/. You wantpulid_flux_v0.9.1.safetensors, the last and best official ByteDance Flux release.- Output:
PULIDFLUX- wire this straight into thepulid_fluxslot on ApplyPulidFlux. That's the only place it goes.
It's a loader. The heavy lifting - reading the reference image, building the face embedding, injecting it into your Flux model - all happens later in ApplyPulidFlux. This node just makes the adapter available.
Installing it (and the one-time model download)
The whole pack installs the usual two ways. Via ComfyUI Manager, search ComfyUI_PuLID_Flux_ll and hit install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/lldacing/ComfyUI_PuLID_Flux_ll.git
cd ComfyUI_PuLID_Flux_ll
pip install -r requirements.txt
pip install facenet-pytorch --no-deps
# restart ComfyUI
You need ComfyUI ≥ 0.3.7. And an important gotcha the README leads with: if you have the old ComfyUI-PuLID-Flux (balazik) or any other PuLID-Flux nodes installed, uninstall or disable them first. This pack deliberately reuses the ApplyPulidFlux node name, so having both installed will collide.
For this node specifically, the file it loads is a manual download: grab pulid_flux_v0.9.1.safetensors from the PuLID HuggingFace repo (guozinan/PuLID) and drop it in ComfyUI/models/pulid/. That one isn't auto-fetched, so if the dropdown's empty, this is why.
When it goes wrong
The pulid_file dropdown is empty. Nine times out of ten the model isn't in ComfyUI/models/pulid/, or it landed in the wrong folder. Confirm the file is there and restart ComfyUI so it re-scans. The models/pulid/ directory may not exist until you make it.
Two ApplyPulidFlux nodes, or the loader errors on startup. That's the balazik collision. Disable the other PuLID-Flux pack and restart.
ComfyUI throws on import. Check your version is ≥ 0.3.7 - this pack expects a reasonably current install, and being pinned to an old ComfyUI for other workflows is a real reason people couldn't run PuLID.
Once it loads, you're one node into a four-node identity chain: this loader, an EVA-CLIP loader, a face-analysis loader, and ApplyPulidFlux tying them together. This is the easy one.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| pulid_file | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| PULIDFLUX | PULIDFLUX | — |