ReActor π Face Booster
Sharpen the swapped face before it's pasted
- FACE_BOOST
ReActor Face Booster (class ReActorFaceBoost) is the pack's attempt to squeeze more sharpness out of a face swap by changing when the restoration happens. Normal flow: ReActor swaps the face at InsightFace's 128Γ128 ceiling, pastes it into the target, and only then (optionally) restores. FaceBoost flips the order - it restores and scales the swapped face up to the restoration model's own face size before it gets pasted back into the image. The pitch, straight from the author's PR: do the quality work while the face is still isolated and small, so more real detail survives the paste. It was added in 0.5.1 and the README is refreshingly honest about calling it "an attempt to improve the quality of swapped faces." Sometimes it's a clear win, sometimes it's a wash. Try it, keep it if it helps.
Why bother at all? Because the swap model is frozen at 128Γ128 and every InsightFace-based swapper inherits that ceiling. You can't make inswapper output more pixels. What you can do is control how those pixels get restored and resized on their way into the final image, and that's the entire game FaceBoost plays.
How it works
FaceBoost isn't a node you run on its own. It's a configuration node: it bundles up your boost settings into a FACE_BOOST object and you wire that into the face_boost input of a main ReActor swap node. The swap node then runs the boost step internally, before pasting. On its own the node produces nothing visible - it's a settings pack, same idea as ReActor Options.
The inputs and outputs that matter
The three that decide whether this helps:
boost_model- the restoration model applied to the swapped face crop. Same lineup as everywhere else in the pack:none, CodeFormer, GFPGAN 1.3/1.4, and GPEN-BFR 512/1024/2048. The higher-res GPEN models are the whole reason to bother, since the "scale up to face_size" trick means a 512 or 1024 restorer gives the face genuinely more room than the 128px swap did.enabled- the on/off switch (default true). Flip it off to A/B the swap with and without boosting, which is the only honest way to decide if it's earning its slot.restore_with_main_after- if true, the face also gets restored again by the main node's restoration settings after pasting. Off by default; turning it on stacks two restore passes, which can either clean things up or over-smooth into wax. Left off is the safer start.
interpolation (Nearest/Bilinear/Bicubic/Lanczos, default Bicubic) is how the face is resized - Lanczos is the sharpest if you're chasing detail. visibility and codeformer_weight behave like they do on the restore node: blend strength, and CodeFormer's fidelity-vs-quality dial. The one output is FACE_BOOST, and it goes exactly one place - the face_boost input on ReActor Fast Face Swap (or the Opt variant).
How to install it
It's part of the ReActor pack. ComfyUI Manager: search ReActor, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Gourieff/comfyui-reactor-node
then run install.bat / install.py and restart. This node adds no models of its own, but the boost_model you pick has to exist - the face-restoration models (codeformer, GFPGANv1.4, the GPEN set) don't auto-download. Pull them from the ReActor HF dataset into ComfyUI/models/facerestore_models first, or the dropdown will only offer none.
Common issues & troubleshooting
Nothing happens when I add it. Expected - it does nothing until its FACE_BOOST output is connected to a swap node's face_boost input. It's a config node, not a processor.
The boosted face looks over-cooked. You're probably double-restoring. Turn restore_with_main_after off, or set the main node's own restore model to none so the face isn't cleaned twice. One good restore beats two.
No visible improvement over just using Restore Face. That's a legitimate outcome - FaceBoost is a marginal-gains tool and the author says as much. Its edge shows up most on larger faces with a high-res GPEN boost model; on a small face it may not beat the ordinary restore path. Toggle enabled and compare.
The node/menu won't load at all. That's the pack's InsightFace install failing, not this node. InsightFace historically needed Visual Studio C++ Build Tools and is the single most common thing that breaks this pack; use the prebuilt Insightface wheel the README links for your Python version and restart. And remember everything here rides on InsightFace's non-commercial weights, so it's personal/research use, not for sale.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | β |
| boost_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 | |
| interpolation | COMBO | Bicubic | 4 options: Nearest, Bilinear, Bicubic, Lanczos |
| visibility | FLOAT | 1.000.1β1 | β |
| codeformer_weight | FLOAT | 0.500β1 | β |
| restore_with_main_after | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FACE_BOOST | FACE_BOOST | β |