commit 391230fdecdd819c1481c5f98b8a78ace16fc4d4 Author: Rocky-PC Date: Sun Jan 25 03:18:27 2026 +0800 First Commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..9fde566 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# ComfyUI-FilePathsFromFolder + +A simple ComfyUI custom node pack for loading and selecting files from folders. + +## Nodes + +### LoadFilePathsFromFolder +Scans a folder for files matching a specific extension pattern. + +**Parameters:** +- `folder_path`: Path to the folder to scan +- `extension`: File extension pattern (e.g., "*.png", "*.jpg", "*.txt") + +**Outputs:** +- `filepaths`: Line-break separated list of full file paths +- `filenames`: Line-break separated list of filenames without extensions +- `count`: Number of files matched + +### GetPathByIndex +Selects a specific file from the lists by index. + +**Inputs:** +- `filenames`: Line-break separated filenames (from LoadFilePathsFromFolder) +- `filepaths`: Line-break separated filepaths (from LoadFilePathsFromFolder) + +**Parameters:** +- `index`: Index of the file to select (0-based) + +**Outputs:** +- `filename`: Selected filename +- `filepath`: Selected filepath + +## Installation + +Place this folder in your ComfyUI `custom_nodes` directory and restart ComfyUI. + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..af0819b --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS + +__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] + diff --git a/__pycache__/__init__.cpython-312.pyc b/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..3e63b41 Binary files /dev/null and b/__pycache__/__init__.cpython-312.pyc differ diff --git a/__pycache__/nodes.cpython-312.pyc b/__pycache__/nodes.cpython-312.pyc new file mode 100644 index 0000000..0199d9f Binary files /dev/null and b/__pycache__/nodes.cpython-312.pyc differ diff --git a/nodes.py b/nodes.py new file mode 100644 index 0000000..5caf79f --- /dev/null +++ b/nodes.py @@ -0,0 +1,84 @@ +import os +import glob + + +class LoadFilePathsFromFolder: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "folder_path": ("STRING", {"default": ""}), + "extension": ("STRING", {"default": "*.png"}), + } + } + + RETURN_TYPES = ("STRING", "STRING", "INT") + RETURN_NAMES = ("filepaths", "filenames", "count") + FUNCTION = "load_files" + CATEGORY = "FilePathsFromFolder" + + def load_files(self, folder_path, extension): + # Build search pattern + search_pattern = os.path.join(folder_path, extension) + + # Find all matching files + matched_files = glob.glob(search_pattern) + matched_files.sort() + + # Extract file paths and names + filepaths = [] + filenames = [] + + for filepath in matched_files: + filepaths.append(filepath) + # Get filename without extension + basename = os.path.basename(filepath) + filename_without_ext = os.path.splitext(basename)[0] + filenames.append(filename_without_ext) + + # Join with line breaks + filepaths_str = "\n".join(filepaths) + filenames_str = "\n".join(filenames) + count = len(matched_files) + + return (filepaths_str, filenames_str, count) + + +class GetPathByIndex: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "filepaths": ("STRING", {"default": "", "multiline": True}), + "filenames": ("STRING", {"default": "", "multiline": True}), + "index": ("INT", {"default": 0, "min": 0}), + } + } + + RETURN_TYPES = ("STRING", "STRING") + RETURN_NAMES = ("filepath", "filename") + FUNCTION = "get_by_index" + CATEGORY = "FilePathsFromFolder" + + def get_by_index(self, filepaths, filenames, index): + # Split by line breaks + filepath_list = filepaths.split("\n") if filepaths else [] + filename_list = filenames.split("\n") if filenames else [] + + # Get item at index (default to empty if out of range) + filepath = filepath_list[index] if index < len(filepath_list) else "" + filename = filename_list[index] if index < len(filename_list) else "" + + return (filepath, filename) + + +NODE_CLASS_MAPPINGS = { + "LoadFilePathsFromFolder": LoadFilePathsFromFolder, + "GetPathByIndex": GetPathByIndex, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "LoadFilePathsFromFolder": "Load File Paths From Folder", + "GetPathByIndex": "Get Path By Index", +} +