Nodes/ComfyUI-GGUF-Loader/Qwen-Image Canny ⚡
ComfyUI Node

Qwen-Image Canny ⚡

The no-download preprocessor for Qwen-Image's canny ControlNet

By ChrisColeTech·Created about a month ago·Updated 3 days ago· 10
Qwen-Image Canny ⚡
  • image
  • IMAGE
low_threshold100
high_threshold200

ControlNet works on structure: your prompt decides what appears, and a control map decides where it goes. For Qwen-Image's canny ControlNet, that map is an edge image - and you don't need a downloaded model to make one. This node is plain cv2.Canny edge detection wrapped for ComfyUI: image in, edge map out, no weights, no download, no first-run delay. It's the kind of node that feels too simple to have its own page, until you realize it's the difference between "control the composition" and "hope the prompt does it."

Where it fits

Qwen-Image has several ControlNet families - InstantX/Union, Fun, and the DiffSynth canny/depth/inpaint patches - and the canny ones all want an edge map on control_image. You have three ways to get one:

  1. Let Qwen-Image img2img derive it automatically via control_mode="auto_canny".
  2. Use this standalone node and wire its output into control_image yourself.
  3. Anything else that can produce an edge map.

Option two is what this node is for. The advantage over the invisible auto mode is that you can actually look at the edge map before it goes into the pipeline. A canny threshold that's too tight or too loose is usually visible at a glance - hair turned to noise, or soft edges missing entirely - and catching it in a preview beats discovering it in the output image.

The three inputs

  • image - any IMAGE. It'll work on photos, renders, whatever you're conditioning on.
  • low_threshold - default 100 (0–255). Pixels weaker than this become non-edges.
  • high_threshold - default 200 (0–255). Pixels stronger than this are definitely edges.

The gap between the two is the "maybe" zone, where pixels count as edges only if they're connected to a strong one. Lower both for more edges, raise them for cleaner linework. The 100/200 defaults are the classic Canny pairing and a fine starting point for most photos; for line-art or stylized input you'll often want them closer together.

One output

IMAGE - the edge map, ready for control_image on Qwen-Image img2img (or Z-Image img2img, since canny maps are canny maps).

Installing it

Part of the ComfyUI-GGUF-Loader pack under 🤖 CCTech/Qwen-Image. ComfyUI Manager → search "ComfyUI-GGUF-Loader" → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
cd ComfyUI-GGUF-Loader
pip install -r requirements.txt

Common issues

The usual beginner move is cranking both thresholds way down to "capture everything," which produces a solid noise wall that over-conditions the model and flattens your output. Start from 100/200 and adjust in one direction at a time. Also worth knowing: canny captures edges only - it says nothing about depth or content. If you're trying to hold a specific 3D structure, that's the job of a depth ControlNet, and this pack's Qwen-Image path covers that with control_mode="auto_depth" instead (which does download the Depth Anything V2 model on first use). For plain composition control, canny is where you start.

Category🤖 CCTech/Preprocessors

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
low_thresholdINT1000–255
high_thresholdINT2000–255

Outputs (1)

NameTypeDescription
IMAGEIMAGE