Initial commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import os
|
||||
import random
|
||||
|
||||
from .randomizer import MultilineRandomChanceNode
|
||||
|
||||
|
||||
class WildcardFileLoaderNode:
|
||||
@classmethod
|
||||
def get_wildcard_files(cls):
|
||||
"""Scans the wildcards directory recursively to find all text files, preserving folder structures."""
|
||||
base_dir = os.path.abspath(
|
||||
os.path.join(os.path.dirname(__file__), "..", "..", "wildcards")
|
||||
)
|
||||
os.makedirs(base_dir, exist_ok=True)
|
||||
|
||||
file_list = []
|
||||
for root, _, files in os.walk(base_dir):
|
||||
for file in files:
|
||||
if file.endswith(".txt"):
|
||||
full_path = os.path.join(root, file)
|
||||
rel_path = os.path.relpath(full_path, base_dir)
|
||||
file_list.append(rel_path.replace("\\", "/"))
|
||||
|
||||
if not file_list:
|
||||
return ["No .txt files found in ComfyUI/wildcards/"]
|
||||
|
||||
return sorted(file_list)
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
file_list = cls.get_wildcard_files()
|
||||
return {
|
||||
"required": {
|
||||
"wildcard_file": (file_list,),
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
RETURN_NAMES = ("selected_text",)
|
||||
FUNCTION = "load_and_randomize_file"
|
||||
CATEGORY = "TextRandomizer/Text"
|
||||
|
||||
def load_and_randomize_file(self, wildcard_file, seed):
|
||||
base_dir = os.path.abspath(
|
||||
os.path.join(os.path.dirname(__file__), "..", "..", "wildcards")
|
||||
)
|
||||
file_path = os.path.join(base_dir, wildcard_file)
|
||||
|
||||
if not os.path.exists(file_path) or wildcard_file.startswith("No .txt files"):
|
||||
return ("",)
|
||||
|
||||
try:
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
raw_lines = f.readlines()
|
||||
except Exception:
|
||||
return ("",)
|
||||
|
||||
# Filter out comments and blank lines
|
||||
clean_text_block = "\n".join(
|
||||
[
|
||||
line.strip()
|
||||
for line in raw_lines
|
||||
if line.strip() and not line.startswith("#")
|
||||
]
|
||||
)
|
||||
|
||||
if not clean_text_block:
|
||||
return ("",)
|
||||
|
||||
# 1. Fetch the raw tuple output generated by the randomizer module code
|
||||
randomizer = MultilineRandomChanceNode()
|
||||
final_string_tuple = randomizer.process_random_text(clean_text_block, seed)
|
||||
|
||||
# 2. Extract index 0 to strip away the internal tuple container structure
|
||||
pure_extracted_string = final_string_tuple[0]
|
||||
|
||||
# 3. Return the pure string packaged cleanly inside ComfyUI's mandatory outer node tuple wrapper
|
||||
return (pure_extracted_string,)
|
||||
Reference in New Issue
Block a user