Nodes/ComfyUI-InstantID/📷InstantID Generation
ComfyUI Node

📷InstantID Generation

The node that actually puts a face into your image

By ZHO-ZHO-ZHO·Created 3 years ago·Updated 2 years ago· 1,444
📷InstantID Generation
  • face_image
  • pipe
  • insightface
  • pose_image_optional
  • IMAGE
positive
negative
ip_adapter_scale0.80
controlnet_conditioning_scale0.80
steps50
guidance_scale5.00
enhance_face_regiontrue
seed0

This is the payoff node - everything else in this pack (the loaders, the styler) exists to feed this one. Hand it a photo of a face and it generates a new image where that face shows up, in whatever scene and style your prompt describes, with no LoRA training and no dataset. Just one reference photo.

How it works

InstantID's real trick isn't the face embedding alone - plenty of tools do that. It's that this node also runs IdentityNet, a ControlNet-shaped module conditioned on five facial landmarks, alongside the identity embedding. The embedding tells the model what the face looks like; IdentityNet constrains where its features sit - eyes, nose, mouth position - so the likeness holds up across different poses and styles instead of collapsing into "vaguely the right person, wrong structure." That's the piece plain IP-Adapter FaceID lacks, and it's why this single node needs both a pipe (the assembled SDXL + adapter + controlnet model) and an insightface model wired in - it's running the identity injection and the spatial conditioning at once.

The inputs and outputs that matter

face_image is your reference photo - this is what gets embedded for identity. pipe comes from the model-loader chain (base model → InstantID adapter attached). insightface comes from InsightFace Loader (Zho), not the plain one. positive and negative are your prompts, which you can type directly or feed from ID Prompt_Styler.

Three sliders do the real tuning work. ip_adapter_scale (default 0.8, 0–1) controls how strongly the identity embedding pulls the output toward your reference face. controlnet_conditioning_scale (default 0.8, 0–1) controls how strongly IdentityNet enforces facial structure. guidance_scale (default 5, 0–10) is your regular CFG - the InstantID paper's own default is also 5, so this one's worth leaving alone unless you have a reason not to. steps defaults to 50 here (the original InstantID demo runs closer to 30; more steps won't hurt, just costs time). enhance_face_region (default on) crops in tighter on the face region during conditioning - leave it on unless you have a specific reason to turn it off.

One easy-to-miss input: pose_image_optional. It's not a general OpenPose replacement - the README is explicit that it only steers pose around the face, not the whole body. If you feed it a full-body reference expecting body-pose control, you'll be disappointed; that's not what this slot does.

Output is a plain IMAGE - no conditioning object, just the finished picture.

Installing it

Search ComfyUI Manager for ComfyUI-InstantID, or cd ComfyUI/custom_nodes && git clone https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID.git, cd in, pip install -r requirements.txt, restart. This node alone won't run - you need the whole chain built first: ID ControlNet LoaderID Base Model Loader (hub or local) → Ipadapter_instantid Loader → this node, plus InsightFace Loader (Zho) feeding insightface directly.

Common issues

Results look "burned" - oversaturated, crunchy, artifact-y. This is a known InstantID behavior, not a bug in your setup. Drop ip_adapter_scale first, and keep guidance_scale near the 5 default rather than pushing SDXL's usual 7-ish - InstantID is more CFG-sensitive than a plain SDXL run.

Face is recognizable but the structure feels off, or the pose barely follows your reference. Push controlnet_conditioning_scale up before touching anything else - that's IdentityNet's dial, and the community's practical sweet spot for InstantID's overall strength runs noticeably higher than the node's own defaults, more like 1.0–1.3 territory once you're tuning both scales together.

Likeness is close but not exact. That's the honest ceiling here - InstantID gets you recognizably close and stops. For pixel-perfect matching, pair it with a post-process face swap on top; don't expect this node alone to get there.

Commercial use. The InsightFace weights this node's identity signal depends on are non-commercial research models - that restriction covers anything you generate with this node, regardless of the wrapper's own license.

Category📷InstantID

Inputs (12)

NameTypeDefaultDescription
face_imageIMAGE
pipeMODEL
insightfaceINSIGHTFACEMODEL
positiveSTRING
negativeSTRING
ip_adapter_scaleFLOAT0.800–1
controlnet_conditioning_scaleFLOAT0.800–1
stepsINT501–100
guidance_scaleFLOAT5.000–10
enhance_face_regionBOOLEANtrue
seedINT00–18446744073709550000
pose_image_optionaloptIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE