Files
hexxacubic-ComfyUI-Prompt_L…/Random_Project.py
T
2025-05-24 20:09:06 +02:00

82 lines
2.5 KiB
Python

import random
class Random_Project:
"""
Random Project Node:
• Ein Textfeld “entries” mit Einträgen im Format:
###1
positive Prompt-Zeilen
---
negative Prompt-Zeilen
###2
…
• seed: ganzzahliger Seed für deterministische Auswahl (0 = kein Seed)
• index: feste Auswahl (wenn randomize=0)
• randomize: 0 = nutze index, 1 = wähle zufällig
Outputs:
• pos (STRING): ausgewählter positiver Prompt
• neg (STRING): zugehöriger negativer Prompt
"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"entries": ("STRING", {"multiline": True, "default": ""}),
"seed": ("INT", {"default": 0, "min": 0}),
"index": ("INT", {"default": 1, "min": 1}),
"randomize": ("INT", {"default": 1, "min": 0, "max": 1}),
}
}
RETURN_TYPES = ("STRING", "STRING")
FUNCTION = "random_project"
OUTPUT_NODE = True
CATEGORY = "hexxacubic"
def random_project(self, entries, seed, index, randomize):
# Parse entries nach ###Num / --- Struktur
sections = {}
current = None
for raw in entries.splitlines():
line = raw.rstrip("\n")
if not line.strip():
continue
if line.startswith("###"):
try:
num = int(line[3:])
current = num
sections[current] = {"pos": [], "neg": [], "in_neg": False}
except ValueError:
current = None
elif current is not None:
if line.strip() == "---":
sections[current]["in_neg"] = True
else:
if sections[current]["in_neg"]:
sections[current]["neg"].append(line)
else:
sections[current]["pos"].append(line)
if not sections:
return "", ""
# Seed setzen, falls gewünscht
if seed:
random.seed(seed)
# Auswahl des Index
if randomize == 1:
idx = random.choice(list(sections.keys()))
else:
idx = index
chosen = sections.get(idx)
if not chosen:
return "", ""
pos = "\n".join(chosen["pos"]).strip()
neg = "\n".join(chosen["neg"]).strip()
return pos, neg