Image Detailer (Umbra UI)
The detailer that fixes person, face, eyes, and hands in order — one node
- image
- model
- clip
- vae
- positive
- negative
- sampling_provider
- image
- detail_report
Automatic detailing is the detect → crop → re-render → paste-back loop that saves small faces and ruined hands, and Image Detailer (Umbra UI) is that loop turned into a single node with a stable contract: person → face → eyes → hands, each stage running its own detector, SAM refinement, and low-denoise sampling pass, in that order. If you've fought with wiring up Impact Pack's FaceDetailer plus a separate hand detailer plus a person pass, this is the pack trying to hand you the whole assembly in one box.
How it works
The detailer runs an ordered pipeline of stages, each independently configured:
- The default contract. Four stages, on by default:
person(YOLO segmentation, guide 1024, denoise 0.18),face(bbox, guide 512),eyes(bbox, guide 384, denoise 0.16), andhands(bbox, guide 512, denoise 0.28 - hands need the most work and get the most). Each stage runs detection, refines the mask with SAM (sam_vit_b_01ec64.pth), crops the region up to a guide size, samples at its own steps/CFG (default 4.0,er_sdesampler), and composites back with a feathered seam. The person stage passes a[CONCAT]wildcard ("coherent anatomy, natural body proportions…") so the whole body is nudged toward coherence while faces/eyes/hands get their own targeted fix. - Order matters. The loop is ordered precisely because detailers run bottom-up: fixing the body first means the face crop later sees a coherent image, and eyes come after the face stage has already cleaned the region. Each stage's seed is the base seed plus a per-stage offset, keeping it deterministic.
- The four booleans -
person_detail,face_detail,eye_detail,hand_detail- enable/disable stages without touching JSON. pipeline_json- the power move. Leave it empty for the defaults, or pass a JSON array of fully-configured stages (detectorModel,guideSize,denoise,samModel,samThreshold,bboxCropFactor,wildcard,cycle,tiledEncode/tiledDecode, and more) for a completely custom sequence. The schema accepts any number of stages in any order, so you can add a left-hand-only pass, a fur-detector pass, whatever.sampling_provider- the optionalUMBRA_DETAILER_SAMPLING_PROVIDERinput from the four Umbra provider nodes. Wire one and the detailer swaps Impact Pack's classic sampling for architecture-native custom sampling (Flux.2, HiDream O1, Ideogram 4, OmniGen2). Leave it empty and it uses Impact Pack'sFaceDetailerpath.
Required inputs: image, model, clip, vae, positive, negative, seed. Outputs: the refined image and a JSON detail_report listing which stages ran and which detector/SAM models were used.
Dependencies - read this before installing
This is the one node in the pack with real requirements. It builds on Impact Pack's FaceDetailer, UltralyticsDetectorProvider, and SAMLoader, so you need ComfyUI Impact Pack and Impact Subpack installed. And it needs these models in the standard folders:
models/sams/sam_vit_b_01ec64.pth
models/ultralytics/segm/person_yolov8m-seg.pt
models/ultralytics/bbox/face_yolov8m.pt
models/ultralytics/bbox/Eyes.pt
models/ultralytics/bbox/hand_yolov8s.pt
Install via ComfyUI Manager (search "Umbra Nodes") or clone, then restart:
cd ComfyUI/custom_nodes
git clone https://github.com/Nocturne-Ai-Labs/Umbra-Nodes
Gotchas
The most common failures are all missing-file failures: a detector .pt that isn't in models/ultralytics/, a SAM .pth that isn't in models/sams/, or Impact Pack not installed - the node raises a clear "Install or update ComfyUI Impact Pack" error when a class is missing. The Ultralytics AGPL + supply-chain history from the KB applies here too: you're running YOLO weights through Ultralytics, so know the licensing story if you ship anything commercial. And remember the golden rule the KB stresses: detail first, upscale after - running this on an already-upscaled image bakes the mangled face into more pixels and costs more to repair.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| seed | INT | 00–18446744073709550000 | — |
| pipeline_jsonopt | STRING | — | |
| person_detailopt | BOOLEAN | true | — |
| face_detailopt | BOOLEAN | true | — |
| eye_detailopt | BOOLEAN | true | — |
| hand_detailopt | BOOLEAN | true | — |
| sampling_provideropt | UMBRA_DETAILER_SAMPLING_PROVIDER | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| detail_report | STRING | — |