- face_enhance_model
- face_count
- cropped_faces
- face_parts
- face_count
- enhanced_cropped_faces
Sitting between detection and blending, this is the node that actually does the face-fixing work - it takes the cropped faces that Detect Faces found and runs each one through the dedicated face-enhancement GAN loaded via Load Face Enhancer Model. This is the plain version; if you need per-region control over specific facial parts (eyes, nose, hair, and so on individually), that's what Enhance Faces (Advanced) is for. This one keeps things simple.
The underlying model was trained specifically on cropped, zoomed-in faces rather than full photos, which is why it exists as a separate step from the general Stage 1 restoration node - a model trying to fix a whole photo at once just doesn't have the resolution budget to recover fine facial detail the way a model dedicated purely to faces can. It's a similar idea to how detail-pass tools handle small faces in diffusion pipelines: crop out the problem area, give it a dedicated pass at full resolution, put it back.
Required inputs: face_enhance_model (from Load Face Enhancer Model), face_count, and cropped_faces (the latter two both from Detect Faces). Optional: face_parts, a single additional image input - the advanced node splits this same idea into roughly eighteen specific region slots, but here it's one general-purpose optional socket rather than an opinionated breakdown. Outputs: face_count (passed through unchanged) and enhanced_cropped_faces, which is what you wire into Blend Faces next.
For a first run, wire the three required inputs straight from their source nodes and leave face_parts disconnected entirely - that's the default, expected path and it's enough for the large majority of restoration jobs. There's genuinely no reason to reach for face_parts unless you have something specific to feed it; an empty optional input doesn't change the node's behavior.
No dedicated model download for this node specifically - it depends entirely on face_enhance_model coming in from Load Face Enhancer Model, which is where the actual checkpoint setup happens (the face_checkpoints.zip download, choosing between the 256px and 512px variants). See that node's page for the full install rundown. Beyond that, the standard pack install applies: ComfyUI Manager or a manual git clone into custom_nodes/, restart, then pip install -r requirements.txt against ComfyUI's own Python environment.
When something goes wrong here, it's almost always upstream. If cropped_faces came back empty because Detect Faces didn't find anything, this node has nothing to do - the README documents that the detection step silently returns the original image untouched when no face is found, so a blank or unchanged result usually traces back there rather than to the enhancer itself. If the enhanced faces come out with visible artifacts or look oddly scaled, the more common cause is a mismatch between the model_face_size set back on Load Face Enhancer Model and the face_size set on Detect Faces - those two need to agree on 256 or 512, since nothing here automatically reconciles a mismatch between them. Get that alignment right once at the loader level and this node mostly just works.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| face_enhance_model | FACE_ENHANCE_MODEL | — | |
| face_count | FACE_COUNT | — | |
| cropped_faces | IMAGE | — | |
| face_partsopt | IMAGE, | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| face_count | FACE_COUNT | — |
| enhanced_cropped_faces | IMAGE | — |