Nodes/comfyui-instantId-faceswap/Apply instantId ControlNet
ComfyUI Node

Apply instantId ControlNet

The node that actually holds the face's geometry

By nosiu·Created 3 years ago·Updated about a year ago· 264
Apply instantId ControlNet
  • positive
  • negative
  • face_conditioning
  • control_net
  • image
  • positive
  • negative
strength1.00

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 - from FaceEmbedCombine. The identity signal.
  • control_net - the InstantID ControlNet model, loaded separately (a standard ControlNetLoader) from the files you download in the install step below.
  • image - the keypoint control image, not your pose photo directly. This is what KpsMaker renders, or what PreprocessImage outputs as control_image when you feed it an insightface input.
  • 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.

CategoryInstantId Faceswap

Inputs (6)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
face_conditioningFACE_CONDITIONING
control_netCONTROL_NET
imageIMAGE
strengthFLOAT1.000–10

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING