FastDetailer
The no-fuss face fixer that gives a tiny face a full-res pass
- image
- model
- vae
- positive
- negative
- image
- cropped_image
If you've ever rendered a 1024×1024 image and the face looks like it was smeared with a thumb, this is the node you're missing. The problem isn't your prompt - it's that a face occupying a couple hundred pixels of frame only gets a couple hundred pixels of model attention. FastDetailer from the mudknight-utils pack fixes that the way Impact Pack's FaceDetailer does: detect the face, crop it, run a fresh sampling pass on it at proper resolution, and paste it back. The difference is the "proper resolution" part - this thing upscales the crop to a full megapixel before it samples, which is why it's called fast and why small faces come back with actual eyelashes.
How it works
Under the hood it's a detect-crop-detail-uncrop pipeline wrapped in one node. It leans on Impact Pack's machinery: a YOLO detector (the same face_yolov8m.pt weights Bingsu's ADetailer uses) finds bounding boxes, then each detected region is cropped, upscaled to ~1MP, sampled with your model, scaled back down to its original size, and blended back with a feathered mask. The context_padding input controls how much of the surrounding image is kept around the crop so the detail pass has something to anchor to, and feather controls how soft the blend back into the original is. Where FaceDetailer gives you a pile of SEGS plumbing, this is the whole loop in a single node with sensible defaults.
The inputs that matter
You wire in your image, model, VAE, and positive/negative conditioning like you would any KSampler, plus:
bbox_model- the YOLO detector for faces. Defaults tobbox/face_yolov8m.pt.fallback_model- a second detector that only runs if the first finds nothing. Handy for eye detectors: detect a face, and if none turns up, fall back to hunting eyes.threshold- detection confidence, 0.5 is a fine start.denoise(default 0.4) - how hard the detail pass rewrites the crop. Low for "sharpen what's there", higher if the face is genuinely broken.cfgand the sampler/scheduler trio - defaults areeuler_ancestral_cfg_ppandalign_your_steps, which are the pack author's own taste and they're a decent place to start.upscale_method/upscale_model- how the crop gets to 1MP; pick a model like 4x-UltraSharp if you have one, otherwise Lanczos does the job.
Outputs are image (the finished composite) and cropped_image (the raw crop, handy for debugging whether detection actually found the face).
Installing it
The pack is on ComfyUI Manager - search comfyui-mudknight-utils and install, then restart. Or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/mudknight/comfyui-mudknight-utils
The catch, and it's a real one: this node does nothing without Impact Pack installed. The README is explicit that detailer nodes require ComfyUI-Impact-Pack and ComfyUI-Impact-Subpack (the subpack is where the YOLO detector provider and its model weights live since Impact v8 moved Ultralytics out of the base pack). Install both before you drag this node in, or the model dropdown will be empty and detection will silently fail.
Where people get burned
The most common failure mode is no detection at all: if the image comes back unchanged, lower the threshold or check the model file is actually in ComfyUI/models/ultralytics/. The pack's own docs also warn that the 1MP crop trades cohesion for detail - the detailed face can drift from the rest of the image, so keep denoise moderate unless the face is wrecked. And remember the Ultralytics history lesson: that dependency has one supply-chain incident behind it (December 2024), so it's worth installing the Subpack rather than a random "ultralytics" pip package yourself.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| bbox_model | COMBO | 1 options: bbox/face_yolov8m.pt | |
| fallback_model | COMBO | 2 options: none, bbox/face_yolov8m.pt | |
| threshold | FLOAT | 0.500–1 | Detection threshold |
| image | IMAGE | — | |
| model | MODEL | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| 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 |
| denoise | FLOAT | 0.400–1 | — |
| upscale_method | COMBO | 5 options: lanczos, bilinear, bicubic, area, nearest-exact | |
| upscale_model | COMBO | 1 options: none | |
| 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 | — |
| cropped_image | IMAGE | — |