☁️BizyAir Canny Edge
BizyAir Canny Edge — ComfyUI Node Guide
- image
- IMAGE
Canny is the original ControlNet conditioning type, and if you've done any ControlNet work at all you've almost certainly used it or one of its close relatives - it's the classic edge detector, and it's still the right default for a huge share of structural ControlNet work: architecture, mechanical objects, product shots, anything with genuinely clear contours you want the generation to respect.
How it works, briefly
Canny edge detection isn't a threshold trick like the pack's Binary preprocessor - it's a proper multi-stage algorithm that finds gradient changes (places where brightness shifts sharply) and then applies what's called hysteresis thresholding to decide what counts as a real edge. That's the reason for having two threshold values instead of one: any gradient above the high threshold is automatically kept as a strong edge; anything below the low threshold is discarded outright; and anything in between only survives if it's connected to a strong edge already kept. That connectivity rule is what gives Canny its clean, continuous-looking lines instead of the speckled, broken-up edges you'd get from a single flat cutoff - and it's exactly the kind of intelligence the Binary preprocessor in this pack deliberately doesn't have.
Inputs that matter
- image - required.
- low_threshold - optional, 0 to 255, default 100.
- high_threshold - optional, 0 to 255, default 200.
- resolution - optional, default 512, range 64–1024 in steps of 64.
On the two thresholds: raise high_threshold if you're getting too many spurious edges from texture or noise in the source image (fewer gradients will qualify as "strong" edges outright); lower low_threshold if genuine faint edges are getting dropped because they're not connected closely enough to a strong edge. The gap between the two thresholds is where the algorithm's judgment calls happen - a wider gap generally produces more connected, continuous lines; a narrower gap is stricter about what counts as an edge at all.
Output: a single IMAGE - the black-background, white-line edge map, ready for a Canny-trained ControlNet checkpoint.
How to install it
Ships with the full BizyAir pack.
ComfyUI Manager: search "BizyAir," Install, restart.
git clone:
cd ComfyUI/custom_nodes
git clone https://github.com/siliconflow/BizyAir.git
API key required, same as every node in the pack - this preprocessing pass runs server-side like everything else in BizyAir.
Pairing it with a ControlNet model
Canny is well covered across architectures compared to some of the other preprocessors in this pack - it's one of the few conditioning types that survived the transition from SDXL-era ControlNet unions through to the newer Flux, Qwen-Image, and similar unions, which mostly kept canny, depth, and pose while dropping segmentation, normal maps, and other less common conditions. If you're using this preprocessor's output with BizyAir Shared Load ControlNet Model, you've got Canny options for Kolors and SD3.5 in that loader's list; check that node for the specifics on which architecture you need.
Common issues
Too many or too few edges. This is the day-to-day tuning loop for Canny - if the output is noisy and speckled, raise high_threshold; if you're losing edges you clearly want, lower low_threshold. Adjust one at a time so you can actually tell which one moved the result.
Textured or busy source images produce cluttered edge maps. Canny detects gradient changes indiscriminately - fine fabric texture, small background detail, and JPEG compression artifacts can all register as "edges" alongside the actual structural lines you care about. If the map is too busy, either raise both thresholds together or consider whether a softedge-style preprocessor (more forgiving of texture, if this pack or another offers one) is a better fit for that particular source image.
Control weight too strong washes out prompt adherence. This isn't specific to this node, but it's the most common complaint with Canny generally: at high ControlNet weight, edge structure can dominate the generation so completely that the prompt barely matters. Standard guidance is 0.3–0.7 weight for loose guidance that leaves room for the model's own interpretation, 0.8–1.2 for strict structural adherence when you genuinely need the edges followed precisely.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| low_thresholdopt | INT | 1000–255 | — |
| high_thresholdopt | INT | 2000–255 | — |
| resolutionopt | INT | 51264–1024 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |