Nodes/☁️BizyAir Nodes/☁️BizyAir ReActor 🌌 Fast Face Swap
ComfyUI Node

☁️BizyAir ReActor 🌌 Fast Face Swap

The whole face-swap stack in one node

By siliconflow·Created 2 years ago·Updated 11 months ago· 855
☁️BizyAir ReActor 🌌 Fast Face Swap
  • input_image
  • source_image
  • face_boost
  • SWAPPED_IMAGE
  • BIZYAIR_PLACEHOLDER
  • ORIGINAL_IMAGE
enabledtrue
swap_model
facedetection
face_restore_model
face_restore_visibility1.00
codeformer_weight0.50
detect_gender_inputno
detect_gender_sourceno
input_faces_index0
source_faces_index0
console_log_level1

ReActor is the other branch of face identity work - not the "generate a face that resembles this person" approach PuLID and InstantID take, but a straight pixel-level swap: detect the face in a target image, detect a face in a source image, replace one with the other. It's post-processing, not generation. The community's own shorthand for the split: adapters like PuLID get you "80% there," and a ReActor-style swap on top gets you the rest of the way to an exact match - the two approaches are complementary rather than competing.

What's actually running underneath

swap_model offers inswapper_128.onnx, and that name is worth reading literally: the open swap model this whole category of tool depends on outputs at 128×128 resolution, full stop, and that ceiling hasn't moved in years - the model's own maintainers describe it as no longer maintained and point commercial users at their paid product instead. That's not a BizyAir limitation, it's the actual state of the open ecosystem this node (and Roop, and FaceFusion, and every other InsightFace-based swapper) is built on. This is exactly why face_restore_model exists in this node: without a restoration pass, a 128×128 swap composited back into a full-resolution image looks visibly soft. Budget for using it.

The inputs that matter

  • input_image / source_image - target (the image getting a new face) and source (where the face comes from). source_image is optional in this schema; if you're reusing a face from earlier in a workflow, check whether it's actually wired in before assuming a swap silently failed.
  • swap_model, facedetection - the swap model and which detector backbone finds faces to swap (RetinaFace variants or YOLOv5 options).
  • face_restore_model - none, codeformer, GFPGAN, GPEN, or RestoreFormer_PP. Pick one; leaving this on none means you keep the raw 128×128-sourced blur. face_restore_visibility (0.1–1) blends the restored face back against the swap, and codeformer_weight (0–1) is Codeformer's own fidelity-vs-quality dial, relevant only if you picked it.
  • detect_gender_input / detect_gender_source, input_faces_index / source_faces_index - filters for when a photo has more than one face: restrict by gender, or pick a specific face by its detected position.
  • enabled - a toggle to switch the whole node off without unplugging it, handy while you're testing a workflow.

Outputs: SWAPPED_IMAGE (the result), ORIGINAL_IMAGE (an unmodified passthrough, useful for side-by-side comparison), and BIZYAIR_PLACEHOLDER, whose exact purpose isn't documented in the node's own schema - treat it as an internal artifact rather than something to wire up deliberately.

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 before running anything.

Where people get burned

Multi-face images are the recurring trap: without setting input_faces_index/source_faces_index deliberately, you're at the mercy of whatever order the detector found faces in, which can silently swap the wrong person in a group photo. And on the licensing side, worth knowing even running through BizyAir's cloud: InsightFace's ArcFace weights underneath this whole swap pipeline are non-commercial-only, and that restriction travels with every tool built on them - switching between ReActor, PuLID, or InstantID doesn't get you a cleaner license, since they all share the same dependency underneath.

Category☁️BizyAir/🌌 ReActor

Inputs (14)

NameTypeDefaultDescription
enabledBOOLEANtrue
input_imageIMAGE
swap_modelCOMBO1 options: inswapper_128.onnx
facedetectionCOMBO4 options: retinaface_resnet50, retinaface_mobile0.25, YOLOv5l, YOLOv5n
face_restore_modelCOMBO5 options: none, codeformer-v0.1.0.pth, GFPGANv1.4.onnx, GPEN-BFR-2048.onnx, RestoreFormer_PP.onnx
face_restore_visibilityFLOAT1.000.1–1
codeformer_weightFLOAT0.500–1
detect_gender_inputCOMBOno3 options: no, female, male
detect_gender_sourceCOMBOno3 options: no, female, male
input_faces_indexSTRING0
source_faces_indexSTRING0
console_log_levelCOMBO13 options: 0, 1, 2
source_imageoptIMAGE
face_boostoptFACE_BOOST

Outputs (3)

NameTypeDescription
SWAPPED_IMAGEIMAGE
BIZYAIR_PLACEHOLDERBIZYAIR_PLACEHOLDER
ORIGINAL_IMAGEIMAGE