Nodes/ComfyUI-ReShot/ReShot Canny Map
ComfyUI Node

ReShot Canny Map

The one node in this pack that needs no download and no GPU

By maosika-ai·Created 12 days ago·Updated 11 days ago· 9
ReShot Canny Map
  • images
  • canny
fit_tonone
low100
high200

The rest of this pack is heavy: a depth model, a pose model, a Hugging Face download, a VRAM bill. ReShot Canny Map is the exception. It takes your video frames and hands back white edge lines on black using OpenCV, on the CPU, in about as long as it takes to move the pixels around. No weights, no first-run download, nothing to configure in a hurry.

So why isn't it the default? Because of what canny keeps. Canny is the oldest ControlNet conditioning type and still the cleanest for hard contours - the KB's own read is "best for architectural images, mechanical objects, and scenes with clear contours." But the outline of a person is also a contour. The author says it plainly in the node's own description: canny "carries the outline of clothes and faces - depth or pose if you want those gone." If you're copying a fight's choreography without copying the costumes, canny works against you. It earns its place on interiors, machinery, hands on objects and architecture, and on any clip where the depth model's guesses about the floor plane do more harm than good.

How it works

Each frame goes through OpenCV's Canny: a 3×3 Gaussian blur to kill sensor noise, then hysteresis thresholding with your low and high. Anything above high is an edge, anything below low is thrown away, and anything in between survives only if it touches a surviving edge. The result is one grey channel, replicated across all three so any node that takes an IMAGE will accept it.

One quirk from the source: high is clamped to at least low.

There's no temporal component: unlike the depth and pose nodes, canny is frame-by-frame with zero smoothing, so on grainy footage the lines shimmer between frames - and your video model reads shimmer as motion.

Inputs and output

  • images - video frames as one IMAGE batch [T, H, W, 3]. Get Video Components, VHS Load Video, or a batch of Load Image all work.
  • fit_to - none / h3 / seedance / wan. Center-crops to that model's frame-size multiple (×32 for H3, ×16 for Seedance and Wan). It sits in the required row of the widget list, which looks alarming; set it to none if you don't need it.
  • low / high - the thresholds, 100 and 200 by default. Lower low for more lines, raise high to keep only the strong ones.
  • Output: canny, an IMAGE batch with the same frame count as the input, and the same size unless fit_to cropped it.

fit_to catches people out because the crop is on both axes and centered: 1920×1080 at fit_to: h3 comes back 1920×1056, and any downstream mask or paste node still assuming 1080 will be misaligned.

Wiring it up

The intended consumer is a ControlNet that takes a control video as an IMAGE batch:

Load Video ─▶ Get Video Components ─▶ ReShot Canny Map (fit_to: h3) ─canny─▶ Apply MiniMax H3 Fun ControlNet
                                                                              control_video   (condition: canny)

Keep the ControlNet's strength near 1.0 if you want the blocking followed closely; lower it to let the model drift. Same output also feeds any SD or SDXL canny ControlNet, and the FLUX.2 / union-style setups that take a canny pass.

Install

It's part of the pack, so it arrives with it. ComfyUI Manager → search ComfyUI-ReShot, or:

cd ComfyUI/custom_nodes
git clone https://github.com/maosika-ai/ComfyUI-ReShot
python -m pip install -r ComfyUI-ReShot/requirements.txt   # same python ComfyUI runs on

Restart ComfyUI, then right-click the canvas → Add Node → ReShot. Windows portable users: use python_embeded\python.exe for that pip line, or the pack won't import. The first time a depth node runs it downloads 111 MB of model weights; the canny node downloads nothing. If you're debugging an install, this is the node that tells you the pack loaded at all.

Common issues

  • Nodes missing, console says IMPORT FAILED for ComfyUI-ReShot - reshot isn't in ComfyUI's Python. Run the pip line with the interpreter ComfyUI actually uses, and check with python -c "import reshot; print(reshot.__version__)".
  • Output looks like a half-tuned TV - there's no noise reduction beyond that Gaussian blur. Suspect the source, not the node.
  • Almost no lines - high is too high, or the shot is flat and low-contrast. Drop low to 50–80 and pull high down with it.
  • Everything is a line - texture is doing the work: fabric weave, foliage, brick. Raise low and high together until only the shapes you care about survive.
  • Downstream node complains about dimensions - that'll be fit_to. Set it to none and let the ControlNet handle sizing.

If you only want the moves out of a clip and not the wardrobe, you want ReShot Depth Map or ReShot Pose Map instead.

CategoryReShot

Inputs (4)

NameTypeDefaultDescription
imagesIMAGEVideo frames as an IMAGE batch [T, H, W, 3].
fit_toCOMBOnoneCenter-crop to the model's frame-size multiple.
lowoptINT1000–1000Canny low threshold: lower = more lines.
highoptINT2000–1000Canny high threshold: higher = only strong edges.

Outputs (1)

NameTypeDescription
cannyIMAGE