ReShot Canny Map
The one node in this pack that needs no download and no GPU
- images
- canny
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 tononeif you don't need it.low/high- the thresholds, 100 and 200 by default. Lowerlowfor more lines, raisehighto keep only the strong ones.- Output:
canny, an IMAGE batch with the same frame count as the input, and the same size unlessfit_tocropped 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 FAILEDfor ComfyUI-ReShot -reshotisn't in ComfyUI's Python. Run the pip line with the interpreter ComfyUI actually uses, and check withpython -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 -
highis too high, or the shot is flat and low-contrast. Droplowto 50–80 and pullhighdown with it. - Everything is a line - texture is doing the work: fabric weave, foliage, brick. Raise
lowandhightogether until only the shapes you care about survive. - Downstream node complains about dimensions - that'll be
fit_to. Set it tononeand 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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Video frames as an IMAGE batch [T, H, W, 3]. | |
| fit_to | COMBO | none | Center-crop to the model's frame-size multiple. |
| lowopt | INT | 1000–1000 | Canny low threshold: lower = more lines. |
| highopt | INT | 2000–1000 | Canny high threshold: higher = only strong edges. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| canny | IMAGE | — |