Sequence Wrangler
Turn a Folder of PNGs Into a Video, No FFmpeg Required
- images
- Alpha_as_mask
- total_batch_count
- split_batch_count
Here's the workflow gap this fills: your video model wants frames, but what you have is a folder full of frame_0001.png through frame_0181.png. Maybe they came out of an external tool, a render, or another ComfyUI instance. ComfyUI's stock loaders don't do "directory of sequentially-named images" well, and you end up stitching with Python or fighting a batch loader. Sequence Wrangler loads a whole image directory as an IMAGE batch, lets you slice out any range of frames, and hands you the alpha channel as a mask on the side.
It behaves like a video loader without needing a video file - or FFmpeg.
How it works
Point Sequence_Dir at a folder and it scans for supported extensions (.png, .jpg, .jpeg, .webp, .bmp, .tiff, .tif, .gif), sorts them by filename, and loads them as one batch. Each frame is read as RGBA, so the alpha channel survives, and there's a subtle piece of logic worth knowing: JPEGs and other formats with no real alpha get filled with 255 by PIL, so the node double-checks the original mode and, when it detects the image never had alpha, substitutes your Missing_Alpha_Handling choice instead - Opaque gives a solid white mask frame, Transparent a solid black one. That way a folder of JPEGs doesn't masquerade as all-alpha frames.
Load Mode gives you seven ways to slice the sequence: All, ranges (From first to Index 1, From Index 1 to last, Index 1 to Index 2), or single frames (First frame, Last frame, Index 1 frame). The author's off-stated gotcha: ranges are inclusive of the indexed frame - From first to Index 1 with Index_1 = 3 outputs a batch of 4, not 3.
Inputs and outputs
Only five inputs, all obvious: Sequence_Dir (a full path string), Load_Mode, Missing_Alpha_Handling, Index_1, and Index_2 (ignored outside the range modes). Outputs: images (the RGB batch), Alpha_as_mask (1.0 = opaque, normalized), total_batch_count (frames in the folder), and split_batch_count (frames actually loaded by your mode). The two counts together are a nice sanity check that your slice did what you thought.
The one thing it won't do
Animated WebP and animated GIF are deliberately rejected with a clear error that points you at the pack's own WebP Wrangler - because an animated file in a "sequence" folder would silently give you garbage frames. Static .webp and .gif still load fine as individual images.
Installing it
Manager search "ComfyUI-Fossiel-QoL-Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Fossiel/ComfyUI-Fossiel-QoL-Nodes
pip install -r ComfyUI-Fossiel-QoL-Nodes/requirements.txt
Restart, find it under Fossiel/QoL. No models, no downloads - Pillow does all the lifting.
Honest caveats
It's a folder loader, so the usual rules apply: files must sort in the order you want (zero-pad your names), and it reads every supported file in the folder - put stray images in a subfolder or they join the batch. It's also a great companion for those long-form video workflows where you generate clip by clip and want to re-feed the previous clip's frames as context - slice the tail with From Index 1 to last and you've got your context batch without touching a video encoder.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| Sequence_Dir | STRING | — | |
| Load_Mode | COMBO | All | 7 options: All, From_first_to_Index_1, From_Index_1_to_last, Index_1_to_Index_2, First_frame, Last_frame, +1 |
| Missing_Alpha_Handling | COMBO | Opaque | 2 options: Opaque, Transparent |
| Index_1 | INT | 00–10000 | — |
| Index_2 | INT | 00–10000 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| Alpha_as_mask | MASK | — |
| total_batch_count | INT | — |
| split_batch_count | INT | — |