High-performance frame input/output nodes for AI video pipelines in ComfyUI.
ComfyUI-FrameIO focuses on efficient frame storage, loading, and reuse for long video generation workflows, solving common problems like massive PNG sizes, duplicate frames, and fragile filename-based loading.
- Save batch
IMAGEtensors as WebP - Lossy or Lossless WebP
- Skip identical frames using hash-based deduplication
- Massive disk space reduction vs PNG
- Returns STRING_LIST (ComfyUI list-native)
- Pattern-based frame loading
- STRING_LIST β IMAGE loader (no filename guessing)
- Frame range selector (
start,end,step) - Auto-detect frame count (set
frame_count=0) - Execution Trigger node for flow control
- List Video Files node to scan input directory
- Safe with duplicate paths (from deduplication)
- Multi-threaded IO for high-speed saving & loading
- Direct PyTorch normalization (avoids slow CPU/NumPy conversions)
- Designed for long sequences
- Works with WebP / PNG / JPG
- Preserves exact frame ordering
- Security restricted (saves only to ComfyUI output directory)
Save an image batch efficiently to disk.
Inputs
images(IMAGE)path_pattern(STRING)start_index(INT)lossless(true / false)quality(INT)skip_identical(true / false)overwrite(true / false)
Outputs
paths(STRING_LIST)count(INT)
Load images from disk using a filename pattern.
Inputs
path_pattern(STRING) - e.g.,./frame{:06d}.webpstart_index(INT)frame_count(INT) - Set to 0 to auto-detect all available framesignore_missing_images(true / false)
Outputs
images(IMAGE)count(INT)
Same as the standard sequence loader, but includes an optional trigger input. Useful for forcing ComfyUI to wait for a previous node (like a video render) to finish before loading.
Load images directly from a STRING_LIST.
Inputs
paths(STRING_LIST)start(INT, optional)end(INT, optional)step(INT, optional)
Outputs
images(IMAGE)count(INT)
This is the recommended loader when using frame deduplication.
Scans your ComfyUI input folder for video files.
Inputs
subfolder(STRING) - Subfolder within the input directory.filter(STRING) - Wildcard filter (default*).load_cap(INT) - Maximum number of files to return (default100, 0 for no limit).deep_search(true / false) - Search subdirectories recursively (defaultfalse).
Outputs
paths(STRING_LIST) - List of absolute paths.count(INT) - Number of files found.
| Problem | Solution |
|---|---|
| PNG sequences too large | WebP (5β10Γ smaller) |
| Duplicate frames | Hash-based skip |
| Filename guessing | STRING_LIST loader |
| Partial re-render | Frame range selector |
| Long videos | Optimized IO |
KSampler
β
Batch Save Image Sequence (WebP)
β STRING_LIST
Batch Load Image List (Advanced)
β IMAGE
Video Combine / FFmpeg
start = 300end = 900step = 2
Perfect for re-encoding or post-processing sections.
| Use Case | Settings |
|---|---|
| Final video | Quality 95, Skip Identical = true |
| Iteration | Quality 90 |
| Dataset / archival | Lossless = true |
| Static shots | Skip Identical = true |
cd ComfyUI/custom_nodes
git clone https://github.com/room3dev/ComfyUI-FrameIO.gitRestart ComfyUI.
Nodes will appear under:
FrameIO
MIT