InstantID Patch Attention
The identity half of InstantID, split off for custom graphs
- instantid
- insightface
- image
- model
- mask
- MODEL
- FACE_EMBEDS
If you've read up on InstantID, you know it's really two mechanisms stacked together: an attention-based identity adapter (feed the face embedding into cross-attention) and IdentityNet, a controlnet that enforces facial geometry. The all-in-one Apply InstantID nodes run both at once. This node is just the first half - the attention patch - with none of the controlnet wired in. You'd reach for it when you're building a custom graph and want the identity injection and the pose control (Apply InstantID ControlNet, its natural pairing) as two separate, rewireable pieces instead of one bundled node.
How it works
It takes your reference photo through the loaded InsightFace analyzer, gets the ArcFace identity embedding, and patches your SDXL model's cross-attention with it - the same mechanism IP-Adapter uses, just fed a face-recognition embedding instead of a general CLIP one. What it does not do is touch spatial structure or pose; that's IdentityNet's job, and IdentityNet lives in the paired Apply InstantID ControlNet node, not here. Split like this, you can insert other nodes between the two stages, skip the controlnet half entirely if you only want loose identity influence, or reuse the face embeddings this node produces elsewhere in your graph.
The inputs and outputs that matter
Required: instantid (from Load InstantID Model), insightface (from Face Analysis), image (your reference photo), and model. Strength is weight - worth noting its range here is -1 to 3, wider than the all-in-one nodes and, unusually, allowing negative values, which the combined nodes don't expose. start_at / end_at (0–1) control which portion of sampling it's active for, and noise (default 0, 0–1) is the same burn-mitigation trick as elsewhere in the pack - off by default, yours to dial in.
Optional mask restricts the patch to a region of the image, same multi-ID mechanism as the rest of the pack.
Two outputs, and this is the node's whole reason for existing as a separate piece: MODEL (the patched model, ready for your sampler) and FACE_EMBEDS - the raw face embedding, which is exactly what Apply InstantID ControlNet needs as its own required input to add the spatial half on top.
Installing it
Comes with the main pack - search "ComfyUI InstantID (Native Support)" in ComfyUI Manager, or git clone https://github.com/cubiq/ComfyUI_InstantID into custom_nodes, restart. You need insightface/onnxruntime/onnxruntime-gpu as Python dependencies, the antelopev2 model manually placed in models/insightface/models/antelopev2, and the InstantID weights in models/instantid. You do not need the controlnet model just for this node - that's only required once you wire its FACE_EMBEDS output into Apply InstantID ControlNet.
Common issues
"Why isn't this doing what Apply InstantID does?" By design - this node only injects identity through attention, with no spatial/pose conditioning. If your face is influencing the output but the pose and structure feel unanchored, that's expected: you're missing the controlnet half. Wire FACE_EMBEDS into Apply InstantID ControlNet to get the full InstantID behavior back.
Results look softer or less "burned" than the all-in-one node. That tracks - without IdentityNet's spatial pressure, a plain attention-based identity injection tends to be gentler (and less prone to InstantID's characteristic overcooked look) but also less faithful to a specific pose.
Not sure whether to use this or the combined node. If you're not already building a custom graph with a specific reason to split identity from pose, just use Apply InstantID or Apply InstantID Advanced instead - they cover the common case in one node, and this split exists for people who need the extra wiring flexibility, not as the default path.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| instantid | INSTANTID | — | |
| insightface | FACEANALYSIS | — | |
| image | IMAGE | — | |
| model | MODEL | — | |
| weight | FLOAT | 1.00-1–3 | — |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| noise | FLOAT | 0.00–1 | — |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| FACE_EMBEDS | FACE_EMBEDS | — |