Apply InstantID
Put a real face into SDXL from one photo, no training
- instantid
- insightface
- control_net
- image
- model
- positive
- negative
- image_kps
- mask
- MODEL
- positive
- negative
This is the node people mean when they say "InstantID" - drop it into an SDXL graph, feed it one photo of a person, and your generations start looking like that person. No LoRA training, no dataset, no waiting. It's the node that made a lot of people ask, in early 2024, whether character LoRAs were about to become obsolete. (Short answer: no - LoRAs still own body type, outfit, and everything that isn't the face. InstantID does the face, and does it well.)
How it works
InstantID is really three things stitched together, and this node is where they meet. An InsightFace ArcFace embedding reads your reference photo's facial geometry - that's what the Face Analysis node upstream produced. An image adapter injects that embedding into SDXL's cross-attention, the same trick IP-Adapter uses. And IdentityNet, a ControlNet-shaped module conditioned on five facial keypoints, forces the output to keep the reference face's actual structure across poses and styles, not just its vibe. That third piece is InstantID's real contribution over plain IP-Adapter FaceID, and it's why this one node needs a controlnet input alongside everything else.
It's SDXL only - there's no Flux version, and the upstream repo has been dormant since mid-2024, so this is where the tool's story ends, not where it's headed. If you're on SDXL, Illustrious, or Pony, it's still the right call.
The inputs and outputs that matter
The required list is long because this one node does the whole job: instantid (from the model loader), insightface (from Face Analysis), control_net (the InstantID ControlNet model), image (your reference face photo), model, positive, negative. Three sliders control strength: weight (default 0.8, range 0–5 - the community's actual sweet spot runs noticeably higher than that default, 1.0–1.3, because IdentityNet's spatial conditioning tolerates strength that would break a plain adapter), and start_at / end_at (0–1, what fraction of the sampling steps InstantID is active for).
Two optional inputs matter: image_kps lets you drive the pose from a different image than your identity reference - without it, the output pose comes from your reference photo's own keypoints. And mask restricts InstantID to a region, which is how the pack's multi-ID workflows work (one InstantID pass per face, masked).
Output is MODEL plus patched positive/negative conditioning - wire straight into your KSampler.
Installing it
ComfyUI Manager: search "ComfyUI InstantID (Native Support)". Manually: git clone https://github.com/cubiq/ComfyUI_InstantID into custom_nodes, restart. You'll also need insightface + onnxruntime/onnxruntime-gpu, the antelopev2 InsightFace model by hand into models/insightface/models/antelopev2, the main InstantID weights (confusingly filed as ip-adapter.bin, but it's InstantID's own model, not a real IPAdapter checkpoint) into models/instantid, and the InstantID controlnet into models/controlnet. Three separate downloads before this node will even run.
Common issues
Faces come out "burned" - overcooked, oversaturated, crunchy. This is InstantID's known default behavior, called out directly by the author. This node compensates automatically by injecting 35% noise into the negative embeds, which helps but doesn't eliminate it. If it's still bad, drop weight toward 0.8–1.0, or move to Apply InstantID Advanced where you can tune the noise yourself.
Also lower your CFG. Run CFG around 4–5, or add a RescaleCFG node. Running InstantID at normal SDXL CFG (7-ish) makes the burning worse.
Watermark ghosting at standard resolutions. SDXL's training data is full of watermarks, and they surface more with InstantID active. Use an off-standard resolution like 1016×1016 instead of exactly 1024×1024 to dodge it.
Likeness isn't exact. InstantID gets close, reliably, and stops there - it's not a pixel-perfect face swap. If you need that last stretch, pair it with a post-process swap (ReActor is the classic combo) on top.
Commercial use. The InsightFace models this node depends on are non-commercial research weights. That restriction rides along with everything InstantID produces, regardless of what license the code itself carries.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| instantid | INSTANTID | — | |
| insightface | FACEANALYSIS | — | |
| control_net | CONTROL_NET | — | |
| image | IMAGE | — | |
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| weight | FLOAT | 0.800–5 | — |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| image_kpsopt | IMAGE | — | |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |