Shot History
How a storyboard folder becomes an image batch in one click
- images
- paths
If you storyboard with ComfyUI - generate a shot list, iterate each shot, then want to review or batch-process the results - you've felt the pain this node exists to remove. There's no clean built-in "load every image in this folder as a batch" that also tells you which file each frame came from. Shot History is that node, and it's tuned for the storyboard workflow: it loads the shots you've picked into a single image batch, normalizes them so they all play nicely together, and hands you both the images and their full file paths.
It sits in the pack's "π¬ Storyboard" category, and it's designed to pair with the folder + storyboard tooling in the same pack (it even ships a shot_history.js UI extension). The workflow it's built for: you render shots into a folder, pick which ones you want, and this node loads them as a batch you can feed into a consistency pass, a review grid, or a video pipeline.
How it works
Point it at a folder with path (default ./shots), and it reads selected_files - a JSON list of filenames relative to that folder, which the node's own UI widget populates when you browse. It then loads each image, converts it to RGB, and - this is the important part - crop/fill resizes every shot to match the first image's dimensions. That matters a lot for batching: ComfyUI image batches demand a uniform size, and raw storyboard exports are almost never uniform. After that it packs them into a standard IMAGE tensor and returns the full paths alongside.
If nothing is selected, it doesn't crash - it returns a tiny empty 1Γ64Γ64 black image and an empty paths list, which keeps downstream nodes from erroring out on a blank selection. It's also marked as an output node, so it displays its result in the UI for quick review.
The inputs and outputs that matter
- path - the folder containing your shots. Relative paths resolve against ComfyUI's working directory, so
./shotsmeans "ashotsfolder right where ComfyUI runs." - selected_files - the JSON list of filenames. Normally you won't hand-type this; the node's UI widget fills it as you pick shots.
Outputs:
- images - one batched IMAGE tensor, all shots normalized to the first image's size.
- paths - a list of full file paths to the loaded shots, handy for filename-aware nodes or saving metadata.
Installing
Shot History ships in the drmbt/comfyui-dreambait-nodes pack. ComfyUI Manager: search comfyui-dreambait-nodes and install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/drmbt/comfyui-dreambait-nodes
# restart ComfyUI
No model downloads, no special dependencies for this one - it's pure Pillow + torch.
Where people get burned
The crop/fill resize is a double-edged sword. If your shots have very different aspect ratios, the crop can chop off composition - so render your storyboard frames at a consistent aspect ratio from the start and this node becomes invisible. Second, path is relative: ./shots is resolved from wherever ComfyUI was launched, and people on portable installs with different working directories get "why is it empty?" mysteriously. Set an absolute path if anything else in your setup also touches that folder. And remember the paths output is a list - if you're only used to scalar outputs, don't try to wire it into something that wants a single string. It's a small node with one job, and if you do storyboard work, it's the difference between manually re-loading fifteen images and just pressing run.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| path | STRING | ./shots | β |
| selected_filesopt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | β |
| paths | STRING | β |