ReShot Canny Video
The same edges, wrapped in Seedance and H3's size rules
- video
- canny_video
- canny_frames
- fps
ReShot Canny Map gives you edge frames. ReShot Canny Video gives you an edge video - and quietly does the part of the job people get wrong: it makes the clip meet the frame-rate and frame-size rules of whichever video model is going to swallow it.
Reach for it when your graph starts at Load Video and ends at something that wants a reference video rather than a batch of conditions: Seedance 2.5's Reference to Video (a ComfyUI API node - prepaid credits, and your clip goes to a server), MiniMax H3's ref_videos, or a Save Video node whose file you upload to a web UI. Same caveat as the map node applies to the content: canny carries clothes and faces, so it's right for architecture and machinery and wrong when you're trying to sneak a different wardrobe past the model.
What the preset actually does
target is the whole point of this node. Each preset sets an fps and a dimension multiple, straight from the models' published rules:
seedance- 24 fps, width and height multiples of 16.h3- 24 fps, multiples of 32 (MiniMax H3 runs at 24 fps for 4–15 second clips, so this lines up with what the model itself does).wan- 16 fps, multiples of 16, matching Wan 2.1 VACE's samples.none- keep the source fps, just make the dimensions even.
Frames are picked by timestamp, not by dropping every Nth frame, so a 30 fps source really does become 24 rather than staying at 30 with missing frames. Two rules in the source are worth internalising:
fps is never raised. If your reference clip is 12 fps, target: seedance leaves it at 12. You get the frame-size crop and nothing else. Check your source before you blame the node.
Sizes are cropped, never padded. The frame is center-cropped to the multiple, because a black border reads to the generator as a far wall. That means your output is slightly smaller than your input, and every assumption downstream about the original resolution is now wrong.
Audio is dropped - the output VIDEO is silent on purpose. Run past the preset's limit and you'll see a console line like clip is 18.0s; seedance accepts <= 15s: the node still runs, the API rejects it later. Trim upstream.
Inputs and outputs
video- from Load Video, or anything else that emits the VIDEO type.target- the preset above. Note the default ish3here, while the depth video node defaults toseedance. If you're hopping between them, check the widget.low/high- Canny hysteresis, 100 and 200. Lowerlowfor more lines, higherhighfor only the strong ones.max_side- caps the longer side,0= source size. The README's advice is aimed at H3 reference videos (use 320); it applies to canny the same way.- Outputs:
canny_video(VIDEO, wire to a reference-video input or Save Video),canny_frames(the same frames as an IMAGE batch, for a ControlNetcontrol_videoinput or a preview), andfps(FLOAT, the output frame rate after the preset - feed it to Create Video if you're rebuilding the clip yourself).
Install
ComfyUI Manager → ComfyUI-ReShot → Install, then restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/maosika-ai/ComfyUI-ReShot
python -m pip install -r ComfyUI-ReShot/requirements.txt
There is no model to download for canny. The pack's 111 MB depth weights only arrive the first time a depth node runs, and the pose nodes add ~340 MB after that.
Common issues
ReShot Canny Videoisn't in the menu butReShot Canny Mapis - your ComfyUI build predates the native VIDEO type (roughly April 2025). Update ComfyUI, or use the map node with Get Video Components.- Nothing imports at all - the
reshotpackage isn't installed into the Python ComfyUI runs on. That's the single most common install failure for this pack; on Windows portable it's almost always someone pip-installing into their system Python. - The output is silent - expected. ComfyUI's video components carry audio and this node deliberately passes
Nonethrough. - The result is a couple of dozen pixels smaller than the source - the preset's center crop. Set
target: noneif you'd rather keep the frame exactly and do your own math. - The lines flicker - canny here is per-frame with no temporal smoothing. On grainy footage, denoise or trim before the reference clip goes in.
For the ControlNet path (control_video as an IMAGE batch), the map node is the simpler choice - fewer widgets, and the crop is something you control per connection rather than per preset. This node is for when the file is what leaves your machine.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | From Load Video (or any node that outputs VIDEO). | |
| target | COMBO | h3 | Preset: seedance = 24 fps, x16; h3 = 24 fps, x32; wan = 16 fps, x16; none = keep fps, even dims. |
| lowopt | INT | 1000–1000 | Canny low threshold: lower = more lines. |
| highopt | INT | 2000–1000 | Canny high threshold: higher = only strong edges. |
| max_sideopt | INT | 00–4096 | Cap the output's longer side (0 = source size). e.g. 320 for MiniMax H3 reference videos. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| canny_video | VIDEO | — |
| canny_frames | IMAGE | — |
| fps | FLOAT | — |