ComfyUI Node

EmAySee Segs Union

Merge every SEGS stream in your graph into one — without re-running the detector

By EmAySee·Created about a year ago·Updated 4 months ago· 2
EmAySee Segs Union
  • 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_segs is the escape hatch. If every segs_N input is empty, the node returns fallback_segs untouched - 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_1segs_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.

CategoryEmAySee/Segs

Inputs (11)

NameTypeDefaultDescription
fallback_segsoptSEGS
segs_1optSEGS
segs_2optSEGS
segs_3optSEGS
segs_4optSEGS
segs_5optSEGS
segs_6optSEGS
segs_7optSEGS
segs_8optSEGS
segs_9optSEGS
segs_10optSEGS

Outputs (1)

NameTypeDescription
segsSEGS