Scene Cut Detect
Find the cuts without scrubbing the timeline
- images
- cut_data
- shot_count
- score_plot
Scene Cut Detect takes a frame batch and tells you where the shot changes are. Feed it a clip as an IMAGE batch and it gives you JSON describing the shots, a count, and - if you want it - a score plot you can look at. That's the difference between a video pipeline that treats a clip as 400 unrelated frames and one that treats it as a sequence of shots, which is where the interesting work starts.
Practically, the uses are: knowing where to reset a video LoRA or a temporal model so it doesn't blend two shots; running per-shot processing like stabilisation or grading; splitting a clip into pieces for a different denoise per shot; handing an editor an EDL-ish list of cut points. It's a genuinely useful primitive that ComfyUI mostly lacks, and it also pairs with Scene Cut Split to actually pull the shots out.
The knobs, and why the default is the honest one
cut_confidence (default 0.5, range 0.01–0.99) is how different two frames must be to count as a cut. The description is careful about it: it's a 0–1 scale that means the same thing for every method, 0.5 is a textbook hard cut, lower is more sensitive. And then the important sentence - it's fixed, not relative to the clip, so cut-free footage reports no cuts instead of the "everything is a cut" garbage you get from an adaptive threshold on a static scene. That's a design decision worth appreciating.
Lower the value and you'll start detecting dissolves, camera whips and big exposure changes as cuts - which may be exactly what you want, or may be noise. Higher and you'll miss soft transitions. min_shot_frames (default 12) is the minimum frames between cuts, and it's the practical dampener: any real edit has a minimum shot length, so setting this to something like half a second's worth of frames at your fps kills most of the false positives from a shaky camera.
method is histogram, edge or combined, and the tooltips tell you the trade honestly. histogram is a colour-distribution difference - fast, and it catches the majority of hard cuts, but it's blind to a cut between two shots that happen to share a palette. edge compares Sobel edge maps, so it catches content changes that a histogram misses. combined is a weighted blend of both and it's marked (recommended) in the schema, which is the author telling you where to start. There's no reason to fight that unless you're chasing a specific miss.
Outputs
Three, and two of them are for humans. cut_data is the JSON - the thing you wire into Scene Cut Split, and the thing that's actually load-bearing. shot_count is an INT, and the useful trick is wiring it into a note or into Scene Cut Split's shot_index range so you know how many shots you've got without reading the JSON. score_plot is an IMAGE: the per-frame difference score, so you can look at where the cuts landed instead of trusting a number. When a detection looks wrong, that plot is how you find out whether it's a threshold problem or a genuinely ambiguous cut.
cut_data being a STRING is worth stating plainly, because it's how the pack works everywhere: the analysis node emits JSON, the action node consumes it. That keeps the analysis reusable and cacheable - you detect once on a long clip and then split it in as many variants as you like.
Install
Ships with Radiance. ComfyUI Manager → search Radiance → install → restart → refresh. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt
It runs on OpenCV and NumPy, both already required. No models, no downloads. Note the pack's known-issues list: Scene Cut Detect is listed among the nodes that "broke or crawled at production size" and were fixed - so if you're on an older version and a long clip takes forever, updating is worth trying before you split the clip.
Where people get burned
- Feeding it a batch you didn't intend.
imagesis the whole sequence. If you wired in a video-read node capped withmax_video_frames, you're detecting cuts in a truncation. Check what's actually in the batch first. - Expecting cuts on a music video of hard strobe cuts at 0.5 confidence. Strobe may or may not register depending on whether the content changes - a light flashing on a static set is mostly a brightness change, and the histogram method will see it while a pure content change wouldn't exist.
- Treating shot boundaries as free. Splitting a clip is not the hard part; the frames either side of a cut still need separate handling, and a video model that sees two shots as one continuous motion will blend them. Detecting is step one, not the fix.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Full video sequence as IMAGE batch. | |
| cut_confidence | FLOAT | 0.500.01–0.99 | How different two frames must be to count as a cut, on a 0–1 scale that means the same thing for every method. 0.5 is a textbook hard cut; lower is more sensitive. Fixed, not relative to the clip, so cut-free footage reports no cuts. |
| min_shot_frames | INT | 121–500 | Minimum frames between detected cuts. |
| method | COMBO | combined | histogram: colour distribution diff (fast). edge: Sobel edge map diff (catches content cuts). combined: weighted blend of both (recommended). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| cut_data | STRING | — |
| shot_count | INT | — |
| score_plot | IMAGE | — |