Files
kraglik-prompt_collapse/node.py
T
2024-12-07 19:08:55 +04:00

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,)