Nodes/ComfyUI-ControlNet-Nodes/CCTech Canny Preprocessor ⚡
ComfyUI Node

CCTech Canny Preprocessor ⚡

Canny without the download — the one preprocessor in this pack with no model

By ChrisColeTech·Created 5 days ago·Updated a day ago· 2
CCTech Canny Preprocessor ⚡
  • image
  • IMAGE
low_threshold100
high_threshold200

Here's the thing that makes the CCTech Canny Preprocessor different from the other ten nodes in this pack: it isn't a neural network at all. It's a plain cv2.Canny() call, the same classic edge detector OpenCV has shipped for a decade. No weights, no first-run download, no GPU. Feed it an image and it hands you an edge map in a few milliseconds, deterministically - same input, same output, every single time.

That matters because Canny is still the anchor condition of the whole ControlNet ecosystem. Every union ControlNet in 2026 - SDXL's xinsir, Shakker's Flux, InstantX's Qwen-Image, Alibaba's Z-Image and Flux 2 - supports a canny mode. Architecture shots, mechanical parts, logos, anything with crisp contours: Canny gives you clean thin lines that hold structure tight. It's the "hard edges" end of the spectrum; HED soft edges are the forgiving end (see the CCTech Soft Edge nodes in the same pack).

How it works

The node converts your RGB image to grayscale, runs OpenCV's Canny with two thresholds, and repeats the single-channel edge map back to three channels so it slots into any IMAGE socket. That's the whole mechanism. Canny uses hysteresis: pixels brighter than the high_threshold become strong edges outright, pixels above the low_threshold survive only if they touch a strong edge. That's what makes it so good at finding real boundaries and ignoring texture noise.

Inputs and outputs that matter

  • image - any IMAGE: a photo, a render, a screenshot. Everything else in this pack is a model-based estimator; this one is instant.
  • low_threshold (default 100, 0–255) - the weak-edge cutoff. Crank it up to kill noise, drop it to catch faint lines.
  • high_threshold (default 200, 0–255) - the strong-edge cutoff. Too high and you get only the boldest outlines; too low and the map turns to confetti.

The defaults are the same ones comfyui_controlnet_aux uses, so workflows that came from there behave identically.

The single output is an IMAGE: white lines on black. Wire it into a Canny ControlNet's control_image input (that's the condition it was trained on), or into any modern pipeline that takes a canny map as an input image - a canny checkpoint on a Fun/Qwen-Image line, a canny Control LoRA, or an edit model that understands "keep these edges." If you just want to see what it produced before committing, PreviewImage works too.

Installing it

It ships in ChrisColeTech/ComfyUI-ControlNet-Nodes, which bundles eleven preprocessors in the 🤖 CCTech/Preprocessors menu. Easiest route is ComfyUI Manager - search "ComfyUI-ControlNet-Nodes" and hit Install. Manual install is the usual dance:

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-ControlNet-Nodes

Then restart ComfyUI. The only real dependency is opencv-python, which the pack's requirements.txt installs; on a portable Windows build you'd run the embedded pip against that file. None of the other nodes are required for Canny to work, and nothing downloads when you run it - it's the one node in the pack that works offline.

Common issues

There's genuinely not much to troubleshoot. If the node isn't in your menu after installing, restart ComfyUI and confirm the pack actually cloned into custom_nodes. If your edge map is all specks, your low_threshold is too low for that image's noise; if it's nearly blank, the high_threshold is too high. And one thing that trips people up: a canny map that looks washed-out or grey is normal when you inspect it raw - the ControlNet was trained on these maps, not on pretty renders, so feed it as-is and judge the generated result, not the preview.

Category🤖 CCTech/Preprocessors

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
low_thresholdINT1000–255
high_thresholdINT2000–255

Outputs (1)

NameTypeDescription
IMAGEIMAGE