Ultralytics Detector ☃️
The YOLO detector that turns detections into a detailer's SEGS
- image
- segs
- combined_mask
- bbox_mask
Every automatic detailer starts with a detector: a model that looks at your image and says "there's a face here, a hand there." IkkiUltralyticsDetector is that first step for the Ikki detailer pipeline - it runs a YOLO model from Ultralytics over your image and emits SEGS, the same segment container Impact Pack made standard, so the rest of the pipeline can crop and re-render each detection.
The KB's detailing essay has the best one-line summary of the whole genre: "all detailers are doing is zooming in on a mask, upscaling the image, and then diffusing the upscaled image to add details. You can get that mask in SO many ways." This node is one of those ways - specifically the YOLO path, which is what most people use for faces and hands because purpose-trained face_yolov8-style weights are fast, mature, and do exactly that job.
What it needs that other nodes don't
Two things, and both are common failure points:
- The
ultralyticsPython package. It's imported optionally, and the node raises a clearRuntimeError("Run 'pip install ultralytics'") if it's missing. The pack'spyproject.tomldeclares zero dependencies, so nothing installs it for you:pip install ultralytics - A model file. The node auto-creates
ComfyUI/models/ultralytics- drop a.ptYOLO weight in there and it appears in the model_name dropdown. Until you do, the dropdown literally reads NO_MODELS_FOUND. Grab the usual suspects:face_yolov8n.pt,face_yolov8s.pt,hand_yolov8n.pt, orperson_yolov8n-seg.pt- a segmentation model gives polygon masks, which produce far less visible seams than bbox rectangles.
Inputs that matter
- image - the full image to scan.
- threshold (0.5) - confidence cutoff. Lower to 0.3 if faces keep getting missed; raise if you're drowning in false positives.
- dilation (10) - expand each detected mask. Positive grows it, negative shrinks.
- crop_factor (1.5) - how much context around each detection gets carried into the crop.
- drop_size (16) - detections smaller than this (in pixels, per side) are discarded. Raises it to skip tiny junk.
- labels ("all") - filter to specific classes:
face,hand, comma-separated. - device (auto/cuda/cpu) - let it pick, unless you're on CPU-only.
Outputs: segs (feed to IkkiDetailerProcessor), plus combined_mask and bbox_mask - full-image masks of all detections, handy for previewing exactly what got found before you spend sampling time on it.
Install
Via ComfyUI Manager (search "ikki") or:
cd ComfyUI/custom_nodes
git clone https://github.com/RedsAnalysis/comfyui-ikki-pack
# restart ComfyUI
pip install ultralytics
The part you should actually care about
The Ultralytics path is AGPL-3.0 - it reaches the weights and runtime, not just the code - and it has a genuinely ugly history: a compromised Ultralytics release in December 2024 shipped a cryptominer that reached ComfyUI users through Impact Pack, which the KB's detailing essay and the Impact Pack panel both document. That doesn't make this node malware - it makes it a supply-chain surface. Practical mitigations: install ultralytics and pin it, don't auto-update it blindly, and be careful about which .pt model files you download and from whom, because arbitrary weights are another way in. For face-finding specifically, MediaPipe (Apache-2.0) is the license-clean alternative if you care.
Also worth knowing: this pack is brand new (v2.1.0, minimal docs - the README doesn't even mention the detailer pipeline). The node itself is well-behaved and Impact-compatible in structure, but you're adopting a young pipeline, so smoke-test it before trusting it on a big batch.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model_name | COMBO | 1 options: NO_MODELS_FOUND | |
| threshold | FLOAT | 0.500–1 | — |
| dilation | INT | 10-512–512 | — |
| crop_factor | FLOAT | 1.51–10 | — |
| drop_size | INT | 161–4096 | — |
| labels | STRING | all | — |
| device | COMBO | auto | 3 options: auto, cuda, cpu |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| segs | SEGS | — |
| combined_mask | MASK | — |
| bbox_mask | MASK | — |