ComfyUI-FilePathsFromFolder
Load file paths from a folder by extension (*.png, *.mp4, *.txt, etc.), then feed them into any ComfyUI node that accepts a path (image/video/audio/anything-from-path).
This repo is mainly for easy batch processing:
- Use it with your favorite loop/for/while node pack (pick items by index), or
- Use this repo’s simple loop node (
FilePathsForLoop) to have ComfyUI run downstream nodes once per file (list batching).
Installation
Recommended: Git clone
- Clone into
ComfyUI/custom_nodes
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/RockyHong/ComfyUI-FilePathsFromFolder.git
- Restart ComfyUI
- Search nodes by name:
LoadFilePathsFromFolder,GetPathByIndex,FilePathsForLoop
Alternative: Manual install (ZIP)
- Download ZIP from GitHub
- Extract
- Copy folder
ComfyUI-FilePathsFromFolderintoComfyUI/custom_nodes/ - Restart ComfyUI
Choose how you want to iterate
-
Option A — Use another loop pack (index-based): get a file path list + pick one path per iteration
- Use
LoadFilePathsFromFolder→GetPathByIndex - Best when you already have a loop/for/while node from another pack, and you just need a clean “files-by-extension” input.
- Use
-
Option B — Use this repo’s simple loop: run downstream nodes once per file (list batching)
- Use
FilePathsForLoop→ your processing nodes → (optional)FilePathsEnsureExecution→FilePathsLoopClose - Best when you want a simple, no-extra-deps “loop”: ComfyUI runs downstream nodes once per file via list batching.
- Use
Node reference
LoadFilePathsFromFolder
- What it does: scan a folder for matching files.
- Parameters
folder_path: folder to scanextension: pattern like"*.png","*.jpg","*.txt"
- Outputs
filepaths: newline-separated full pathsfilenames: newline-separated base names (no extension)count: number of matched files
GetPathByIndex
- What it does: pick one file by index (0-based).
- Inputs
filepaths: fromLoadFilePathsFromFolderfilenames: fromLoadFilePathsFromFolder
- Parameter
index: 0-based index
- Outputs
filepath: selected full pathfilename: selected base name
Loop nodes (ComfyUI list batching)
Memory note (about this repo’s loop nodes)
FilePathsForLoop uses ComfyUI list batching (it sets OUTPUT_IS_LIST). This is not a “while/for loop” that runs one full iteration end-to-end.
-
What this means in practice: if you connect
Load X From Path→Process→Save, ComfyUI may do all theLoadwork for the batch first, then all theProcesswork, then all theSavework (instead of Load→Process→Save per item). -
Why memory can grow: batching can keep more intermediate results “alive” until later nodes run, and heavy nodes (generation/model processing/large video frames) can push VRAM/RAM peak usage.
-
Why batching can be great: big models can stay loaded while the batch runs, so you avoid repeated load/unload overhead between items.
-
Practical tip: if you notice memory climbing, insert “Clean VRAM” / “Clean RAM” (or equivalent) at safe points after heavy steps.
-
If you need strict sequential iteration (finish item 0 completely before item 1): use a dedicated for/while-loop node pack (a “real loop”), and drive it with:
LoadFilePathsFromFolder→count(loop count)GetPathByIndex→filepath/filename(per-iteration selection)
FilePathsForLoop
- What it does: returns a list of files so ComfyUI can run downstream nodes once per item.
- Parameters
folder_pathextension
- Outputs (all are lists)
current_filepathcurrent_filenamecurrent_index(0-based)total_file_count
Key detail: this node sets OUTPUT_IS_LIST. Downstream nodes receive one item per execution (not the whole list).
FilePathsLoopClose
- What it does: loop “terminator” / completion signal.
- Inputs
current_index: fromFilePathsForLoop(required)passthrough: optional (often fromFilePathsEnsureExecution.passthrough)
- Outputs
processed_count
FilePathsEnsureExecution
- What it does: “collects” outputs so a route becomes required (and actually runs).
ComfyUI schedules execution based on dependencies: if nothing downstream “needs” a route’s results, ComfyUI may skip that route (or only run part of it).
FilePathsEnsureExecution is a simple way to guarantee a route runs: plug the outputs you care about into passthrough_1…passthrough_5, then plug passthrough into FilePathsLoopClose.passthrough so the graph depends on that route.
Practical rule of thumb: you usually only need to connect the terminal node/output of the route you want to guarantee (the last node in that route). If the end node must run, everything upstream of it becomes required too.
Example route: Load Image From Path → processing → Save Image → connect the Save Image output to FilePathsEnsureExecution.passthrough_* to “anchor” the whole chain.
- Inputs
passthrough_1…passthrough_5: any type (*)
- Outputs
passthrough: first non-None input
Tip: if you need more than 5 inputs, chain multiple FilePathsEnsureExecution nodes.
How ComfyUI list batching works (tiny mental model)
When a node outputs a list (via OUTPUT_IS_LIST):
- The node returns something like
["file1.png", "file2.png", "file3.png"] - ComfyUI schedules execution across the graph in batch mode
- Many nodes will be invoked repeatedly so each call receives a single item (e.g.
"file2.png") - But execution tends to happen node-by-node for the batch (so you may observe “all loads”, then “all processing”, then “all saves”)
Example workflow (loop every file)
FilePathsForLoop(set folder path + extension)current_filepath→ your loader node (e.g. Load Image)- Your processing nodes
- (Optional) outputs you want to guarantee run (e.g. save/write/export nodes) →
FilePathsEnsureExecution.passthrough_1…passthrough_5 current_index→FilePathsLoopClose.current_index- (Optional)
FilePathsEnsureExecution.passthrough→FilePathsLoopClose.passthrough(this “anchors” the route so it executes)