Files
daxcay-ComfyUI-JDCN/JDCN_AnyFileListRandom.py
T
daxcay b5d49a1ebb Category Name Change and Making New REPO for Research tool
Decision was due to the increase of loading size of JDCN users who were not Using Reasearch nodes
2024-04-26 18:06:02 +05:30

170 lines
4.8 KiB
Python

import os
import glob
import random
from .shared import FILE_EXTENSIONS
def extract_file_names(file_paths):
"""
Extract file names without extensions from a list of file paths.
Parameters:
- file_paths: A list of file paths.
Returns:
- A list of file names without extensions.
"""
file_names = []
for file_path in file_paths:
base_name, _ = os.path.splitext(os.path.basename(file_path))
file_names.append(base_name)
return file_names
def get_files_in_folder(folder_path):
if not os.path.isdir(folder_path):
print("Folder does not exist.")
return []
files = glob.glob(os.path.join(folder_path, "*"))
return files
def getSubDirectories(folder_path):
try:
root, dirs, _ = next(os.walk(folder_path))
return dirs
except StopIteration:
return []
def randomly_select_files(file_paths, seed, number_of_files):
random.seed(seed)
if number_of_files > len(file_paths):
raise ValueError(
"Number of files requested exceeds the number of files available.")
selected_files = random.sample(file_paths, number_of_files)
return selected_files
class JDCN_AnyFileListRandom:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
FilterBy = [
"*",
"images",
"audio",
"video",
"text",
"tensors",
"folder"
]
FileExtensions = ["*"]
FileExtensions.extend(FILE_EXTENSIONS["tensors"])
FileExtensions.extend(FILE_EXTENSIONS["images"])
FileExtensions.extend(FILE_EXTENSIONS["audio"])
FileExtensions.extend(FILE_EXTENSIONS["video"])
FileExtensions.extend(FILE_EXTENSIONS["text"])
return {
"required": {
"folder_path": ("STRING", {
"multiline": False,
"default": "undefined"
}),
"filter_by": (FilterBy,),
"extension": (FileExtensions,),
"random_seed": ("INT", {"default": 1, "min": 1, "max": 0xffffffffffffffff}),
"seed_change": (['fixed', 'increment', 'decrement', 'random'],),
"batch_size": ("INT", {"default": 1, "min": 1, "max": 9999}),
},
}
RETURN_TYPES = ("STRING", "STRING", "INT",)
RETURN_NAMES = ("PathList", "PathNames", "Total")
OUTPUT_IS_LIST = (True, True, False)
OUTPUT_NODE = True
FUNCTION = "make_list"
CATEGORY = "🔵 JDCN 🔵"
def make_list(self, folder_path, filter_by, extension, random_seed, seed_change, batch_size):
if not os.path.exists(folder_path):
print(f"The folder '{folder_path}' does not exist.")
return ([""], [""], 0)
search_mode = 0
extension_search_mode = 0
if filter_by == "folder":
search_mode = 1
elif filter_by == "*":
search_mode = 3
else:
search_mode = 2
if extension == "*":
extension_search_mode = 1
else:
extension_search_mode = 2
path_list = []
if search_mode == 1:
dirs = [folder for folder in os.listdir(
folder_path) if os.path.isdir(os.path.join(folder_path, folder))]
for dir_name in dirs:
full_path = os.path.join(folder_path, dir_name)
path_list.append(full_path)
elif search_mode == 2:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_name, file_extension = os.path.splitext(file)
if file_extension in FILE_EXTENSIONS[filter_by]:
if extension_search_mode == 2:
if file.endswith(extension):
path_list.append(os.path.join(root, file))
else:
path_list.append(os.path.join(root, file))
elif search_mode == 3:
dirs = [folder for folder in os.listdir(folder_path)]
for dir_name in dirs:
full_path = os.path.join(folder_path, dir_name)
if extension_search_mode == 2:
if dir_name.endswith(extension):
path_list.append(full_path)
else:
path_list.append(full_path)
try:
path_list = randomly_select_files(
path_list, random_seed, batch_size)
except Exception as e:
print(e)
path_names = extract_file_names(path_list)
return (path_list, path_names, batch_size,)
N_CLASS_MAPPINGS = {
"JDCN_AnyFileListRandom": JDCN_AnyFileListRandom,
}
N_DISPLAY_NAME_MAPPINGS = {
"JDCN_AnyFileListRandom": "JDCN_AnyFileListRandom",
}