Toggle Theme

ComfyUI Face Consistency: InstantID vs FaceID vs ReActor

Easton editorial illustration: one gender-neutral faceted 3D avatar face token inside a dark rounded ComfyUI-style node canvas

"The cubiq ComfyUI_InstantID README documents the current SDXL scope, antelopev2 and model paths, CFG guidance, and keypoint controls."

You have a frontal photo of an authorized model and want to generate the same person in several settings. Or you already have a finished poster and only need to replace its face with that of an original virtual character. These are different workflows: the first injects identity during generation, while the second swaps a face during post-processing.

Three common ComfyUI options are InstantID, IPAdapter FaceID, and ReActor. Their names sound similar, but their roles are not. The current ComfyUI InstantID node targets SDXL and has the most dependencies. FaceID can cover SD1.5 and SDXL, but its model and LoRA must match. ReActor performs a post-processing face swap and does not participate in generation.

Start by deciding whether the task happens during generation or after the image exists. Then check model dependencies, tuning directions, common failures, and licensing boundaries.

1. The Three Routes: Generation-Time Identity vs Post-Processing

First decide whether you want to generate several new images of the same person or replace the face in an existing image. That choice determines the route.

RouteRoleBest forInputModel limitsDependency complexity
InstantIDGeneration-time identity preservationGenerating several new images of the same faceOne face referenceThe current ComfyUI_InstantID node targets SDXLHigh (InsightFace + onnxruntime + antelopev2 + ControlNet + main InstantID model)
IPAdapter FaceIDGeneration-time identity preservationGenerating several new images of the same faceOne or more face referencesSD1.5 + SDXLMedium (InsightFace + FaceID model + matching LoRA)
ReActorPost-processing face swapReplacing only the face in an existing imageTarget image + source faceIndependent of the generation base modelVersion-dependent (the 0.7 alpha core no longer mandates InsightFace, but models and licenses still need review)

Selection Rules

  • Generate several new images of the same person -> InstantID or FaceID
  • Replace only the face in a finished image -> ReActor
  • Work from a single face reference -> all three can handle it, but InstantID and FaceID fit generation-time control
  • Preserve the pose and composition of an existing image while changing the face -> ReActor is more direct

Put Licensing Boundaries First

InstantID and FaceID commonly rely on InsightFace to extract facial features. InsightFace code uses the MIT License, but its training data and models trained on that data are available by default for non-commercial research. The FaceID model card also limits those models to research use. ReActor describes itself as SFW-friendly and includes a nudity detector; its README likewise requires responsible use.

Before commercial or public release, review likeness authorization, model-weight licenses, and platform rules separately. The workflows here are limited to authorized or owned material, original characters, and internal testing.

2. InstantID: Generation-Time Identity for SDXL

2.1 Installation and Model Paths

InstantID has more dependencies than FaceID or ReActor. After installing the node, incorrect model paths are the most common setup failure.

Installation:

# 1. Clone the node
cd ComfyUI/custom_nodes
git clone https://github.com/cubiq/ComfyUI_InstantID.git

# 2. Install dependencies
pip install insightface onnxruntime onnxruntime-gpu

The default InsightFace 1.0 Python package no longer builds the optional C++/Cython face3d extension, which reduces local compiler requirements. If an older environment or tutorial still causes a build error, confirm the actual version and use an isolated environment before assuming that current releases require Visual Studio C++ Build Tools.

ModelTarget pathSource
antelopev2ComfyUI/models/insightface/models/antelopev2InsightFace model
Main InstantID modelComfyUI/models/instantidInstantX on Hugging Face
InstantID ControlNetComfyUI/models/controlnetInstantX on Hugging Face

The current ComfyUI_InstantID README says that the node is only for SDXL. Use FaceID instead when the workflow is based on SD1.5.

The ComfyUI_InstantID repository has been in maintenance-only mode since April 14, 2025. Critical fixes may still be merged, but the maintainer does not promise ongoing development, so check the current README before installation.

2.2 Workflow and Tuning

Basic workflow:

  1. Load an SDXL checkpoint
  2. Connect Apply InstantID and provide a frontal face reference
  3. Feed the InstantID model and ControlNet conditions into the sampling chain
  4. Generate the image

Reference quality directly affects likeness. A frontal, sharp, unobstructed, evenly lit image is usually more reliable. A profile, tiny face, blurry image, or heavy occlusion can cause detection failures or weak likeness.

SymptomAdjustment
Likeness is too weakIncrease the InstantID model or ControlNet weight gradually
Image looks burned or prompt control weakensLower the InstantID model weight first, then compare with the baseline
CFG is too highFollow the node README and lower it to about 4-5, or use RescaleCFG

The primary upstream InstantID path does not support multiple face references and uses the largest face for landmarks. ComfyUI_InstantID includes a more complex and slower Multi-ID example, but it should not be treated as a simple, stable multi-person baseline.

Advanced node features:

  • Advanced InstantID: adjust the InstantID model and ControlNet weights separately
  • Noise injection: reduce the burned look and fine-tune likeness
  • image_kps input: use keypoints from another image to change the pose and reduce pose transfer from the identity reference

For tighter pose control, combine the workflow with ControlNet OpenPose.

3. IPAdapter FaceID: Generation-Time Identity for SD1.5 and SDXL

FaceID is the face-specific branch of IPAdapter. It uses a face-recognition embedding instead of a regular CLIP image embedding and can add a LoRA to improve identity consistency.

3.1 Installation and Model Pairing

Install the dependency in ComfyUI’s Python environment:

pip install insightface

Place FaceID models in ComfyUI/models/ipadapter and matching LoRAs in ComfyUI/models/loras. Unified Loader FaceID relies on the official filenames for automatic pairing, so renamed files can prevent automatic loading.

FaceID modelMatching LoRAPaths
ip-adapter-faceid_sd15.binip-adapter-faceid_sd15_lora.safetensorsmodels/ipadapter + models/loras
ip-adapter-faceid-plusv2_sd15.binip-adapter-faceid-plusv2_sd15_lora.safetensorsSame
ip-adapter-faceid_sdxl.binip-adapter-faceid_sdxl_lora.safetensorsSame
ip-adapter-faceid-plusv2_sdxl.binip-adapter-faceid-plusv2_sdxl_lora.safetensorsSame

The model list and filenames can change with node updates. Before installation, check the ComfyUI_IPAdapter_plus README and pair every model and LoRA by base model and version. A missing or mismatched LoRA can noticeably reduce identity consistency.

Version differences:

  • PlusV2: combines a face ID embedding with a controllable CLIP image embedding, allowing adjustment of face-structure weight
  • Portrait: targets portrait generation, does not require a LoRA or ControlNet, and can accept several face images to improve likeness
  • SDXL FaceID and PlusV2-SDXL: the model card labels them experimental, so do not present them as unconditionally stable

The ComfyUI_IPAdapter_plus repository has also been in maintenance-only mode since April 14, 2025.

3.2 Workflow and Tuning

FaceID does not have to start at a weight of 1.0. Excessive identity weight can make the result follow the reference more closely while weakening text-prompt control.

Tuning directions:

  • Start around 0.8 to establish a baseline, then raise the weight gradually if likeness is weak
  • To follow the prompt more closely, adjust weight type in IPAdapter Advanced or lower the weight
  • PlusV2 also exposes a separate face-structure-related weight

FaceID and InstantID both add identity conditions during generation. FaceID covers SD1.5 and SDXL, while the current ComfyUI_InstantID node targets SDXL. Memory use varies with the base model, resolution, GPU, and node version, so one fixed number would be misleading.

4. ReActor: An SFW Post-Processing Face Swap

ReActor serves a different stage from the first two routes. It does not participate in diffusion generation; it swaps a face in an image that already exists.

4.1 Installation and Dependency Changes

The new ReActor 0.7.0 alpha core says that InsightFace and C++ Build Tools are no longer required. However, the current README model table and license section still list models such as buffalo_l and inswapper_128.onnx. Verify the current version before deciding either installation steps or usage rights.

ModelCurrent README path
buffalo_lComfyUI/models/insightface/models/buffalo_l
inswapper_128ComfyUI/models/insightface
reswapperComfyUI/models/reswapper
hyperswapComfyUI/models/hyperswap
Face Restore modelsComfyUI/models/facerestore_models

Older tutorials often treat InsightFace and C++ Build Tools as fixed prerequisites. When instructions conflict, identify your ReActor version and follow that version’s README instead of mixing legacy dependency steps.

ReActor includes a nudity detector. Its README says that use of a real face should have the person’s consent and that public posts should clearly disclose their synthetic nature. Commercial rights for models such as buffalo_l and inswapper_128 must still be checked separately.

4.2 Workflow

Basic face-swap workflow:

  1. Connect the image to process to input_image, and connect the authorized reference face to source_image
  2. Start with a conservative strength in ReActorSetWeight
  3. Optional: use Face Similarity to inspect likeness after the swap
  4. Optional: use Face Restoration to repair edges and detail
  5. Optional: save a face model and later load the same face embedding directly
FeaturePurpose
ReActorSetWeightAdjust swap strength from 0% to 100% in the node’s increments; excessive strength can create a plastic look or unnatural edges
Face SimilarityCheck likeness after the swap
Face RestorationRepair edges and details after swapping; excessive strength can also create a plastic look
Face ModelSave or load a face embedding to reuse the same face

ReActor does not regenerate the composition, clothing, or pose. When the goal is to preserve the finished image and process only the face region, it is more direct than InstantID or FaceID.

5. Reference Quality and Common Troubleshooting

5.1 Reference-Image Checklist

Reference quality often matters more than adding more weight. A frontal, sharp, unobstructed, evenly lit image is usually easier to match. A profile, blurred face, tiny face, or heavy occlusion is difficult to recover even with higher weights.

Priority order:

  1. Frontal > profile or angled face
  2. Sharp > blurry
  3. Unobstructed > glasses, mask, or hair covering the face
  4. Even lighting > hard shadow or backlighting

The same principles apply to InstantID, FaceID, and ReActor references. If detection fails, crop the face or replace the reference before pushing every weight to its maximum.

5.2 Common Failure Table

ProblemLikely causeWhat to do
Model not found (antelopev2 / buffalo_l / main InstantID model)Wrong path or missing modelCheck models/insightface/models, models/instantid, and other paths against the current README for the node
Detection fails (no face detected)Profile, small face, blur, or occlusionUse a frontal, sharp, unobstructed reference and crop the face if needed
Face matches, but pose or expression driftsThe face condition also carries some structural featuresUse ControlNet for pose or switch to ReActor for an existing finished image
Likeness is weakMissing FaceID LoRA, unsuitable weight, or poor referenceCheck model and LoRA pairing, establish a baseline around 0.8, then change one variable at a time
Edges look unnatural or the face looks plasticFace-swap or Face Restoration strength is too highLower swap and restoration strength; check target-face size, angle, and lighting
Dependency installation failsLegacy tutorials, old nodes, and the current Python environment were mixedConfirm node and InsightFace versions, then install from the current README in an isolated environment

Use this order:

  • Detection fails -> inspect reference quality first
  • Likeness is weak -> check models, LoRA pairing, and paths first
  • Pose drifts -> decide whether the job needs generation-time identity, post-processing, or an added ControlNet

6. Combining ControlNet, Kontext, and LoRA

Keeping the same face does not lock the pose, body, clothing, or composition. When InstantID or FaceID supplies an identity condition, the reference pose, expression, or hairstyle may still influence the result.

Recommended combinations:

  • InstantID or FaceID + ControlNet OpenPose -> the face condition handles identity while ControlNet handles the body and pose
  • FaceID + regular IPAdapter -> FaceID anchors the face and regular IPAdapter controls style or composition; start both routes with conservative weights
  • ReActor + upscaling and repair -> generate the target first, swap the face, then use face restoration or local inpainting if needed
  • Kontext -> useful for changing the background, clothing, or scene in the same input image, but it is not a dedicated face-identity lock
  • LoRA -> better suited to an original character or virtual brand persona that must be reused over time and has a training dataset

When pose must be precise, provide the target pose through ControlNet OpenPose. InstantID or FaceID can then handle the face while ControlNet handles the body and pose. If you only want to preserve the finished composition and replace the face, ReActor is more direct.

Related reading:

7. Compliance and Licensing Boundaries

Licenses and source-material rights are hard boundaries. A technically working workflow does not mean the material, model, and publication method are all authorized.

Separate InsightFace Code and Model Licenses

InsightFace code uses the MIT License and permits academic and commercial use. Its training data and pretrained models derived from that data are available by default only for non-commercial research. The current InsightFace README also provides separate licensing contacts for the inswapper series and open-source face-recognition models.

The FaceID model card likewise states that IP-Adapter-FaceID is for research use because it relies on InsightFace pretrained models. Do not treat a node’s code license as permission to use every model weight commercially.

ReActor Responsibility and Disclosure

The current ReActor release describes itself as SFW-friendly and includes a nudity detector. Its README requires users to follow local law, obtain consent when using a real face, and disclose face replacement or AI synthesis in public posts.

Source-Material Limits

The workflows here cover only:

  • Model photos with explicit likeness and usage authorization
  • Personal material that you own and have the right to process
  • Original virtual characters that do not represent a real person
  • Compliant internal tests that are not published

Before commercial or public release, verify likeness authorization, model-license scope, and platform rules separately. If any of these is unclear, do not publish or commercialize the result.

Summary and Next Steps

The decision is straightforward:

  • Generation-time identity -> InstantID (the current ComfyUI node targets SDXL) or FaceID (SD1.5 + SDXL)
  • Post-processing face swap -> ReActor
  • Check reference quality, model paths, and version pairing before blindly raising weights
  • A code license does not make every pretrained model commercially usable, and real faces also require likeness authorization

InstantID fits SDXL workflows and has more dependencies, but it separates identity and keypoint-related controls. FaceID supports more base models, but its model and LoRA must match. ReActor does not participate in diffusion generation and is suited to processing the face in an existing image.

Continue with:

Choose and Tune a ComfyUI Face-Consistency Workflow

Select the route by workflow stage, verify the reference and model setup, then change one weight at a time.

  1. 1

    Step 1: Identify the workflow stage

    Choose InstantID or IPAdapter FaceID when generating new images from a face. Choose ReActor when an existing image only needs a face replacement.
  2. 2

    Step 2: Prepare a suitable authorized reference

    Prefer a frontal, sharp, unobstructed, evenly lit image with a sufficiently large face, and confirm that you have the right to use it.
  3. 3

    Step 3: Install the route-specific models and dependencies

    For InstantID, check antelopev2, the main InstantID model, and ControlNet. For FaceID, check insightface, the FaceID model, and its matching LoRA. Install ReActor according to its current version README.
  4. 4

    Step 4: Create a baseline result

    Generate one baseline with default or conservative weights. Do not change the pose, expression, hair, base model, and several identity weights at the same time.
  5. 5

    Step 5: Adjust one cause at a time

    If likeness is weak, raise the identity weight or fix model pairing. If prompt control weakens, lower the Adapter weight. If the face looks plastic, lower the swap and restoration strength.
  6. 6

    Step 6: Add pose or long-term character control

    Add ControlNet when pose must be constrained precisely. For an original character that will be reused over time, evaluate training a LoRA instead of assigning every control task to one face reference.

FAQ

Should I use InstantID or ReActor to keep the same person in ComfyUI?
Use InstantID or IPAdapter FaceID to generate new images from a face reference. Use ReActor when the image is already finished and you only need to replace the face.
Why does IPAdapter FaceID also need a LoRA?
FaceID supplies an identity condition through a face-recognition embedding. Most FaceID models also need a matching LoRA to strengthen identity consistency, so the model and LoRA must match the base model and version.
Does InstantID in ComfyUI work only with SDXL?
The current cubiq/ComfyUI_InstantID README says that this node is for SDXL and requires antelopev2, the main InstantID model, and a ControlNet model. Check the documentation for other implementations or future versions.
Does ReActor 0.7 still need InsightFace and C++ Build Tools?
The new ReActor 0.7 alpha core says it no longer requires InsightFace or C++ Build Tools. Its current model list and license section still reference buffalo_l, inswapper_128, and related models, so verify the current README for both installation and commercial use.
Can I use ComfyUI face swapping commercially?
A node's code license is not enough. You must also verify likeness authorization, the use case, platform rules, and the licenses for pretrained models such as InsightFace, inswapper, and FaceID. Do not publish commercially when any permission is unclear.
Why does the swapped face look plastic?
Common causes are excessive face-swap or restoration strength, a face that is too small in the target, or mismatched angle and lighting. Lower the restoration strength and use a clearer authorized reference with a closer angle.

12 min read · Published on: Aug 21, 2026 · Modified on: Aug 21, 2026

Comments

Sign in with GitHub to leave a comment

Easton BlogEaston Blog