Batch Load Image List (Advanced)
The FrameIO loader you actually want when frames repeat
- paths
- IMAGE
- INT
Here's the situation where the pattern-based sequence loader in this pack falls over: you used Batch Save Image Sequence (WebP) with skip_identical on, so your saved frames are deduplicated, and the list of paths it returned has repeats in it and skips numbers. A count-based loader can't express "load this exact list, duplicates and all." This node can. It's called "Advanced" in the UI and the name is fair - it's the loader the pack's README explicitly recommends when deduplication is in play.
Mechanically it's simple and that's the point. You feed it a paths input of type STRING_LIST - which is exactly what the WebP saver outputs - and it loads every file in that list into one IMAGE batch. Where it earns the "advanced" label is the slicing: start, end, and step let you load only part of the list, in order, with gaps. Set start = 300, end = 900, step = 2 and you get every other frame across that range - the README's own example for re-encoding or post-processing just a section of a long render instead of re-loading everything.
The three optional inputs:
- start - first index to take (default 0).
- end - exclusive end. Default
-1is the auto behavior: it means "through the end of the list," which is worth knowing because-1in a Python slice would mean one short of the end. Here it resolves to the full length. - step - take every Nth frame (default 1).
If start >= end after resolution it raises a ValueError, and an empty selection raises a runtime error, so the failure modes are at least loud. Like the sequence loader, it runs through a thread pool with a progress bar and checks every file exists before loading - a missing path is a FileNotFoundError, not a silent black frame. Outputs are IMAGE and an INT count of frames actually loaded, so you can sanity-check against what you expected.
Two practical notes. First, the STRING_LIST type is ComfyUI's native list type, which means this pack wants a reasonably recent ComfyUI build - on an old install the input type may not exist. Second, since the saver returns paths exactly as you typed the pattern (relative if you typed relative), make sure both nodes see the same working directory; if one of them is confused about where the files live, everything fails with a FileNotFoundError and it's always the path handling, never the images.
Why bother versus the pattern loader? Because dedup breaks the assumptions of pattern loading. frame000000.webp through frame000599.webp is a nice contiguous sequence until some frames are identical and collapse to earlier paths - then the mapping from "index" to "file" is no longer arithmetic, and the only honest way to reproduce the exact rendered sequence is to pass the actual path list around. That's the whole design of this pack: save returns a list, load consumes the list, nothing is guessed in between.
Install via ComfyUI Manager (search "ComfyUI-FrameIO") or:
cd ComfyUI/custom_nodes
git clone https://github.com/room3dev/ComfyUI-FrameIO
Restart, and it lives under the FrameIO category alongside its save counterpart. If you're doing long renders with any static content, this node plus the WebP saver is the frame-handling loop you'll end up running on autopilot.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| paths | STRING_LIST | — | |
| startopt | INT | 0 | — |
| endopt | INT | -1 | — |
| stepopt | INT | 1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| INT | INT | — |