Nodes/Simple Video Effects/Simple Folder Video Combiner
ComfyUI Node

Simple Folder Video Combiner

Concatenate every clip in a folder into one video (fades included)

By scofano·Created 10 months ago·Updated 20 days ago· 0
Simple Folder Video Combiner
    • output_path
    directory_path
    output_filenamecombined_output.mp4
    file_pattern*.mp4
    cross_fade0.5
    use_gputrue
    recursivefalse

    If you've ever rendered a batch of clips and then had to stitch them into one video, you know the drill: open an editor, import a dozen files, export, wait. Simple Folder Video Combiner exists to kill that step. Point it at a directory, and it grabs every file matching a glob pattern, sorts them alphabetically, and joins them into a single MP4. It's the "please just merge these" node.

    How it actually works

    Don't let the "simple" fool you - there's a hidden lever. The node scans the folder with a glob, probes each file's duration with ffprobe, then hands everything to ffmpeg via the ffmpeg-python bindings. If you set cross_fade to 0, it does a straight concatenation, normalizing each clip's audio to a common format first (that's the usual source of concat failures, so it's a thoughtful touch).

    But here's the thing nobody warns you about: the default cross_fade is 0.5 seconds. So out of the box this isn't a hard cut - it's a chain of half-second crossfades between every clip, built with ffmpeg's xfade and acrossfade filters. The README bills this as "simple concatenation," which undersells what ships. If you want hard cuts, set cross_fade to 0.

    The inputs that matter

    • directory_path - where your clips live. It won't run if the folder doesn't exist.
    • file_pattern - default *.mp4. Change it to *.mov or *scene*.mp4 to be selective.
    • cross_fade - 0 for hard cuts, anything above that adds a crossfade of that many seconds between clips.
    • use_gpu - defaults on and uses h264_nvenc. Unlike some siblings in this pack, there's no fallback here - if your ffmpeg lacks NVENC and GPU encoding is on, the encode just fails. If you get an encoder error, flip this off.
    • recursive - process each subfolder separately, one output video per folder, with the folder name baked into the filename.

    The output is output_path, a STRING with the full path to the combined file (in recursive mode it's a newline-separated list, one path per folder). Outputs go to ComfyUI's output directory, and it appends _1, _2… to avoid clobbering an existing file.

    Installing it

    Standard pack install - no model files, nothing heavy:

    cd ComfyUI/custom_nodes
    git clone https://github.com/scofano/ComfyUI-Simple-video-effects
    pip install -r requirements.txt
    

    Restart ComfyUI, or search "Simple Video Effects" in ComfyUI Manager and let it handle both steps. The deps are ffmpeg-python, soundfile, numpy, Pillow and torch - all already in most setups.

    Where people get burned

    Three things bite, and they're all easy to hit.

    It re-encodes, always. The README claims "no re-encoding of content" via ffmpeg's concat demuxer, but the shipped code actually uses the concat filter, which re-encodes every frame (and crossfades obviously require it). It's not a stream copy. For a one-off merge that's fine - but if you need lossless joining, do it in a terminal with the concat demuxer and -c copy instead.

    cross_fade longer than your shortest clip fails. There's no clamping in the simple version (the Advanced Folder Video Combiner in the same pack clamps; this one doesn't). If you have a 0.2s clip and a 0.5s crossfade, the xfade filter errors out. Keep cross_fade under your shortest clip.

    The output filename edge case. If your output_filename doesn't end in .mp4, it gets appended for you - good - but the unique-filename logic runs on the output directory, so a long batch can leave you scrolling through combined_output_7.mp4 wondering which is which. Rename or move outputs as you go if you're processing many folders.

    Worth knowing before you build a big workflow around it: the sorting is plain alphabetical, so name your clips with zero-padded numbers (clip_001.mp4) or they'll come out in lexicographic order, which isn't chronological.

    CategorySimple Video Effects

    Inputs (6)

    NameTypeDefaultDescription
    directory_pathSTRING
    output_filenameSTRINGcombined_output.mp4
    file_patternSTRING*.mp4
    cross_fadeFLOAT0.5
    use_gpuBOOLEANtrue
    recursiveBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    output_pathSTRING