InstantID Settings (JPS)
A settings pipe for the identity/pose weights InstantID needs
- instantid_settings
InstantID is the tool that puts a specific person's face into a generated image from just one reference photo, no training required - it does this by pairing an ArcFace identity embedding with IdentityNet, a ControlNet-style module conditioned on facial landmarks, which is why it holds a likeness across different poses better than a plain image adapter does. It's an SDXL-only tool (there's no Flux version, and none is coming - PuLID took over that job on Flux), and it needs several numbers dialed in correctly to work well. This node is a single place to set all of them and pipe the bundle downstream instead of scattering five separate widgets across your graph.
Five sliders, bundled into one instantid_settings output (a BASIC_PIPE, JPS's way of carrying multiple values down one wire): ip_weight (0–1, default 0.8) controls how strongly the image-prompt/identity embedding pushes the generation toward the reference face's overall look; cn_strength (0–10, default 0.65) controls how strongly the IdentityNet landmark conditioning constrains facial geometry and pose; noise (0–1, default 0) adds a small amount of noise to the reference embedding, a common trick for loosening an overfit to the exact expression or lighting in your one source photo; and start/end (0–1, defaulting to 0 and 1) set what fraction of the sampling process the identity conditioning is actually active for, the same start/end-percent pattern any ControlNet-style guidance uses.
On the actual numbers. Community guidance around InstantID generally runs it noticeably stronger than a typical image adapter - where something like plain IP-Adapter tops out around 0.6, InstantID commonly runs its combined weight up toward 1.0–1.3, because the landmark conditioning keeps the composition from collapsing at strengths that would otherwise let the identity signal overwhelm the rest of the prompt. This node splits that single "weight" concept into ip_weight and cn_strength separately, so you can push the identity signal harder without necessarily tightening the pose constraint the same amount, or vice versa - worth experimenting with independently rather than assuming they should move together.
Where it fits. This is a settings source, not a functional node in the pipeline - you still need the actual InstantID model loader and apply nodes elsewhere in your graph (this pack doesn't ship those; they come from a dedicated InstantID node pack). Use this to centralize the tuning knobs and unpack the pipe wherever those apply-nodes expect individual values, rather than re-setting five sliders every time you tweak one.
Installing it. ComfyUI Manager, search "JPS Custom Nodes for ComfyUI," or:
cd ComfyUI/custom_nodes
git clone https://github.com/JPS-GER/ComfyUI_JPS-Nodes.git
Restart, find it under JPS Nodes/Settings. No models bundled with this specific node - but InstantID itself needs its own checkpoint plus InsightFace's ArcFace models downloaded separately, and those come with a real catch: they're licensed for research/non-commercial use only, so this whole pipeline isn't something you can put behind a paid product.
Troubleshooting. If identity isn't holding across poses, the landmark side (cn_strength) is usually the first thing to raise before touching ip_weight. If faces look overfit to your reference photo's exact expression - same slight smile, same head tilt, regardless of what the prompt asks for - nudge noise up a bit rather than fighting it purely through weight and start/end tuning. And remember InstantID is SDXL-only: none of this transfers to a Flux-based workflow, where you'd want a PuLID-based setup instead.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| ip_weight | FLOAT | 0.800–1 | — |
| cn_strength | FLOAT | 0.650–10 | — |
| noise | FLOAT | 0.00–1 | — |
| start | FLOAT | 0.000–1 | — |
| end | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| instantid_settings | BASIC_PIPE | — |