Ultimate Face Fix
The face detailer that speaks your checkpoint's language
- image
- model
- vae
- positive
- negative
- face_detector
- face_landmarker
- bboxes
- face_parser
- sam_model
- fixed_image
- original_face_crops
- processed_face_crops
- face_mask
- debug_preview
ComfyUI's face-fix story usually ends in one of two places: a fixed restoration model (GFPGAN, CodeFormer) that smooths faces into plastic, or Impact Pack's FaceDetailer, which works but makes you wrestle a two-dozen-input node. Ultimate Face Fix is the new kid that splits the difference. It does what ADetailer did for the A1111 crowd - detect faces, give each one its own img2img pass, blend it back - but the "fix" is done by your checkpoint, VAE, prompt, and sampler, not by a generic face model. The name is a promise, and it mostly keeps it.
The mechanism is a detect → crop → repair → mask → blend pipeline, all inside one node:
- A YOLO face detector finds every face (or just the largest, or the first N).
- Each face is cropped square with context around it (
context_scale, default 1.8) and resized totarget_resolution(default 1024). - Each crop is re-rendered as img2img using the
model,vae,positive,negative, sampler, and scheduler you connected, at whatever denoise you set. - The SegFace parser builds a precise semantic mask - which face parts to keep versus background - instead of a sloppy blob.
- Colors are matched to the original boundary, then the crop is blended in with multiband pyramid blending rather than a plain feather.
Where people get burned: the biggest lever is repair_mode. Detail (0.28), Repair (0.42), and Reconstruct (0.58) are fixed denoise presets; Custom (the default, 0.4) uses custom_denoise. Higher denoise reconstructs more aggressively but changes identity and facial geometry - on a character you care about, start at Detail and work up. The other knobs that matter: face_selection (all, largest, largest_n) and max_faces for crowd shots, and detection_quality set to maximum, which runs tiled detection and is what finds the small background faces the full-image pass misses.
Wiring follows the ADetailer-shaped habit: image in, a generation model/vae/positive/negative that matches the source image's style, plus the face_detector connection from the YOLO loader node (or external bboxes, which skip YOLO entirely). face_parser is technically optional, but don't skip it - without it you fall back to SAM/landmark/geometry masks and lose the precise part masks. Outputs: fixed_image goes to your Save Image node; the other four (original_face_crops, processed_face_crops, face_mask, debug_preview) exist so you can see exactly what changed and why.
Install is the pack's shared setup: in ComfyUI Manager search for Ultimate Face Fix, hit Install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Merserk/ComfyUI-Ultimate-Face-Fix.git
cd ComfyUI-Ultimate-Face-Fix
pip install -r requirements.txt
python scripts/prepare_models.py --comfy-root ../..
That last step downloads, verifies, and prepares the three required models (YOLO detector, SegFace parser, MediaPipe landmarks) - it can take a minute on first run. It pins ultralytics==8.4.102, which is the right call given Ultralytics' supply-chain incident in late 2024.
This pack is young - one launch thread in July 2026 - so treat the defaults as a starting point, not doctrine. The early community signal is genuinely good: a tester who ran it for a couple days called it "much better than what I have been using for the last 2 years" and migrated their face repair onto it. The one thing it doesn't do is hold identity across the pass by itself; people pair it with an identity LoRA (works fine - load the LoRA before the model input) and keep denoise under about 0.5.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | Generation model used for crop img2img. | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| face_selection | COMBO | all | 3 options: all, largest, largest_n |
| detection_quality | COMBO | maximum | 2 options: maximum, balanced |
| max_faces | INT | 161–64 | — |
| min_face_size | INT | 244–1024 | — |
| detection_confidence | FLOAT | 0.250.01–1 | — |
| context_scale | FLOAT | 1.801.1–3 | — |
| target_resolution | COMBO | 1024 | 5 options: none, 512, 768, 1024, 1536 |
| repair_mode | COMBO | custom | 4 options: detail, repair, reconstruct, custom |
| custom_denoise | FLOAT | 0.400–1 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 251–200 | — |
| cfg | FLOAT | 5.50–100 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | beta | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| mask_preset | COMBO | core_face | 3 options: core_face, portrait_safe, head |
| sam_refine | COMBO | auto | 3 options: auto, always, off |
| mask_grow_percent | FLOAT | 1.50–15 | — |
| mask_feather_percent | FLOAT | 2.50–15 | — |
| color_match_strength | FLOAT | 0.650–1 | — |
| blend_mode | COMBO | multiband | 2 options: multiband, alpha |
| face_detectoropt | FACE_FIX_DETECTOR | Connect Load Face Fix Detector. It may be omitted only when bboxes is connected. | |
| face_landmarkeropt | FACE_DETECTION_MODEL | Connect ComfyUI's Load Face Detection Model (MediaPipe) output for landmark-aware crops. | |
| bboxesopt | BOUNDING_BOX | [object Object] | When connected, these boxes replace YOLO detection. |
| face_parseropt | FACE_FIX_PARSER | Connect Load Face Fix Parser. When omitted, SAM/landmark/geometry fallback masks are used. | |
| sam_modelopt | MODEL | Connect the MODEL output from the supplied SAM 3.1 checkpoint. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| fixed_image | IMAGE | — |
| original_face_crops | IMAGE | — |
| processed_face_crops | IMAGE | — |
| face_mask | MASK | — |
| debug_preview | IMAGE | — |