Arc2Face Face Extractor
The Arc2Face Face Extractor
- images
- FACE_EMBEDDING
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.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| average_method | COMBO | 10 options: average, median, trimmed_mean, ensemble_average, ensemble_median, max_pooling, +4 | |
| n_outliers | INT | 00–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FACE_EMBEDDING | FACE_EMBEDDING | — |