ReActor π Fast Face Swap [OPTIONS]
The tidier face-swap node
- input_image
- source_image
- face_model
- options
- face_boost
- IMAGE
- FACE_MODEL
This is the same face swap as the main ReActor node, with the fiddly bits pulled off onto a separate socket. ReActor Fast Face Swap [OPTIONS] (class ReActorFaceSwapOpt) does the exact same job as ReActorFaceSwap - detect a face in your target image, lift the identity from a source photo, paint it on - but instead of carrying a dozen ordering-and-gender knobs on its own body, it exposes a single options input. You wire a ReActorOptions node into that, and all the face-ordering and multi-face-index settings live over there.
That's the whole pitch, and whether you want it comes down to taste. If you swap one face onto one image, the plain node is simpler and this one just adds a dangling socket you don't use. The Opt node earns its keep on multi-face and video work, where you're actually tuning detection order and index mapping and it's nicer to configure that once in a dedicated node than to hunt for it among the swap settings. It's the same engine either way, so likeness and quality are identical.
How it works
Identical machinery to the main node. It's a wrapper over InsightFace: detect the face, encode it to an ArcFace identity embedding, run the inswapper_128 model to do the swap, then optionally clean up with a face-restoration model. Same 128Γ128 ceiling on the swap model (frozen and unmaintained for years, shared across every InsightFace-based swapper), so the raw output is soft and the restoration pass is what makes it look finished.
The one structural difference is the options input. ReActor added it in 0.5.0 specifically so you could set the order faces get detected in - the default is "large to small," but you might want left-to-right so index 0 is always the leftmost person in a group. That ordering logic, plus the per-side index and gender settings, moved into the ReActorOptions node. If you leave options unconnected, this node just uses sane defaults.
The inputs and outputs that matter
The two that do the work:
input_image(the target getting a new face) andsource_image(the face to apply). Both come from Load Image. If you'd rather feed a saved embedding, use the optionalface_modelinput instead.face_restore_model- the difference between a crisp result and a low-res smudge. Set it tocodeformer-v0.1.0.pthorGFPGANv1.4.pthrather thannone, and tune withcodeformer_weight(0.5 is a good default) andface_restore_visibility.
Then the two optional sockets that give this variant its name: options (type OPTIONS, fed by ReActorOptions - this is where face order, indexes, and gender detection now live) and face_boost (type FACE_BOOST, connect the FaceBoost node to restore-and-upscale the face before pasting). swap_model has a single choice (inswapper_128.onnx); facedetection picks the detector, with retinaface_resnet50 the safe default.
Outputs match the main node: IMAGE (the swapped picture, send it to Save Image or an upscaler) and FACE_MODEL (the embedding it built, savable for reuse).
Note what's not on this node compared to the plain one: the input_faces_index, source_faces_index, gender toggles, and log level aren't here. They live in ReActorOptions now. That's the point.
How to install it
It ships in the same pack as every other ReActor node, so if you have one you have this. 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. The swap and detection models pull automatically on first run; download the face-restoration models by hand from the ReActor HF dataset into ComfyUI/models/facerestore_models.
Common issues & troubleshooting
The node won't load / vanished from the menu. Same root cause as the rest of the pack: InsightFace failed to build. It's one of the most painful installs around - historically needing Visual Studio C++ Build Tools to compile. The README's escape hatch is a prebuilt Insightface wheel matching your Python version; pip install it into ComfyUI's Python.
options isn't doing anything. Make sure you've actually connected a ReActorOptions node to the options input - unconnected, this node silently runs on defaults, which looks like your settings being ignored.
AttributeError: 'NoneType' object has no attribute 'get'. A broken inswapper_128.onnx. Re-download it into ComfyUI/models/insightface.
Errors right after an update. ReActor occasionally changes its input sockets between versions; the author's standing advice is to delete the node and re-add it fresh before opening an issue.
Commercial use: off the table. The InsightFace weights ReActor depends on are non-commercial research only, and no InsightFace-based tool escapes that. Personal and portfolio work, go ahead.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | β |
| input_image | IMAGE | β | |
| swap_model | COMBO | 1 options: inswapper_128.onnx | |
| facedetection | COMBO | 4 options: retinaface_resnet50, retinaface_mobile0.25, YOLOv5l, YOLOv5n | |
| face_restore_model | COMBO | 7 options: none, codeformer-v0.1.0.pth, GFPGANv1.3.pth, GFPGANv1.4.pth, GPEN-BFR-1024.onnx, GPEN-BFR-2048.onnx, +1 | |
| face_restore_visibility | FLOAT | 1.000.1β1 | β |
| codeformer_weight | FLOAT | 0.500β1 | β |
| source_imageopt | IMAGE | β | |
| face_modelopt | FACE_MODEL | β | |
| optionsopt | OPTIONS | β | |
| face_boostopt | FACE_BOOST | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |
| FACE_MODEL | FACE_MODEL | β |