FL_ScanVideoShots
Run the same analysis once per shot, and let it reset at the cut
- images
- prompt_schedule
- IMAGE
Here's the problem this node exists for. You have a 200-frame video made of four shots, and you want to run depth, normals, detection and pose over all of it. Fine so far. But the effect you're building on top is temporal - the compositor smooths depth against the previous frame, tracks optical flow, and keeps two frames of echo history. Across a hard cut, all three of those are wrong: the previous frame isn't the previous moment, it's a completely different room. You get a smear through the cut.
FL Scan VideoShots fixes that by returning a list of image batches - one per shot - instead of one long batch. ComfyUI runs list items through the downstream graph one at a time, so every shot gets a fresh branch with fresh state.
It takes its shot list from your prompt schedule
The node doesn't cut anything. Give it a prompt_schedule (the FL_PROMPT_SCHEDULE output of the pack's audio/prompt sequencer) and it reads the sections you already authored there: each section's start_frame and end_frame. Your effect boundaries then land on the same frame ranges as your prompts and beats, which is the point - you're not guessing at quarters any more.
Two details worth knowing:
render_groupmerges sections. Sections that share a group and sit next to each other are returned as one batch, so a shot broken into three prompt beats still processes as one continuous shot. Without a group value, each section is its own item.- It validates hard. Sections must start exactly where the last one ended, end after they start, and the final end must equal the frame count. Anything else raises
Scan Video Shots: schedule must cover this video in order without gaps or overlaps.
No schedule connected? The node returns [images] - the whole video as a single shot, processed exactly as if it weren't there. That's a clean way to A/B a multi-shot effect against a single-pass one.
images is the only required input. prompt_schedule is the optional one, and it's also the one you'll actually be adjusting. The single output is IMAGE, marked as a list: each item is one shot's frames, cloned out of the source batch, in schedule order.
Where this fits: FL Scan VideoShots → a depth/normals/detection branch → FL Scan Analysis → FL Scan Analysis Collect → the scan compositor. The collector preserves the order and shot boundaries without concatenating tensors, so the downstream node knows where each shot begins. This replaces the older four-quarter trick with FL Scan Video Section - real shot boundaries instead of arbitrary chunks, at the cost of needing a schedule that matches.
Install
ComfyUI Manager, search ComfyUI_Fill-Nodes (publisher machinedelusions), or clone and install by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
cd ComfyUI_Fill-Nodes && pip install -r requirements.txt
Then restart ComfyUI. Fill-Nodes is a big multi-domain pack - PDF, cloud upload, GPT/Gemini/Fal nodes, audio analysis - and its requirements list reflects that. All of it installs whether you use it or not, and the first startup log dump about Google Cloud surprises people every week. This node itself is pure slicing: no models, no key, no downloads.
One thing that is genuinely separate: FL_PROMPT_SCHEDULE comes from FL_Audio_Beat_Prompt_Schedule in this pack, which has its own beat-this checkpoint download and optional Whisper/Hybrid Demucs extras the first time you use them. That's the node doing the downloading, not this one.
Where people get bitten
- Frame-count mismatch, every time. Change the audio crop, the FPS, or the video trim and the schedule no longer covers the video; you get
Scan Video Shots: schedule length must match the selected video. Use its original schedule or disconnect the schedule for a single shot.Ranges are zero-based with exclusive ends, so a 48-frame shot is[0, 48)- off-by-one here is the single most common cause of this error. - A list output changes your save nodes. Every downstream node executes once per shot, so a video-combine or save node writes one file per shot rather than one file for the whole thing. Usually what you want. Occasionally a surprise.
- Depth smoothing still exists within a shot. The compositor blends each depth frame with the previous one at low weight, which is desirable inside a shot and only resets because this node split them. Don't disconnect this and then wonder why the cut smears.
- Adjacent chunks that share a group are not separate. If two sections both carry
render_group: 1, they're one item. Grouping your four shots as 1/1/1/1 gives you exactly one pass over the whole video, which is the opposite of the intent.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| prompt_scheduleopt | FL_PROMPT_SCHEDULE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |