EmAySee Multi BBox Detector
Ten detectors, one SEGS — running every bbox model at once in ComfyUI
- image
- bbox_detector_1
- bbox_detector_2
- bbox_detector_3
- bbox_detector_4
- bbox_detector_5
- bbox_detector_6
- bbox_detector_7
- bbox_detector_8
- bbox_detector_9
- bbox_detector_10
- segs
Impact Pack's FaceDetailer is the ComfyUI way to stop small faces from getting mangled, and the whole machine is driven by detection. But a single detector only knows one thing. EmAySee Multi BBox Detector is the "all of them at once" version: it runs up to ten Impact Pack bbox detectors over one image and fuses every box they find into a single SEGS stream, ready for a detailer.
That's genuinely useful for multi-region workflows. Wire a face detector into one slot, a hand detector into another, and a person detector into a third, and one SEGS output carries faces, hands, and bodies for a Detailer (SEGS) pass - without chaining detector nodes and merging their outputs yourself. If you've ever hand-built that with Impact Pack's own merge nodes, you'll recognize what this is saving you.
How it works
The node is a thin loop over the bbox_detector_1 through bbox_detector_10 inputs. For each connected detector it calls the detector's detect(image, threshold, dilation, crop_factor, drop_size, labels) method - the same call Impact Pack's own detectors expect - then collects every detected item into one list and returns it as a (shape, items) SEGS tuple. Any slot left empty is skipped; a detector that throws is logged to the console and ignored, so one flaky model won't kill the whole pass.
The important consequence: threshold, dilation, crop_factor, drop_size, and labels are passed to every detector identically. You can't tune a face detector's threshold and a hand detector's separately inside this node. If one detector wants a lower threshold than another, this is the wrong tool - or you accept one global setting.
The inputs that matter
- image - the frame to scan.
- labels - which class labels to look for. The default
allmeans "keep everything the detector finds." Set it to specific labels (sayfaceorhand) to keep only those classes. - threshold (0.3) - detection confidence cutoff. Lower catches more boxes and more false positives.
- dilation (10) - how much to grow each box. Detailers usually want a padded region, not a skin-tight crop. Negative values shrink.
- crop_factor (3.0) - extra margin around each detection relative to the box size.
- drop_size (10) - boxes smaller than this many pixels get discarded, a handy filter for noise.
Output is a single segs, which you feed straight into Detailer (SEGS), FaceDetailer, or any SEGS consumer. Note the source expects the BBOX_DETECTOR type, which only Impact Pack provides - you'll want Impact Pack installed before this node is useful, plus an actual detector node feeding each input.
Install
It ships in the EmAySee pack - one author's grab-bag of 60+ nodes, several of which are honestly "fun, useful, and useless TBH" per the pyproject. Install the pack once and it appears under EmAySee/Segs:
cd ComfyUI/custom_nodes
git clone https://github.com/EmAySee/ComfyUI_EmAySee_CustomNodes
Then restart ComfyUI (or use ComfyUI Manager and search "ComfyUI_EmAySee_CustomNodes"). No requirements.txt, no model downloads - the detection models live in whatever Impact Pack detectors you attach. On startup the pack prints a big ASCII "SPECTRE v5.0" banner; that's just cosmetics.
Gotchas
Where people get burned: expecting per-detector settings (see above), and expecting this to run detection on its own. It doesn't - it's a merge hub for detector objects that Impact Pack gives you. And it's a no-support pack: the README closes with "code provided without any guarantees or warranties or support," so if results look off, the class is a short read in py/EmAySee_SegsUnion.py and the logic is right there.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| threshold | FLOAT | 0.300–1 | — |
| dilation | INT | 10-512–512 | — |
| crop_factor | FLOAT | 3.01–10 | — |
| drop_size | INT | 101–1024 | — |
| labels | STRING | all | — |
| bbox_detector_1opt | BBOX_DETECTOR | — | |
| bbox_detector_2opt | BBOX_DETECTOR | — | |
| bbox_detector_3opt | BBOX_DETECTOR | — | |
| bbox_detector_4opt | BBOX_DETECTOR | — | |
| bbox_detector_5opt | BBOX_DETECTOR | — | |
| bbox_detector_6opt | BBOX_DETECTOR | — | |
| bbox_detector_7opt | BBOX_DETECTOR | — | |
| bbox_detector_8opt | BBOX_DETECTOR | — | |
| bbox_detector_9opt | BBOX_DETECTOR | — | |
| bbox_detector_10opt | BBOX_DETECTOR | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| segs | SEGS | — |