ComfyUI Node

Nested Detailer

Faces first, then eyes inside those faces, in one pass

By mudknight·Created 8 months ago·Updated 2 months ago· 1
Nested Detailer
  • image
  • model
  • vae
  • positive
  • negative
  • image
  • detailed_faces
face_model
eyes_pair_model
eye_single_model
threshold0.50
seed0
cfg1.5
samplereuler_ancestral_cfg_pp
scheduleralign_your_steps
face_steps20
face_denoise0.40
face_scale1.5
eye_steps20
eye_denoise0.40
eye_scale1.5
upscale_method
max_megapixels1.5
feather0.20
context_padding0.10

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.

Categorymudknight/detailer

Inputs (23)

NameTypeDefaultDescription
face_modelCOMBO1 options: bbox/face_yolov8m.pt
eyes_pair_modelCOMBO1 options: bbox/face_yolov8m.pt
eye_single_modelCOMBO1 options: bbox/face_yolov8m.pt
thresholdFLOAT0.500–1Detection threshold for all models
imageIMAGE
modelMODEL
vaeVAE
positiveCONDITIONING
negativeCONDITIONING
seedINT00–18446744073709550000
cfgFLOAT1.50–100
samplerCOMBOeuler_ancestral_cfg_pp44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBOalign_your_steps10 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +4
face_stepsINT201–10000
face_denoiseFLOAT0.400–1
face_scaleFLOAT1.50.1–2Amount to upscale cropped region before sampling. Higher values create more detailed images.
eye_stepsINT201–10000
eye_denoiseFLOAT0.400–1
eye_scaleFLOAT1.50.1–2Amount to upscale cropped region before sampling. Higher values create more detailed images.
upscale_methodCOMBO5 options: lanczos, bilinear, bicubic, area, nearest-exact
max_megapixelsFLOAT1.50.1–10Maximum size in megapixels for upscaled images
featherFLOAT0.200–1Percentage of image to feather when uncropping
context_paddingFLOAT0.100–1Percentage of image to use for context from edge

Outputs (2)

NameTypeDescription
imageIMAGE
detailed_facesIMAGE