Shot Cuts
Find where every shot of a video starts and ends, measured from the file itself, and optionally save each shot's first and last frame as images.
The Shot Cuts node finds where every shot of a video starts and ends. It lists each shot with its start, its end and its length. Turn on Save first and last frames to also get each shot's first frame and last frame as images.
The node measures the file itself. Every decoded frame is compared with the one before it, and a frame that changes sharply from a quiet background starts a new shot. It is the same rule that Video Mask uses to mask a video shot by shot.
The node runs locally, with no AI model and no provider key, so it works on every edition.
When to use it
- Get the shot list of an edit, such as an ad, a trailer or a music video, to rebuild or restyle it shot by shot.
- Save a still of every shot, to use as a reference image for image or video models.
- Measure the pacing of an edit, with the length of every shot at a glance.
- Find the cut points before Split into Chunks. Its Shots mode cuts a video at these same points.
Quick start
Add the node
Press Tab on the canvas and choose Video › Cut & Assemble › Shot Cuts.
Connect the video
Wire a video into the Video input, for example from an Upload Video node.
Choose whether to save frames
Open the settings panel. Turn on Save first and last frames to save a first and a last frame for every shot.
Run it
Click Run on the node. The node shows the number of shots and the start and end of each one.
Inputs
| Input | Accepts | What it does |
|---|---|---|
| Video | Video nodes, such as Upload Video and Generate Video | The video to measure: MP4, MOV, MKV or WebM, up to 30 minutes long. Required. |
Outputs
| Output | What it carries |
|---|---|
| Shots | The number of shots, the cut times, the video's length and every shot, as data. |
| First frames | With frames on: a list of each shot's first frame, as image URLs, in shot order. |
| Last frames | With frames on: a list of each shot's last frame, as image URLs, in shot order. |
The Shots output looks like this:
{
"shotCount": 3,
"cutsSec": [2.5, 6.042],
"durationSec": 9,
"shots": [
{ "index": 0, "startSec": 0, "endSec": 2.5, "durationSec": 2.5, "firstFrameUrl": "https://…", "lastFrameUrl": "https://…" },
{ "index": 1, "startSec": 2.5, "endSec": 6.042, "durationSec": 3.542, "firstFrameUrl": "https://…", "lastFrameUrl": "https://…" },
{ "index": 2, "startSec": 6.042, "endSec": 9, "durationSec": 2.958, "firstFrameUrl": "https://…", "lastFrameUrl": "https://…" }
]
}| Field | What it means |
|---|---|
cutsSec | Where each new shot starts, in ascending order, never 0. A video with a single shot has cutsSec: [] and one shot that covers the whole video. |
durationSec | The video's length. The last shot ends there. |
startSec, endSec | Seconds from the video's first frame, to the millisecond. |
firstFrameUrl, lastFrameUrl | PNG images, only when frames are on. The last frame is the frame just before the next cut, or the video's final frame. A one-frame shot's first and last frame are the same image. |
Settings
| Setting | What it does |
|---|---|
| Save first and last frames | Off by default. When on, the node also saves every shot's first and last frame as images. The price is the same. Frames are saved for videos with up to 1,000 shots. |
What counts as a cut
- A hard cut starts a new shot: one frame differs sharply from the frames around it.
- Gradual transitions are not cuts. A dissolve or a fade through black spreads the change over many frames, so the shots on both sides count as one.
- Flashes. A flash held for two or three frames that returns to the same picture is not a cut. A one-frame flash is a cut.
- A cut can be missed when a second large change follows it within three frames, such as a whip pan.
Credits
Shot Cuts costs one flat price per run, with or without frames, whatever the length of the video. The Run button on the node shows the price. Self-hosted Community and Business editions use no credits.
These runs fail, and their credits are refunded:
- A file that is not a readable video.
- A file over about 10.7 GiB. The download stops there.
- A video longer than 30 minutes. Trim it first.
- With frames on, a video with more than 1,000 shots. Turn frames off to get the times alone, or trim the video.
Tips
- Read one shot's times. Wire the Shots output into Extract Field, with the field
shotsand Output Type set to List, or into a list node. See Lists and batching. - Rebuild a video shot by shot. Turn frames on, and use each shot's first frame as the start frame of a new clip.
- Cut one clip per shot. Use Split into Chunks in Shots mode.
- Frames are exact. They are the decoded frames, saved without loss, at the size of the video's picture.
Troubleshooting
| Problem | What to do |
|---|---|
| The run fails on a long video | Shot Cuts measures videos up to 30 minutes long. Trim the video with Trim Video first. |
| The run fails with frames on | The video has more than 1,000 shots. Turn Save first and last frames off, or trim the video. |
| Two shots were counted as one | The shots are joined by a dissolve or a fade, which is not a cut. A hard cut right before a whip pan can also be missed. |
| A flash started a new shot | A one-frame flash counts as a cut. Merge the two shots in the steps after the node. |
From the API
POST /v1/shot-cuts with { videoUrl, frames? } queues a job and answers with its jobId. A malformed request answers 400 validation_error before any credits are held. The finished job's output_data.json is the Shots result above. With frames on, output_data.firstFrames and output_data.lastFrames list the frame images in shot order.
The SDK method is client.media.shotCuts, and the MCP tool is shot_cuts. See Run a single node, Media and uploads in the SDK and the MCP tools.
Frequently asked questions
What does Shot Cuts do?
Shot Cuts reads a video and lists its shots, with where each one starts, where it ends and how long it lasts. It measures the file itself, so the times match the video exactly.
Does Shot Cuts count a dissolve or a fade as a cut?
No. A dissolve or a fade through black spreads the change over many frames, so the shots on both sides count as one. Only a hard cut starts a new shot.
How long can the video be?
Shot Cuts measures videos up to 30 minutes long, in MP4, MOV, MKV or WebM. Trim a longer video first.
Can Shot Cuts save a still of every shot?
Yes. Turn on Save first and last frames. The node then also saves each shot's exact first frame and last frame as PNG images, for videos with up to 1,000 shots. The price is the same.
How much does Shot Cuts cost?
Shot Cuts costs one flat price per run, with or without frames, whatever the length of the video. The Run button on the node shows the price.
Related
Split into Chunks
Extract Frame
Video Mask
Extract Field
Lists and batching
Last updated on
Split into Chunks
Cut a video or audio file into frame-exact parts between a minimum and a maximum length, or a video into one part per shot, and run the next node on each.
Manual Edit
Open clips, images and audio in the NodarCut video editor, cut and arrange them by hand, and pass the edited video on, or pause a workflow until you finish.