ComfyUI Node

Sequence Wrangler

Turn a Folder of PNGs Into a Video, No FFmpeg Required

By Fossiel·Created 10 months ago·Updated 5 months ago· 1
Sequence Wrangler
    • images
    • Alpha_as_mask
    • total_batch_count
    • split_batch_count
    Sequence_Dir
    Load_ModeAll
    Missing_Alpha_HandlingOpaque
    Index_10
    Index_20

    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.

    CategoryFossiel/QoL

    Inputs (5)

    NameTypeDefaultDescription
    Sequence_DirSTRING
    Load_ModeCOMBOAll7 options: All, From_first_to_Index_1, From_Index_1_to_last, Index_1_to_Index_2, First_frame, Last_frame, +1
    Missing_Alpha_HandlingCOMBOOpaque2 options: Opaque, Transparent
    Index_1INT00–10000
    Index_2INT00–10000

    Outputs (4)

    NameTypeDescription
    imagesIMAGE
    Alpha_as_maskMASK
    total_batch_countINT
    split_batch_countINT