FC FaceFusion
The face swap in FaceChain that doesn't use InsightFace's 128px swapper
- source_image
- fusion_image
- IMAGE
FC FaceFusion is the heart of ComfyUI-FaceChain: the actual pixel-level face swap. It's the node you reach for when you want one person's face transplanted onto another image - the same job ReActor or Roop do, but through a completely different engine.
Here's the part most people get wrong. Nearly every face-swap tool you've heard of - ReActor, Roop, the swap half of FaceFusion - is InsightFace's inswapper under the hood, which is famously frozen at 128×128 and unmaintained. This node is not that. It calls ModelScope's damo/cv_unet_face_fusion_torch pipeline, a UNet-based fusion model that runs at the resolution of your input image rather than an upscaled 128px blob. So the "everything is the same 128×128 ceiling" caveat that applies to the InsightFace monoculture doesn't apply here. The trade-off is that you're betting on a less-polished, less-tested model that downloads from Alibaba's hub instead of the one everyone debugged to death.
What it actually does
Feed it two images: source_image (the "template" - the photo whose pose, body, and scene you keep) and fusion_image (the "user" - the face you want to graft on). It returns a single IMAGE with the swapped face composited onto the template. That's it. No mask input, no face-index selector, no options to fiddle with. It's deliberately a one-shot black box, and the "fusion" quality varies - expect the skin to blend, but don't expect Hollywood-grade seamless compositing on the first try.
In a typical FaceChain inpainting workflow you won't feed it a full portrait, anyway. The standard graph is: FC FaceDetectCrop slices out a tight face crop (often in square 512 width height mode), the sampler generates a new face into that crop, and FC FaceFusion is what merges that generated face back into the original context. Run it on the full image and the model has to figure out where the face is and how to blend it on its own - it works, it's just more fragile.
Wiring it up
Both inputs are IMAGE tensors, so anything image-producing feeds them - a Load Image, a VAE Decode, or the output of FC FaceDetectCrop. The single IMAGE output goes to a preview node or into the next compositing step.
Installing and first-run reality check
Install via ComfyUI Manager (search "ComfyUI-FaceChain") or:
cd ComfyUI/custom_nodes
git clone https://github.com/THtianhao/ComfyUI-FaceChain
Then restart. Two things will bite you on first use. One: this pack auto-installs a heavy dependency list at startup - onnxruntime-gpu, mmdet==2.26.0, modelscope, insightface, transformers, plus an mim install mmcv-full step - so your first launch after installing will hang for a while printing pip logs. Two: the fusion model itself isn't bundled. The first time you run this node it downloads damo/cv_unet_face_fusion_torch from ModelScope into its cache, which needs working access to modelscope.cn (not Hugging Face). If the node silently returns nothing or errors on a fresh machine, check that download actually completed before blaming the node.
One more honest warning: this pack's last push was April 2025 and its community footprint is tiny. When ModelScope's hub or Python versions drift, you're on your own - there's no horde of people who've already hit your exact error. It's a fun, different engine worth playing with; it's just not a "set and forget" production tool.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| source_image | IMAGE | — | |
| fusion_image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |