Face Swap (Video)
Putting one photo's face into a whole clip
- source_image
- target_video
- video
This is the node behind "put this person's face in this video" - the video sibling of the pack's still-image Face Swap node, running the same swap across every frame of a clip instead of a single photo. One reference face, one target video, and the identity from the reference gets composited onto whatever face the pipeline detects in each frame.
It's worth being upfront about where this sits in the ecosystem: the swap engine itself is a ComfyUI port of FaceFusion, a genuinely well-known and actively developed project (its 3.0 launch thread on r/StableDiffusion pulled 2,400+ upvotes). This specific ComfyUI wrapper, though, is a small, newer layer on top of it, and it has essentially no footprint of its own in community discussion - you're mostly on your own for support beyond the README and this pack's example workflows.
How it works, frame by frame
Same three-model pipeline as the still-image version - a detector locates the face in a frame, a recognizer produces an identity embedding for both the source photo and the detected face, a swapper blends the source identity in - just looped across every frame of the video instead of run once. There's no temporal tracking involved as far as the schema shows: each frame gets its own independent detect-and-swap pass, not a persistent lock on "this is the face I'm tracking," so on fast motion or partial occlusion you may see the swap flicker slightly frame to frame rather than staying perfectly locked.
The default swapper model per the README (inswapper_128.onnx) is capped at a low internal resolution regardless of your source footage - the same limitation the image node has, just now applied per frame. The pack's own example workflow (video_face_swap_and_restore.json) pairs this node with a Video Face Restore pass immediately after, and that pairing is basically mandatory if you want a clean result rather than optional polish.
Inputs and outputs
source_image- your one reference photo, the face you want to appear.target_video- the clip to swap into, as aFACELESS_VIDEO(load it with one of this pack's own video loaders first).swapper_model,detector_model,recognizer_model- the same three dropdowns as the image node, sourced from yourmodels/faceless/folders.
Output: a single video (FACELESS_VIDEO) - feed it straight into Video Face Restore, Video Remove Background, or a save node.
Installing it
Manager: search Faceless Node for ComfyUI. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/jeffy5/comfyui-faceless-node
pip install -r requirements.txt
Models go in ComfyUI/models/faceless/, not ComfyUI's usual model folders - run the bundled download_models.py (default set, or --all) and restart so the dropdowns populate.
Where people get burned
Cost. This is one of the heavier nodes in the pack. Detection and swapping run per frame with nothing exposed to trade quality for speed - no frame-skip, no batch controls - so runtime scales roughly with clip length. Test on a short clip before committing to a long one.
Frame-to-frame flicker. Because each frame is swapped independently rather than tracked across the clip, expect occasional inconsistency on difficult footage - that's the architecture, not a bug to chase.
Commercial use. Same licensing caveat as the still-image node: the swapper and recognizer weights trace to InsightFace's model zoo, non-commercial research use only regardless of how you got the files. Real consideration if this is feeding a paid product.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| source_image | IMAGE | — | |
| target_video | FACELESS_VIDEO | — | |
| swapper_model | COMBO | 0 options: | |
| detector_model | COMBO | 0 options: | |
| recognizer_model | COMBO | 0 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | FACELESS_VIDEO | — |