Nodes/PuLID_ComfyUI/Apply PuLID Advanced
ComfyUI Node Runs on cloud

Apply PuLID Advanced

The same face, with the training wheels off

By cubiq·Created 2 years ago·Updated about a year ago· 910
Apply PuLID Advanced
  • model
  • pulid
  • eva_clip
  • face_analysis
  • image
  • attn_mask
  • MODEL
weight1.00
projection
fidelity8
noise0.0
start_at0.000
end_at1.000

For when the standard node is 90% right

Apply PuLID Advanced is what you graduate to. It does the exact same job as Apply PuLID - same five required inputs, same optional attn_mask, same patched MODEL output that goes into your KSampler - but it replaces the friendly method dropdown with three raw knobs: projection, fidelity, and noise. If the standard node gets you close and you can't shake the last bit of mismatch, this is where the answer hides.

The mechanism underneath is identical: InsightFace finds the face, EVA-CLIP reads its appearance, the two embeddings combine and get injected into SDXL's cross-attention via an IDEncoder. The Advanced node just exposes the projection math the standard node hides behind its presets. Everything the Apply PuLID article says about reference quality, the queue-time pipeline, and the "install the pack plus three model downloads" ritual applies here verbatim - this node runs on the same loaders and the same setup.

The knobs, decoded

  • projection - ortho_v2, ortho, or none. These are the two orthogonalization schemes from the code: ortho subtracts the projection of the identity output onto the base attention output, so the identity can't just ride the existing signal; ortho_v2 is a refinement of that idea. none does no normalization, which puts you back in "pure injection, handle with care" territory.
  • fidelity - integer 0 to 32, default 8. Controls how many tokens of headroom the identity gets. Lower is stronger - the README is explicit that lowering fidelity grants higher resemblance to the reference.
  • noise - −1 to 1, default 0. Adds random noise to the negative (unconditioned) reference embeddings instead of feeding them clean zeros. A nudged-up noise value loosens the grip a bit and can rescue generations that feel over-clamped or repetitive.

The README hands you two exact equivalence points so you're not guessing in the dark: ortho_v2 with fidelity: 8 reproduces the standard node's fidelity method, and ortho with fidelity: 16 reproduces style. So if you already know which standard method you liked, set those and start tuning from there. The genuinely useful move is the opposite of what you'd expect: with the standard node, neutral (no normalization) forces you to drop the weight to keep the face from smearing; with the Advanced node you can leave the weight where it is and raise fidelity instead. That's the whole reason the Advanced node exists - decoupling how hard you push from how you push.

A quick tuning recipe

Start at ortho_v2, fidelity 8, weight 1 - the known-good point. If the face is there but weak, drop fidelity to 4 or 5 before you touch weight; you'll usually get more likeness without blowing out the rest of the image. If the prompt is fighting you, edge fidelity back up. If you're chasing a specific face that just won't land, try none with the weight pulled down to 0.5–0.7 and see whether the un-normalized injection reads more faithfully - it sometimes does, at the cost of being less forgiving of a messy reference.

The honest caveat: on this SDXL pack, Advanced is a finishing tool, not a magic switch. PuLID famously gets the face structure right and stops a few percent short of exact likeness - the community recipe for closing that gap is a refining pass (FaceID from the IP-Adapter pack, or a pixel-level swap like ACE++), not more sliders here. And remember this is the SDXL line; the Flux PuLID lives in a different pack entirely. Get Advanced set at its defaults, confirm it matches your standard-node result, and only then start turning the knobs.

One last thing: the author has this repo in maintenance-only mode since April 2025, and this node is a good illustration of why that's fine - the projection math is stable, the README's equivalence table is still accurate, and there's nothing here that needs a weekly update. It just works, quietly, the way a well-finished tool should.

Categorypulid

Inputs (12)

NameTypeDefaultDescription
modelMODEL
pulidPULID
eva_clipEVA_CLIP
face_analysisFACEANALYSIS
imageIMAGE
weightFLOAT1.00-1–5
projectionCOMBO3 options: ortho_v2, ortho, none
fidelityINT80–32
noiseFLOAT0.0-1–1
start_atFLOAT0.0000–1
end_atFLOAT1.0000–1
attn_maskoptMASK

Outputs (1)

NameTypeDescription
MODELMODEL