☁️BizyAir ReActor 🌌 Fast Face Swap [OPTIONS]
The same swap node, with settings pulled out
- input_image
- source_image
- options
- face_boost
- SWAPPED_IMAGE
- BIZYAIR_PLACEHOLDER
- ORIGINAL_IMAGE
This is the same face-swap engine as the plain BizyAir_reactor node - same inswapper_128.onnx model, same detection and restoration pipeline underneath - restructured so that the fiddly per-face settings (which face to pick, in what order, filtered by gender) live in a separate BizyAir_ReActorOptions bundle instead of being fields on this node directly. If you're running one swap in a workflow, the difference doesn't matter much; if you're running several and want them to share identical face-selection rules without re-typing the same values on each, this split pays for itself.
The inputs that matter
Compared to the plain reactor node, this one keeps the core swap settings and drops the index/order/gender fields onto the optional options input instead:
enabled,input_image,swap_model,facedetection- same job as on the plain node: toggle the swap on or off, the target image, which swap model, which face-detector backbone.face_restore_model,face_restore_visibility,codeformer_weight- the restoration pass. Same reasoning as always applies here: the underlying swap model outputs at 128×128, so skipping restoration (face_restore_model: none) leaves a visibly soft face composited into an otherwise sharp image. Worth turning on unless you have a specific reason not to.source_image(optional) - the face you're pulling from.options(optional,OPTIONS) - plug aBizyAir_ReActorOptionsnode in here to control face ordering, index, and gender filtering. Leave it unwired and the node presumably falls back to sensible defaults (first detected face, no gender filter), though that fallback behavior isn't itself spelled out in the schema - if precise face selection matters for your image, wire the options node rather than assume.face_boost(optional,FACE_BOOST) - an additional restoration/enhancement pass specifically targeted at the swapped face region, layered on top of whateverface_restore_modelalready does.
Outputs, identical to the plain node: SWAPPED_IMAGE, BIZYAIR_PLACEHOLDER (undocumented in the schema, treat as internal), and ORIGINAL_IMAGE for comparison.
Installing it
ComfyUI Manager: search BizyAir, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/siliconflow/BizyAir.git
Set your BizyAir API key on first use.
Where people get burned
The obvious one: forgetting to wire an options node in at all when you actually needed specific face selection, then being confused about which face got swapped in a multi-person image. If your source or target photo has more than one face and you care which one gets used, this node's job is incomplete without a BizyAir_ReActorOptions node feeding it.
Beyond that, the same underlying-model caveats apply here as on the plain reactor node: the swap resolution ceiling and the InsightFace licensing that comes with it aren't specific to this variant, they're inherent to the open swap model every ReActor-style tool depends on. Splitting the settings into a separate options node doesn't change what's happening underneath - it's purely a workflow-organization convenience for people running multiple swaps with shared rules.
Inputs (10)
| 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 | 5 options: none, codeformer-v0.1.0.pth, GFPGANv1.4.onnx, GPEN-BFR-2048.onnx, RestoreFormer_PP.onnx | |
| face_restore_visibility | FLOAT | 1.000.1–1 | — |
| codeformer_weight | FLOAT | 0.500–1 | — |
| source_imageopt | IMAGE | — | |
| optionsopt | OPTIONS | — | |
| face_boostopt | FACE_BOOST | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| SWAPPED_IMAGE | IMAGE | — |
| BIZYAIR_PLACEHOLDER | BIZYAIR_PLACEHOLDER | — |
| ORIGINAL_IMAGE | IMAGE | — |