Apply instantId ControlNet
The node that actually holds the face's geometry
- positive
- negative
- face_conditioning
- control_net
- image
- positive
- negative
If InstantID has one genuinely novel idea in it, this node is where it lives. IdentityNet - what this node applies - is the piece that separated InstantID from plain IP-Adapter FaceID back when it launched: a ControlNet-shaped module conditioned on five facial landmarks, so the generated face keeps the structure of the reference face (eye spacing, jaw angle, where the nose sits) rather than just a vague resemblance. Unlike InstantIdAdapterApply, which the pack's own README calls optional, this node is the one doing the actual likeness-holding work in most workflows.
How it fits together
Ordinary ControlNet conditions on spatial structure extracted from an image - edges, depth, pose - while the prompt handles semantic content. IdentityNet is the same trick applied to a face: it takes a keypoint map (the image input here, built by KpsMaker or PreprocessImage's control_image output) and constrains where the generated face's features land, while face_conditioning supplies what that face should look like. Spatial structure plus identity signal, applied together - that combination is why InstantID holds up across pose and style changes better than a plain image adapter did.
The inputs and outputs that matter
positive/negative- your existing conditioning, which this node modifies and passes through. It has to sit in the conditioning chain, not off to the side.face_conditioning- fromFaceEmbedCombine. The identity signal.control_net- the InstantID ControlNet model, loaded separately (a standardControlNetLoader) from the files you download in the install step below.image- the keypoint control image, not your pose photo directly. This is whatKpsMakerrenders, or whatPreprocessImageoutputs ascontrol_imagewhen you feed it aninsightfaceinput.strength(default 1, range 0–10, step 0.01) - how hard the landmark constraint pulls. This is the dial to reach for if the face geometry isn't holding.
Outputs: positive and negative, feeding straight into your KSampler.
Install
ComfyUI Manager: search comfyui-instantId-faceswap and install. Manual: git clone https://github.com/nosiu/comfyui-instantId-faceswap into custom_nodes/, pip install -r requirements.txt. This node's own dependency: the InstantID ControlNet files (ControlNetModel/diffusion_pytorch_model.safetensors and ControlNetModel/config.json) from InstantX/InstantID, placed together in a folder under ComfyUI/models/controlnet. Load them with a normal ControlNet loader node - this pack doesn't ship its own ControlNet loader, it just consumes whatever a standard one hands it.
Common issues & troubleshooting
Face geometry looks wrong or "melted." Almost always the image input. This node expects a rendered keypoint map, not a photo - if you've accidentally wired your original pose photo in here instead of a control_image, the ControlNet has nothing coherent to condition on. Double-check it's coming from KpsMaker or PreprocessImage.
"No face detected" further upstream kills this node's output too. If insightface couldn't find a face when building your control image - because the mask was too tight, the angle too extreme, or the pad too small - the fix isn't here, it's back at PreprocessImage or AngleFromFace: widen the mask, bump the pad, or draw your KPS manually with KpsDraw instead of relying on detection.
Full-body or small-face shots come out blurry. This is a known real-world limitation people run into: InstantID's landmark conditioning works best when the face occupies a decent chunk of the frame at something close to 1024×1024. If your face is small relative to the canvas, expect softer, less defined results - the fix people actually use is a second detailing pass on just the face region afterward (an impact-pack-style face detailer), not cranking strength here past the point of diminishing returns.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| face_conditioning | FACE_CONDITIONING | — | |
| control_net | CONTROL_NET | — | |
| image | IMAGE | — | |
| strength | FLOAT | 1.000–10 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |