Nodes/Arc2Face ComfyUI Node Library/Arc2Face Face Extractor
ComfyUI Node

Arc2Face Face Extractor

The Arc2Face Face Extractor

By caleboleary·Created 2 years ago·Updated 2 years ago· 53
Arc2Face Face Extractor
  • images
  • FACE_EMBEDDING
average_method
n_outliers0

The Arc2Face pipeline doesn't generate from photos. It generates from a 512-number face vector, and this is the node that turns your photos into that vector. Everything else in the pack - the Generator, the Img2Img Generator - is downstream of this one, which makes the Face Extractor the natural first node in the graph and the one whose settings matter most.

What it does is simple to describe: it finds every face in the input image(s), computes an InsightFace ArcFace embedding for each one, and combines them into a single embedding the generators expect. "ArcFace embedding" is the same biometric-ish vector that sits under InstantID and IP-Adapter FaceID - the KB's identity-preservation doc calls InsightFace the monoculture every no-training identity tool is built on, and Arc2Face is no exception. The twist here is that Arc2Face was fine-tuned to turn exactly that vector back into a face, so the embedding is the whole conditioning signal.

Mechanically it's InsightFace's FaceAnalysis with the antelopev2 model pack (SCRFD detector + ArcFace recognizer), running on CPU at 640×640 - it's CPU-bound even on GPU machines, but a single image is fast enough that you won't care. One detail that catches people: the author patches InsightFace's downloader so it looks for the ONNX files in ComfyUI/models/antelopev2 instead of the usual ~/.insightface location. Most InsightFace guides tell you to drop files in your home directory; this pack needs them under your ComfyUI models folder, exactly as the README's tree shows.

The inputs that matter

  • images - a batch of IMAGE tensors. Feed multiple photos of your subject and the identity gets stronger; the author is explicit that several faces tends to beat a single one.
  • average_method - how the per-face embeddings get combined. Ten options, and you'll use about two: median for a few inputs, ensemble_average for many (the author's own experience). The rest are mostly for experimentation.
  • n_outliers - drop the n faces farthest from the cluster centroid (0–10). This is your group-photo guard: if a background person keeps sneaking into the averaged identity, bump this until they're gone.

Output

FACE_EMBEDDING - the averaged vector. Wire it into the Arc2Face Generator for text-free generation or the Arc2Face Img2Img Generator to redraw a specific face onto an existing image.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/caleboleary/ComfyUI-Arc2Face.git
pip install -r requirements.txt

Then grab scrfd_10g_bnkps.onnx and arcface.onnx from camenduru/Arc2Face and drop them in ComfyUI/models/antelopev2/. ComfyUI Manager can install the pack itself if it shows up in its search, but you still have to place those two ONNX files by hand - nothing auto-downloads.

Where people get burned

  • No faces detected → no error. The node catches failures and returns a zero embedding while logging an error you'll probably never see. The symptom is a garbage or black generation downstream, not a helpful exception. If output is nonsense, check that your input actually contains a detectable face.
  • Group photos pool every face. All detected faces go into the average unless you raise n_outliers.
  • InsightFace itself. It's historically one of the worst installs in local generation - old versions needed a C++ build step on Windows. The README points at the reactor node's troubleshooting for exactly this. InsightFace 1.0 (May 2026) dropped the build requirement, so on a fresh environment it's much smoother than the horror stories suggest.
  • Non-commercial weights. The antelopev2 ONNX files are non-commercial licensed, same trap as every InsightFace-dependent tool. Fine for personal use; don't build a product on it.

A trick worth knowing

This node is how you do face mixing. Feed it photos of two people, pick an averaging method, and the Generator will render a blend - the author's facemixing.json example does exactly that. And remember the README's size advice: the model is happiest near 512×512, so extract from reasonably sized, front-ish shots.

CategoryArc2Face

Inputs (3)

NameTypeDefaultDescription
imagesIMAGE
average_methodCOMBO10 options: average, median, trimmed_mean, ensemble_average, ensemble_median, max_pooling, +4
n_outliersINT00–10

Outputs (1)

NameTypeDescription
FACE_EMBEDDINGFACE_EMBEDDING