Detailer (SEGS/pipe)
The node that re-renders every detected region at full resolution
- image
- segs
- basic_pipe
- detailer_hook
- refiner_basic_pipe_opt
- scheduler_func_opt
- image
- segs
- basic_pipe
- cnet_images
A face that takes up 80×80 pixels of a 1024×1024 render gets 80×80 pixels of the model's attention, and it comes out as mush no matter how good your checkpoint is. DetailerForEachPipe - "Detailer (SEGS/pipe)" in the menu - is the fix. It takes a bundle of detected regions, crops each one out, upscales it to a proper working size, runs a fresh sampling pass on it, and pastes it back. Do that on the faces and hands and you turn a good-composition-but-smeared-details image into a finished one.
This is the composable core of the same detect-crop-refine idea behind FaceDetailer, and it's the ComfyUI answer to A1111's ADetailer. It's more powerful and, honestly, more of a pain to set up - that ergonomics gap is a real and recurring community complaint. The upside is control: you decide exactly what gets detected, how hard it gets re-rendered, and with what prompt.
How it works
You feed it the original image and a segs (the detected regions, from a detector node like Simple Detector or a MASK-to-SEGS conversion). For each region it checks the size against guide_size, upscales the crop toward that target, does a masked inpaint pass at the settings you give it, then composites the result back onto the source. The "pipe" in the name means the model, CLIP, VAE and both conditionings arrive bundled in a single basic_pipe wire instead of five separate inputs - tidier once your graph gets busy.
The inputs and outputs that matter
segs(SEGS) - the regions to detail. No detections, nothing happens.basic_pipe(BASIC_PIPE) - your model, CLIP, VAE, positive and negative conditioning, bundled byToBasicPipe.guide_size(default 512) - the size each cropped region gets worked at. This is the lever that makes small faces sharp; 512–768 is the usual range.denoise(default 0.5) - how much the region gets rewritten. This is the one people set wrong. High denoise re-invents the face and drifts the style; drop it to 0.3–0.4 for a detail pass that improves the region without turning it into a different person.wildcard- an optional prompt applied to the detailed regions, so you can say "detailed face, sharp eyes" without touching your main prompt.cycle(default 1) - run the pass more than once per region for progressively stronger refinement.
Outputs: image (your detailed result - the one you save), segs passed through, basic_pipe passed through for chaining a second detailer, and cnet_images (a list, only populated if you fed in ControlNet via a detailer hook).
How to install it
ComfyUI Manager: search ComfyUI Impact Pack, Install, restart.
Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack
cd ComfyUI-Impact-Pack
pip install -r requirements.txt
Run that in ComfyUI's Python environment, then restart. To actually get SEGS to feed this node you'll usually want a detector, and the YOLO detectors (UltralyticsDetectorProvider) now live in the separately-installed Impact Subpack - grab ComfyUI-Impact-Subpack from the Manager too if you want face/hand detection.
Common issues & troubleshooting
Grey box or color-mismatched patch around the fixed region. Same failure ADetailer users know: the crop round-trips through the VAE and shifts slightly. Raise feather and noise_mask_feather to blend the seam, and confirm you loaded the right VAE.
The detailed face looks like a different person / the style drifted. Your denoise is too high. Bring it to 0.3–0.4. A detail pass should sharpen, not regenerate.
Do this before upscaling, never after. Fix faces and hands at native resolution first - upscaling bakes defects in and then costs more to repair. That's the standard multi-stage order, and it's not optional.
Nothing changed. Almost always an empty segs - your detector found nothing. Lower the detector's threshold or check it's pointed at the right image.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| segs | SEGS | — | |
| guide_size | FLOAT | 51264–16384 | — |
| guide_size_for | BOOLEAN | true | — |
| max_size | FLOAT | 102464–16384 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 17 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +11 | |
| denoise | FLOAT | 0.500.0001–1 | — |
| feather | INT | 50–100 | — |
| noise_mask | BOOLEAN | true | — |
| force_inpaint | BOOLEAN | true | — |
| basic_pipe | BASIC_PIPE | If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped. | |
| wildcard | STRING | — | |
| refiner_ratio | FLOAT | 0.200–1 | — |
| cycle | INT | 11–10 | — |
| detailer_hookopt | DETAILER_HOOK | — | |
| refiner_basic_pipe_optopt | BASIC_PIPE | — | |
| inpaint_modelopt | BOOLEAN | false | — |
| noise_mask_featheropt | INT | 200–100 | — |
| scheduler_func_optopt | SCHEDULER_FUNC | — | |
| tiled_encodeopt | BOOLEAN | false | — |
| tiled_decodeopt | BOOLEAN | false | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| segs | SEGS | — |
| basic_pipe | BASIC_PIPE | — |
| cnet_images | IMAGE | — |