Flux FaceIR Restore Face
Restoring a face with 50 diffusion steps and zero CodeFormer
- faceir_model
- clip
- vae
- face_image
- reference_image_1
- reference_image_2
- reference_image_3
- restored_face
This is the node you actually came for. Flux FaceIR Restore Face is the diffusion engine of the pack: feed it an aligned face crop and it re-renders the face clean, using FLUX.2-Klein (the 4B base) with a restoration LoRA on top. No CodeFormer, no GFPGAN - a real diffusion pass that repairs blur, compression, and noise instead of smearing new skin over them.
If you've used older restoration tools, you know the failure mode: they fix the artifacts but quietly swap the face for a slightly different person. SUPIR was notorious for it. This pack's party trick is that it does reference-guided restoration - you can hand it one to three clean-ish photos of the same person, and it keeps their identity while fixing the degraded crop. Rare enough that the roundup thread that introduced the pack had someone cheering it on.
How it works
The node takes your aligned face crop, VAE-encodes it as image conditioning, and lets the diffusion model re-draw the face conditioned on that degraded version - with the FaceIR LoRA steering the base model toward "restored photo" rather than "new portrait." Reference images get VAE-encoded the same way and condition the generation as guidance. Because it runs the base (non-distilled) Klein checkpoint, guidance actually does CFG work here: it samples the empty prompt against your positive prompt, which is why guidance_scale defaults to 4 rather than the 1 you see on distilled checkpoints.
It processes faces one at a time - each batch item gets its own 50-step run, with the seed bumped per face so you don't get identical results.
The inputs that matter
faceir_model- the FACEIR_MODEL coming out of Flux FaceIR Apply LoRA (the base model with the FaceIR LoRA applied). Not optional, and easy to forget: it's why your graph needs that extra Apply LoRA node.clipandvae- the Qwen3-4B text encoder and the flux2 VAE, loaded with the standard CLIPLoader/VAELoader.face_image- thealigned_faceoutput from Flux FaceIR Detect And Align Face (or your own crop if you're on the aligned workflow).prompt- defaults to "restore a high quality portrait photo of a person, natural skin, detailed face." It works; tweak the wording rather than ripping it out.resolution- 512 default. Keep it in step with theface_sizeyou aligned at.num_steps- 50 default; the bundled whole-image workflow runs 20 and results stay strong. This is your speed lever.guidance_scale- 4 default. For the base model, this is real CFG; raise it if faces come out washed-out, lower it if they look overcooked.reference_image_1/2/3- optional, and the differentiator. A clear face of the same person in 1–3 slots anchors identity.
Output: restored_face (IMAGE), wired into Flux FaceIR Paste Restored Face - or saved directly if you're working on aligned crops.
The heavy part: models
This node is why the pack has a download burden. You need all five files, and the README is explicit that the workflow targets the non-quantized, non-FP8 base checkpoint:
flux-2-klein-base-4b.safetensors→models/diffusion_models/qwen_3_4b.safetensors→models/text_encoders/flux2-vae.safetensors→models/vae/lora_weights.safetensors→models/loras/- plus
retinaface_r34.pthfor the detect node if you're doing full images
Install the pack via ComfyUI Manager (search Flux FaceIR) or clone + python install.py, restart, and you're set. Expect roughly 9–13GB of VRAM for the 4B base at 50 steps - it's a consumer-friendly Flux 2, not the 32B dev model, but it's still a diffusion model.
Where people get burned
- Wrong checkpoint. The distilled Klein (4 steps) and the base (50 steps) behave differently, and this node is tuned for the base. Grab the non-quantized
base-4Bor results degrade andguidance_scalestops meaning what you think it means. - Slow batch. 50 steps × N faces adds up fast. Drop
num_stepsto 20 first; only then consider batch size. - References don't "fix" a different pose - they're guidance for identity and texture, not a warp target. The final image comes from your degraded crop, not the reference.
- "Missing node" after install - on Windows portable installs, dependencies often land in system Python instead of
python_embeded, which makes nodes vanish from the graph. Re-run the install with the full path to the embedded Python and restart.
It's new (the pack shipped April 2026), so treat settings as starting points, not gospel. But 50 honest diffusion steps per face beats any one-shot "restore faces" checkbox I've used.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| faceir_model | FACEIR_MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| face_image | IMAGE | — | |
| prompt | STRING | restore a high quality portrait photo of a person, natural skin, detailed face | — |
| resolution | INT | 512128–2048 | — |
| num_steps | INT | 501–200 | — |
| guidance_scale | FLOAT | 4.00–20 | — |
| seed | INT | 420–2147483647 | — |
| reference_image_1opt | IMAGE | — | |
| reference_image_2opt | IMAGE | — | |
| reference_image_3opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| restored_face | IMAGE | — |