🎞 S42 CutFlow Thumbnail Strip
A contact sheet for your clip — see every important frame at once
- clip
- filmstrip
- info
A thumbnail strip - a filmstrip contact sheet - is the fastest way to see what your clip actually contains. Instead of scrubbing through frames, you get a grid of evenly sampled frames in one image, with frame numbers stamped on so you know exactly where each one lives. S42CF_ThumbnailStrip is S42 CutFlow's version, and it's the debug view you'll want after any operation that changes timing or content: check your trim points, verify a transition landed right, or confirm a speed ramp actually did what the curve said.
It's a Preview node, so it doesn't touch your footage - it takes a clip and emits a different kind of thing: a single image that's a summary. You connect the filmstrip output to any image preview or saver and read it like a contact sheet.
The inputs
- clip - the footage to sample.
- columns (int, default 8, max 20) - thumbnails per row. 8 is a good default; you'll drop it for tall clips or raise it for long ones.
- thumb_height (int, default 120, range 32–480) - thumbnail height in pixels; width scales to match aspect. 120 is a working size; go bigger if you need to actually read detail in the frames.
- max_frames (int, default 24, max 200) - total thumbnails. Here's the behavior worth noting: frames are evenly sampled across the whole clip, not taken from the start. So with max_frames=8 on a 121-frame clip you get frames 0, 17, 34, 51, 68, 86, 103, 120 - a true overview, not just the first 8 frames.
- show_frame_numbers (yes/no, default yes) - stamps each thumbnail with its frame index. Keep it on; the whole point is knowing where things are.
- border (int, default 2) - gap between thumbnails, drawn on a dark background.
How it works
Under the hood it computes evenly spaced indices, resizes each sampled frame with Lanczos, and pastes them into a grid with the frame-number labels drawn in. The output filmstrip is a single IMAGE frame (a one-frame batch), plus an info string reporting how many frames, rows, and the final grid size. If PIL is unavailable it degrades to returning the first frame - but PIL ships with ComfyUI, so you'll never hit that in practice.
Installing it
The whole S42 CutFlow suite installs together:
cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt # Windows portable: python_embeded\python.exe -m pip
Or ComfyUI Manager, search S42 CutFlow, install, restart. It's under S42 CutFlow/Preview.
Gotchas
The main trap is the sampling model: because frames are evenly sampled across the whole clip, a 2-second clip with max_frames=24 samples every ~2 frames, while a 30-second clip with the same setting samples every ~30. That's a feature for overviews and a bug if you expected a fine-grained look at one region - for that, trim first, then thumbnail. Second, the default 8 columns × 24 max_frames gives you a 3-row strip at 120px tall, which fits a preview canvas nicely; bump max_frames to 200 and you get a big sheet, which is fine for saving but unwieldy on screen. Third, this is a low-res overview by design - use it to find problem frames, then pull the actual frame with a frame-extract node to inspect it. The workflow that saves me hours: Thumbnail Strip after a speed ramp or transition, so a bad curve or a glitched wipe shows up as one wrong-looking tile instead of a subtle artifact you'd have to scrub to find.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Video clip to create filmstrip from. | |
| columns | INT | 82–20 | Number of thumbnails per row. |
| thumb_height | INT | 12032–480 | Height of each thumbnail in pixels. |
| max_frames | INT | 242–200 | Maximum number of thumbnails. Frames are evenly sampled across clip. |
| show_frame_numbers | COMBO | yes | Overlay frame number on each thumbnail. |
| border | INT | 20–8 | Border/gap between thumbnails in pixels. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| filmstrip | IMAGE | — |
| info | STRING | — |