Nested Detailer
Faces first, then eyes inside those faces, in one pass
- image
- model
- vae
- positive
- negative
- image
- detailed_faces
The single FastDetailer pass is great at rescuing a mushy face, but it has a blind spot: eyes. A face that's been detailed to crispness still has eyes that are maybe 40 pixels tall, and a one-node detail pass doesn't give them their own resolution. Nested Detailer is the fix - it runs the detail loop twice, hierarchically. First it detects and details faces, then it detects and details eyes within the freshly detailed face, and only then composites everything back.
Why nested instead of just chaining two FastDetailer nodes? The pack's docs explain it neatly: FastDetailer always scales its crop to 1MP before sampling. If you chain two standalone passes, you do upscale → sample → downscale → upscale → sample → downscale, and the eye pass is working off a degraded intermediate. Nested Detailer runs the eye pass on the already-scaled face crop, so the eye detail doesn't get thrown away by a downscale in between.
The inputs that matter
Three detectors, all defaulting to face_yolov8m.pt - you'd typically leave them alone, but this is where you'd drop in an eye-specific model:
face_model- finds faces.eyes_pair_model- finds both eyes together.eye_single_model- catches single eyes (useful when one eye is obscured or in profile; the pack's docs suggest eye-detector fallbacks here).
Everything else is the usual sampler panel, split into two groups: face_steps / face_denoise / face_scale for the face pass, and eye_steps / eye_denoise / eye_scale for the eye pass. face_scale and eye_scale (default 1.5) control how much the crop is upscaled before sampling - higher means more resolution to work with but more VRAM. max_megapixels (default 1.5) caps the upscaled region so you don't blow past your card's budget. threshold is shared across all three detectors, and feather / context_padding work as in the plain FastDetailer.
You feed it the usual image, model, vae, positive, negative, seed. Outputs are image (final composite) and detailed_faces - the upscaled, eye-detailed face crops, which are great for checking that the second pass actually found eyes.
Installing it
Same pack, same catch as the other detailers: it needs Impact Pack and Impact Subpack for the YOLO detection, plus the models that live in the Subpack. Install via Manager (search comfyui-mudknight-utils) or:
cd ComfyUI/custom_nodes
git clone https://github.com/mudknight/comfyui-mudknight-utils
Where people get burned
Two real gotchas. First, this is heavier than FastDetailer - two full sampling passes per image, plus a bigger upscaled crop for the eye pass, so watch VRAM if you're on 6–8GB. Second, the honest limitation that applies to all detail passes: at viewing resolution, the eye-level difference is often invisible, and the top reply to a famous detailing demo was literally "they look identical." Nested Detailer is for when the eyes are actually wrong - crossed, deformed, melted - not for squeezing marginal sharpness out of an already-decent portrait. If the faces come back fine but the node is chewing your GPU, drop it for the single-pass FastDetailer and save the second pass for the renders that need it.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| face_model | COMBO | 1 options: bbox/face_yolov8m.pt | |
| eyes_pair_model | COMBO | 1 options: bbox/face_yolov8m.pt | |
| eye_single_model | COMBO | 1 options: bbox/face_yolov8m.pt | |
| threshold | FLOAT | 0.500–1 | Detection threshold for all models |
| image | IMAGE | — | |
| model | MODEL | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| seed | INT | 00–18446744073709550000 | — |
| cfg | FLOAT | 1.50–100 | — |
| sampler | COMBO | euler_ancestral_cfg_pp | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | align_your_steps | 10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4 |
| face_steps | INT | 201–10000 | — |
| face_denoise | FLOAT | 0.400–1 | — |
| face_scale | FLOAT | 1.50.1–2 | Amount to upscale cropped region before sampling. Higher values create more detailed images. |
| eye_steps | INT | 201–10000 | — |
| eye_denoise | FLOAT | 0.400–1 | — |
| eye_scale | FLOAT | 1.50.1–2 | Amount to upscale cropped region before sampling. Higher values create more detailed images. |
| upscale_method | COMBO | 5 options: lanczos, bilinear, bicubic, area, nearest-exact | |
| max_megapixels | FLOAT | 1.50.1–10 | Maximum size in megapixels for upscaled images |
| feather | FLOAT | 0.200–1 | Percentage of image to feather when uncropping |
| context_padding | FLOAT | 0.100–1 | Percentage of image to use for context from edge |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| detailed_faces | IMAGE | — |