Files
Billius-AI-ComfyUI-Path-Helper/nodes.py
T

208 lines
5.7 KiB
Python

import os
from datetime import datetime
import folder_paths
class AnyType(str):
def __ne__(self, __value: object) -> bool:
return False
ANY = AnyType("*")
def format_date_time(string, position, datetime_format):
today = datetime.now()
if position == "prefix":
return f"{today.strftime(datetime_format)}_{string}"
if position == "postfix":
return f"{string}_{today.strftime(datetime_format)}"
def format_variables(string, input_variables):
if input_variables:
variables = str(input_variables).split(",")
return string.format(*variables)
else:
return string
#
class CreateProjectRoot:
def __init__(self):
self.output_dir = folder_paths.get_output_directory()
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"project_root_name": ("STRING", {"multiline": False, "default": ""}),
"output_path_generation": (["relative", "absolute"],)
}
}
RETURN_TYPES = ("PATH",)
FUNCTION = "create_project_root"
CATEGORY = "path_helper"
def create_project_root(self, project_root_name, output_path_generation):
if output_path_generation == "relative":
return ("./" + project_root_name,)
elif output_path_generation == "absolute":
return (os.path.join(self.output_dir, project_root_name),)
class AddFolder:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"path": ("PATH",),
"folder_name": ("STRING", {"multiline": False, "default": ""}),
}
}
RETURN_TYPES = ("PATH",)
FUNCTION = "add_folder"
CATEGORY = "path_helper"
def add_folder(self, path, folder_name):
new_path = os.path.join(path, folder_name)
return (new_path,)
class AddFolderAdvanced:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"path": ("PATH",),
"folder_name": ("STRING", {"multiline": False, "default": ""}),
"add_date_time": (["disable", "prefix", "postfix"],),
"date_time_format": ("STRING", {"multiline": False, "default": "%Y_%m_%d_%H:%M:%S"}),
},
"optional": {
"input_variables": (ANY,)
}
}
RETURN_TYPES = ("PATH",)
FUNCTION = "add_folder"
CATEGORY = "path_helper"
def add_folder(self, path, folder_name, add_date_time, date_time_format, input_variables=None):
folder_name_parsed = format_variables(folder_name, input_variables)
if add_date_time == "disable":
new_path = os.path.join(path, folder_name_parsed)
else:
new_path = os.path.join(path, format_date_time(folder_name_parsed, add_date_time, date_time_format))
return (new_path,)
class AddFileNamePrefix:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"path": ("PATH",),
"file_name_prefix": ("STRING", {"multiline": False, "default": ""}),
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "add_filename_prefix"
CATEGORY = "path_helper"
def add_filename_prefix(self, path, file_name_prefix):
new_path = os.path.join(path, file_name_prefix)
return (new_path,)
class AddFileNamePrefixAdvanced:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"path": ("PATH",),
"file_name_prefix": ("STRING", {"multiline": False, "default": ""}),
"add_date_time": (["disable", "prefix", "postfix"],),
"date_time_format": ("STRING", {"multiline": False, "default": "%Y_%m_%d_%H:%M:%S"}),
},
"optional": {
"input_variables": (ANY,)
}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "add_filename_prefix"
CATEGORY = "path_helper"
def add_filename_prefix(self, path, file_name_prefix, add_date_time, date_time_format, input_variables=None):
filename_name_parsed = format_variables(file_name_prefix, input_variables)
if add_date_time == "disable":
new_path = os.path.join(path, filename_name_parsed)
else:
new_path = os.path.join(path, format_date_time(filename_name_parsed, add_date_time, date_time_format))
return (new_path,)
class JoinVariables:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"var_1": (ANY,),
},
"optional": {
"var_2": (ANY,),
"var_3": (ANY,),
"var_4": (ANY,),
}
}
FUNCTION = "join_variables"
CATEGORY = "path_helper"
RETURN_TYPES = ("STRING",)
def join_variables(self, var_1, var_2=None, var_3=None, var_4=None):
variables = [var_1, var_2, var_3, var_4]
return (','.join([str(var) for var in variables if var is not None]),)
class ShowPath:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"path": ("PATH",),
},
}
INPUT_IS_LIST = True
FUNCTION = "show_path"
CATEGORY = "path_helper"
OUTPUT_NODE = True
RETURN_TYPES = ("STRING",)
def show_path(self, path):
return {"ui": {"text": path}, "result": (path,)}
class ShowString:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"string": ("STRING", {"forceInput": True}),
},
}
INPUT_IS_LIST = True
FUNCTION = "show_string"
CATEGORY = "path_helper"
OUTPUT_NODE = True
RETURN_TYPES = ("STRING",)
def show_string(self, string):
return {"ui": {"text": string}, "result": (string,)}