π ZenFace Detailer (Clownshark Edition)
Detect, resample, blend
- image
- model
- clip
- vae
- positive
- negative
- bbox_detector
- image
- mask
If you've done any face detailing in ComfyUI, you know the stock route: Impact Pack's FaceDetailer or DetailerForEach, a detector provider on the side, a KSampler, a handful of mask and blur nodes, and enough wires to re-decorate a server room. ZenFace Detailer (the "Clownshark Edition") collapses that entire detect-crop-refine-paste loop into a single node. You feed it an image, your checkpoint, conditioning, and one BBOX_DETECTOR, and it finds every face, re-samples each one on its own, and feathers the results back in so you can't see where the surgery happened. One node in, clean image out.
It's a niche pack - tiny community footprint, one main author (MONKEYFOREVER2, a handle with essentially no Reddit presence that I could find), MIT-licensed, currently at v1.1. But if you live in Impact Pack workflows, the pitch is real: this is the detect-resample loop Impact already gives you, re-packed so a beginner can actually read the graph.
How it works
Under the hood it's Impact Pack's own recipe, grounded in the source: it calls your bbox_detector's .detect() with bbox_threshold, bbox_dilation, bbox_crop_factor and drop_size - the same interface FaceDetailer uses. Every detected face gets cropped (padded to a multiple of 8 so the VAE doesn't complain), VAE-encoded, and run through a full KSampler pass at crop resolution with the sampler, scheduler, steps, CFG and seed you picked. Then it VAE-decodes, resizes back, and the smart part kicks in: per-channel color-statistics transfer (color_match) stops the fix from dragging in a different white balance, a shaped mask (ellipse, squircle, or rectangle) stops the boundary looking like a sticker, and distance-transform feathering plus a choice of normal/soft_light/overlay blending makes the composite invisible.
It outputs both the patched image and a combined mask of all the face regions - wire the mask into a save node or down into other processing if you want to know exactly where it worked.
The inputs that actually matter
Most of the 26 inputs you can leave alone. The ones a beginner actually touches:
bbox_detector- the one input that will trip you up. It's theBBOX_DETECTORtype, which only exists if you have ComfyUI Impact Pack installed. Wire anUltralyticsDetectorProvider(with the face YOLO model) in here.denoise(default 0.45) - the single dial that decides whether you're fixing faces or redrawing them. Lower keeps more of the original; crank it and you're effectively re-painting each head.bbox_crop_factor(default 3.0) - how much area around the face gets resampled. Too small and you only fix the eyes; too big and you're fighting the rest of the head.feather_amount(default 40) - the seam killer. Bump it whenever you see a hard edge around the face.color_match(default on) - leave it on at high denoise; it's what stops color-shift artifacts.
The honest gotcha: the advanced sampler block
noise_type_init, eta and sampler_mode are the flashy "Clownshark" sampler settings this node advertises - a wink at ClownsharkBatwing, the RES4LYF sampler author whose work clearly inspired this. Here's the thing: in the shipped v1.1.0 code, noise_type_init and eta are accepted but never actually passed into the sampler call. Set "perlin" and nothing changes. The README's own upgrade note shows these parameters churning between versions, so treat that whole block as work-in-progress rather than a source of real control. sampler_name, scheduler, steps, cfg and seed do exactly what you'd expect.
Installing it
Impact Pack first - without it, the bbox_detector input won't even resolve. Then:
cd ComfyUI/custom_nodes
git clone https://github.com/MONKEYFOREVER2/ComfyUI-ZenFaceDetailer.git
cd ComfyUI-ZenFaceDetailer
pip install -r requirements.txt
Restart ComfyUI and you'll find it under Add Node β Zen/Detailers β π ZenFace Detailer (Clownshark Edition). requirements.txt is a single line - opencv-python - so there are no heavy downloads beyond that. Or just use ComfyUI Manager and search "ZenFace Detailer". A custom JS skin gives the node a dark tabbed settings panel, which is a nice touch.
Where people get burned
- Can't find a BBOX_DETECTOR - Impact Pack isn't installed. Nothing else will satisfy that input type.
- Nothing happens / faces untouched - no detections; raise
bbox_thresholdor lowerdrop_size, or check you're running the face detector model, not the person one. - Grey or hard-edged box around faces -
feather_amounttoo low, orcolor_matchoff at high denoise. This is the same artifact class as ADetailer's grey-box problem. - Version churn - the README warns that v1.0 β v1.1 replaced
blur_maskwith the current mask params. Old workflows need the node re-added.
One more honest note: this pack has essentially zero community discourse. I searched - nothing. If it misbehaves you'll be the first to file the issue, so the README (and reading the 281-line zen_face_detailer.py yourself) is your documentation.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| model | MODEL | β | |
| clip | CLIP | β | |
| vae | VAE | β | |
| positive | CONDITIONING | β | |
| negative | CONDITIONING | β | |
| bbox_detector | BBOX_DETECTOR | β | |
| bbox_threshold | FLOAT | 0.500β1 | β |
| bbox_dilation | INT | 10-512β512 | β |
| bbox_crop_factor | FLOAT | 3.01β10 | β |
| drop_size | INT | 101β10000 | β |
| mask_shape | COMBO | 3 options: ellipse, squircle, rectangle | |
| feather_amount | INT | 400β200 | β |
| mask_expand | INT | 0-100β100 | β |
| blend_mode | COMBO | 3 options: normal, soft_light, overlay | |
| color_match | BOOLEAN | true | β |
| noise_type_init | COMBO | 5 options: default, gaussian, uniform, perlin, simplex | |
| eta | FLOAT | 0.000β10 | β |
| sampler_mode | COMBO | 3 options: standard, unsample, resample | |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| steps | INT | 201β10000 | β |
| cfg | FLOAT | 8.00β100 | β |
| denoise | FLOAT | 0.450β1 | β |
| seed | INT | 00β18446744073709550000 | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |
| mask | MASK | β |