52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
import os
|
|
from .prompt_collapse import PromptBuilder, ComponentRepository
|
|
|
|
_CACHED_REPO = None
|
|
|
|
|
|
class PromptCollapseNode:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"prompt": ("STRING", {"multiline": True, "default": "", "label": "Prompt"}),
|
|
"components_directory_path": ("STRING", {"default": "", "label": "Components Directory Path"}),
|
|
"use_tags": ("BOOLEAN", {"default": False, "label": "Use Tags"}),
|
|
"reload_on_generation": ("BOOLEAN", {"default": False, "label": "Reload on Generation"}),
|
|
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING",)
|
|
RETURN_NAMES = ("prompt",)
|
|
|
|
FUNCTION = "process"
|
|
CATEGORY = "prompt_collapse"
|
|
|
|
|
|
def process(self, prompt, components_directory_path, use_tags, reload_on_generation, seed):
|
|
global _CACHED_REPO
|
|
|
|
if not components_directory_path:
|
|
components_directory_path = os.path.join(os.path.dirname(__file__), "components")
|
|
|
|
if _CACHED_REPO is None or reload_on_generation:
|
|
_CACHED_REPO = ComponentRepository()
|
|
_CACHED_REPO.load_from_directory(components_directory_path)
|
|
|
|
names = [c_name.strip() for c_name in prompt.strip().split(",")]
|
|
names = [c_name for c_name in names if c_name]
|
|
|
|
print(names)
|
|
|
|
initial_selected = None if use_tags else names
|
|
tags = names if use_tags else None
|
|
|
|
items = PromptBuilder(
|
|
repository=_CACHED_REPO,
|
|
initial_selected=initial_selected,
|
|
tags=tags,
|
|
).build_prompt()
|
|
result = ", ".join(set(items))
|
|
|
|
return (result,) |