EmAySee Segs Union
Merge every SEGS stream in your graph into one — without re-running the detector
- fallback_segs
- segs_1
- segs_2
- segs_3
- segs_4
- segs_5
- segs_6
- segs_7
- segs_8
- segs_9
- segs_10
- segs
SEGS is the segmented-region format Impact Pack uses - a bundle of detected crops, masks, and labels that Detailer (SEGS) and FaceDetailer chew through to fix faces, hands, or whatever else you pointed a detector at. Normally you get one SEGS stream per detector. EmAySee Segs Union does what the name promises: it merges up to ten SEGS streams into a single stream so one downstream detailer pass can work on everything at once.
Why would you want that? The classic case is a multi-detector detail loop: an Ultralytics face detector, an eye detector, a hand detector, each producing its own SEGS. Without a union you either run three separate detailer passes (slow, re-detects per pass) or you write a custom node. This node gives you the merge step - wire all three detector outputs in, and one Detailer (SEGS) pass refines every region in a single sampler call. It's the same job Impact Pack's own SEGS-merge utilities do, minus the edge cases, which is why the author built it: their copy combines results from several of their own detection nodes (EmAySee_MultiBBoxDetector and EmAySee_BBoxToSegs ship in the same file) into one stream for a downstream detailer.
How it works
The node takes each non-empty segs_N input, concatenates the list of segment items inside it, and emits a single (shape, items) SEGS tuple. A couple of details from the source are worth knowing:
- It filters out strings. If any node upstream leaks a raw label string into the item list (a real failure mode with some Impact Pack SEGS producers), it drops those entries instead of crashing the downstream detailer.
- The shape of the first non-empty stream wins. All streams are assumed to be from the same image, so it uses the first one's
(height, width)as the combined shape. fallback_segsis the escape hatch. If everysegs_Ninput is empty, the node returnsfallback_segsuntouched - handy when you want to default to a single existing detector's output. If even the fallback is missing, you get an empty SEGS rather than a crash.
The inputs that matter
Ten optional SEGS inputs (segs_1 through segs_10) and one fallback_segs. That's the whole surface. You can leave any of them disconnected; empty inputs are just skipped.
segs_1…segs_10- the SEGS streams you want merged.fallback_segs- returned as-is if nothing else has content.
The single output is segs, which wires straight into a Detailer (SEGS), FaceDetailer, or any SEGS-consuming node. Honestly, for most single-detector workflows you don't need this node at all - it earns its keep the moment you're running two or more detectors on the same image.
Installing it
This is one of ~60 nodes in EmAySee's grab-bag pack. The easiest route is ComfyUI Manager - search for ComfyUI_EmAySee_CustomNodes and install, then restart. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/EmAySee/ComfyUI_EmAySee_CustomNodes
Restart ComfyUI and you'll see the pack's "SPECTRE" startup banner. There's no requirements.txt and no model downloads - the pack auto-loads every .py in its py/ folder, and this node only needs torch plus whatever SEGS producer you're already running.
Where people trip up
You need Impact Pack installed for SEGS to exist at all. SEGS isn't a core ComfyUI type - the type and the detailer nodes that consume it come from ComfyUI-Impact-Pack. If the segs socket is red, install Impact Pack first. Also: this node only merges lists of items; it doesn't reconcile different image sizes. Feed it SEGS from different images and the downstream detailer will be confused at best. If you hit a blank output, check your detectors are actually firing - the node silently ignores empty inputs and hands you an empty SEGS instead of an error.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| fallback_segsopt | SEGS | — | |
| segs_1opt | SEGS | — | |
| segs_2opt | SEGS | — | |
| segs_3opt | SEGS | — | |
| segs_4opt | SEGS | — | |
| segs_5opt | SEGS | — | |
| segs_6opt | SEGS | — | |
| segs_7opt | SEGS | — | |
| segs_8opt | SEGS | — | |
| segs_9opt | SEGS | — | |
| segs_10opt | SEGS | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| segs | SEGS | — |