Canny Preprocessor Provider (SEGS)
Canny ControlNet inside an Impact Pack detail pass
- SEGS_PREPROCESSOR
If you've ever wired a Canny ControlNet by hand, this node is going to look weirdly empty, and that's the point. It doesn't process an image. It doesn't output an edge map you can preview. What it hands over is a little packet of instructions - a SEGS_PREPROCESSOR - that says "when the time comes, run Canny with these thresholds." Something else does the actual work later.
That something else is the Impact Pack. This node only makes sense as a piece of the detect-crop-refine loop that ltdrdata's Impact Pack is built around: you detect regions in an image (faces, hands, whatever a detector finds), crop each one, and run a fresh sampling pass on it at proper resolution before pasting it back. That's how a face that's 80x80 pixels in a 1024px frame stops coming out mangled. Now suppose you want that refinement pass to be structure-aware - you want the redrawn face to keep the edges of the original instead of drifting. That's a ControlNet job, and Apply ControlNet (SEGS) in Impact Pack is where it plugs in. But that node needs to know which preprocessor to run on each cropped region. This provider is that answer, for Canny.
How it actually works
Normal ControlNet in ComfyUI is eager: you preprocess the whole image up front, then condition on it. SEGS flips the order. Impact Pack doesn't know the crops exist until detection runs, so it can't preprocess ahead of time. The provider pattern solves that by passing a recipe instead of a result - the preprocessing gets deferred and applied per-region, once the crops actually exist. Same idea as any of the other SEGS preprocessor providers in the pack (depth, lineart, tile, inpaint); this one wraps Canny edge detection.
Under the hood the actual Canny implementation comes from Fannovel16's ControlNet Auxiliary Preprocessors - Inspire is just the wrapper that makes it usable in the SEGS flow. So you need that pack installed too, not just Inspire.
The inputs and outputs that matter
There are exactly two knobs, and they're the standard Canny pair:
low_threshold(default 0.4) andhigh_threshold(default 0.8) - the hysteresis thresholds for edge detection. Anything abovehighis definitely an edge; anything belowlowis definitely not; the in-between pixels only survive if they connect to a strong edge. Raiselowto kill noise and faint texture. Lowerhighto catch more, softer edges. The defaults are sane for most photos; nudge them if you're getting either a sparse skeleton or a scribbly mess.
The single output is SEGS_PREPROCESSOR, which wires into the preprocessor input of Impact Pack's Apply ControlNet (SEGS) node. That's its whole job.
How to install it
Search ComfyUI Inspire Pack in ComfyUI Manager, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Inspire-Pack
then restart ComfyUI. It's from Dr.Lt.Data - the same person behind ComfyUI-Manager and the Impact Pack - so it's about as trustworthy as a custom node pack gets.
Common issues & troubleshooting
The node does nothing on its own. Correct. It has no output image and no visible effect until it's feeding an Apply ControlNet (SEGS) node inside an Impact Pack detailing graph. If you dropped it on the canvas expecting a preview, that's the confusion.
"Node not found" / red node on load. You're missing a dependency. This provider needs comfyui_controlnet_aux for the Canny implementation, and it's pointless without the Impact Pack to consume the output. Install all three (Inspire, controlnet_aux, Impact Pack) via Manager and restart.
You also need a Canny ControlNet model. The provider tells the pipeline how to preprocess; you still supply the actual Canny ControlNet checkpoint to Apply ControlNet (SEGS). Match it to your base model - an SD1.5 Canny won't load on SDXL, and neither loads on Flux.
Edges too aggressive on the crop. Because this runs on small cropped regions, the same thresholds behave differently than on a full frame. If detail comes out over-constrained, raise low_threshold a touch so faint texture stops registering as structure.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| low_threshold | FLOAT | 0.400.01–0.99 | — |
| high_threshold | FLOAT | 0.800.01–0.99 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SEGS_PREPROCESSOR | SEGS_PREPROCESSOR | — |