Nodes/Faceless Node for ComfyUI/Face Restore (Video)
ComfyUI Node

Face Restore (Video)

Sharpening a swapped face across a whole clip

By jeffy5·Created 2 years ago·Updated 4 months ago· 61
Face Restore (Video)
  • video
  • video
restoration_model

The per-frame version of Faceless Face Restore, and per the pack's own example workflow (video_face_swap_and_restore.json), it's meant to run right after Face Swap (Video), not as a general-purpose fix for any footage. The problem it solves is the same one the still-image node solves: the swap engine underneath this pack is capped at a low internal resolution no matter your source quality, so every swapped frame comes out a bit soft, and this is how you claw the detail back before saving.

What's running, and the trade-off worth knowing

Per the README's default model list, this is GFPGAN (gfpgan_1.4.onnx) - a generative restoration model, run per detected face, per frame. It doesn't sharpen existing pixels so much as hallucinate plausible high-frequency detail - skin texture, crisper eyes - constrained by what's actually there. That's genuinely effective on a real, photographic face. It's also a well-known point of friction: pushed too hard, or applied to a face that wasn't purely photorealistic to begin with, GFPGAN tends to flatten texture into a recognizable smooth, slightly plasticky look rather than just cleaning it up.

On video, that effect is more noticeable than on a single still - a face that's a touch too smooth reads as artificial faster when it's moving than when it's frozen in one frame. There's no strength or blend control exposed on this node to dial that back, so the right move is to preview a short test clip before committing GFPGAN to a full-length render, not to trust it blind because it worked fine on a still.

Inputs and outputs

  • video - a FACELESS_VIDEO, usually straight off a Face Swap (Video) node.
  • restoration_model - a dropdown sourced from whatever restoration models you've placed on disk.

Output: a single video (FACELESS_VIDEO).

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

The model needs to land in ComfyUI/models/faceless/face_restoration/, not ComfyUI's regular directories. Run download_models.py (the default set includes GFPGAN) and restart so the dropdown picks it up.

Where people get burned

Cost stacks up. This runs a full model pass per detected face, per frame, on top of whatever the swap step already cost - a long clip through swap-then-restore back to back adds up fast. That's two model passes per frame, not one, and there's nothing here to reduce it.

No live preview. This pack has no in-graph video preview for any node. Route the output through Load Images (Video) into a PreviewImage node to actually see a few frames before running a long clip end to end - cheaper than saving the whole thing to find out restoration over-smoothed it.

Chaining order matters. This node is built to follow a swap, not to run standalone on arbitrary footage - that's the pipeline the pack's own example workflow demonstrates, and it's the case the model's tuned for.

Categoryfaceless

Inputs (2)

NameTypeDefaultDescription
videoFACELESS_VIDEO
restoration_modelCOMBO0 options:

Outputs (1)

NameTypeDescription
videoFACELESS_VIDEO