Build Blended Face Model π ReActor
Average several faces into one
- images
- face_models
- FACE_MODEL
One photo makes a mediocre face model. ReActor Build Blended Face Model (class ReActorBuildFaceModel) fixes that by averaging several faces into a single stronger identity. Feed it a batch of images of the same person - different angles, different lighting - and it blends their embeddings into one model that captures the face more completely than any single shot. Or feed it several faces of different people and it invents a new one that's a mix of all of them. The README's showcase example built a face from four different actresses; the community uses it both ways, for accuracy and for making synthetic faces that don't exist.
This is the honest answer to "why doesn't my swap look enough like the person?" A swap is only as good as the identity you hand it, and a single reference is a narrow, angle-biased sample. Blending several averages out the noise. It's the same instinct behind FaceID Portrait accepting multiple reference photos - more samples, more stable identity.
How it works
The node takes a set of face embeddings and combines them into one using a statistical compute_method, then outputs a FACE_MODEL (and, since 0.5.0, can hand that blended model straight to the main swap node - no save-and-reload round trip needed). It accepts input two ways: a batch of images (pair it with ImpactPack's "Make Image Batch" to load several photos at once), or a face_models bundle from Make Face Model Batch if you'd rather blend models you already saved. It's an output node, so it can also write the result to disk in the same step.
The inputs and outputs that matter
images/face_models(both optional) - your source. Useimageswith a Make Image Batch upstream to blend from photos, orface_modelswith a Make Face Model Batch upstream to blend from saved models. Connect whichever suits; you need one of them.compute_method- how the embeddings get combined:Mean(default),Median, orMode. Mean is the straightforward average and the right first choice. Median is more robust if one of your inputs is an outlier (a bad angle dragging the blend off); it's worth a try when Mean gives a muddy result.face_model_name- the filename it saves under. Name it after the person or the blend.
save_mode writes the blended model to ComfyUI/models/reactor/faces; send_only skips saving and just passes the model downstream (use it when you only want the live blend, not a file). The output is FACE_MODEL - wire it into a swap node's face_model input, or into Save Face Model to bank it.
How to install it
Ships with the ReActor pack. ComfyUI Manager: search ReActor, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Gourieff/comfyui-reactor-node
then run install.bat / install.py and restart. No extra models for this node. Note the batching helper for the image path - Make Image Batch - comes from ComfyUI Impact Pack, so if you want to blend from photos you'll want that pack installed too. Blending from saved models uses the pack's own Make Face Model Batch instead, no dependency.
Common issues & troubleshooting
The blend looks worse than a single good photo. Garbage in, garbage out - one bad angle or a mis-detected face in the batch drags the average. Prune the inputs to clean, front-facing, well-lit shots, or switch compute_method to Median so a single outlier stops swinging the result.
Nothing shows up to load after building. Either save_mode was off / send_only was on (so it never wrote a file), or you didn't refresh. ComfyUI scans the faces folder on page load - refresh the browser to see a newly saved blend.
I'm blending different people and the result is a mush. That's expected - averaging distinct identities produces a smoothed in-between face, not a crisp person. That's the tool working as designed for synthetic faces; if you wanted one real person, feed only that person's photos.
Menu or node won't load. The pack's InsightFace dependency failed to build - the recurring Visual Studio / C++ toolchain problem. Use the prebuilt Insightface wheel the README links for your exact Python version, then restart. And the standing caveat for this whole pack: it runs on InsightFace's non-commercial weights, so anything you build is personal/research use, not for sale.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| save_mode | BOOLEAN | true | β |
| send_only | BOOLEAN | false | β |
| face_model_name | STRING | default | β |
| compute_method | COMBO | Mean | 3 options: Mean, Median, Mode |
| imagesopt | IMAGE | β | |
| face_modelsopt | FACE_MODEL | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FACE_MODEL | FACE_MODEL | β |