InstantID Apply ControlNet
The IdentityNet half, wired to a face embedding instead of a photo
- face_embeds
- control_net
- image_kps
- positive
- negative
- mask
- positive
- negative
This is IdentityNet on its own - the spatial half of InstantID, the part that reads five facial keypoints and forces your generation to keep the reference face's actual geometry instead of merely resembling it. It's the natural pair to InstantID Patch Attention: that node does identity through cross-attention and hands you a FACE_EMBEDS object, this node takes that object and applies the controlnet conditioning on top. Together they reconstruct exactly what Apply InstantID Advanced does in one bundled node - just split apart so you can rewire, inspect, or interleave other nodes between the two stages.
How it works
IdentityNet is architecturally a ControlNet - it conditions the diffusion process on spatial structure, same as a pose or depth controlnet - except what it's conditioning on is a facial keypoint map generated from your reference (or from a separate pose image, via image_kps). This node applies that conditioning to your positive/negative prompts, the same way any ControlNet-apply node modifies conditioning before it reaches your sampler. It's also the entry point if you want to stack InstantID with other controlnets in the same graph - the README specifically calls out adding a depth controlnet alongside InstantID's own, and this factored-out node is what makes that kind of stacking straightforward.
The inputs and outputs that matter
Required: face_embeds (from InstantID Patch Attention - this is the one input that makes this node different from the all-in-one versions, which take a raw insightface + image pair instead), control_net (the InstantID controlnet model), and image_kps, which is required here, not optional the way it is on the combined nodes - you must supply a keypoint-source image, whether that's your identity reference or a separate pose photo run through Face Keypoints Preprocessor. Plus the usual positive/negative conditioning to modify.
Strength knobs: strength (default 1, 0–10 - notably no default-0.8 softening here, this node runs at full strength unless you pull it back) and start_at/end_at (0–1). Optional mask restricts the effect to a region.
Output is just positive and negative conditioning - no MODEL. That's the tell that this node is only half the picture; you still need identity injection (from Patch Attention) patching your model separately.
Installing it
Part of the main pack: search "ComfyUI InstantID (Native Support)" in ComfyUI Manager, or git clone https://github.com/cubiq/ComfyUI_InstantID into custom_nodes, restart. Beyond the usual insightface/onnxruntime dependencies and the antelopev2 model, this specific node needs the InstantID controlnet checkpoint downloaded and placed in ComfyUI/models/controlnet/ - a separate file from the main InstantID weights, easy to forget since the all-in-one nodes make both feel like one download.
Common issues
Node runs but the model doesn't actually resemble the reference face. This node only handles pose/structure conditioning - it has no idea what the face looks like unless you've also run InstantID Patch Attention and its FACE_EMBEDS output is feeding your model separately. Using this node alone, without the attention patch, gets you pose conditioning with no identity.
image_kps confusion. Unlike the combined nodes where image_kps is optional and defaults to your identity photo's own pose, here it's required - you always have to supply something. If you want the output posed like your reference face, feed the same reference image in; if you want a different pose, run a separate photo through Face Keypoints Preprocessor first (or just feed the raw image directly, since this node extracts keypoints itself).
Deciding whether you need this node at all. If you're not stacking additional controlnets or building a graph where you need to insert steps between identity injection and pose conditioning, Apply InstantID or Apply InstantID Advanced do this and the attention patch in a single node - reach for those first.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| face_embeds | FACE_EMBEDS | — | |
| control_net | CONTROL_NET | — | |
| image_kps | IMAGE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| strength | FLOAT | 1.000–10 | — |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |