From f369149c1d4e2c0cc8d6bf223b8f74d7d2b19aa5 Mon Sep 17 00:00:00 2001 From: hexxacubic Date: Sat, 7 Jun 2025 01:14:21 +0200 Subject: [PATCH] Create Simple_Prompt_Library --- Simple_Prompt_Library | 99 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Simple_Prompt_Library diff --git a/Simple_Prompt_Library b/Simple_Prompt_Library new file mode 100644 index 0000000..e522fab --- /dev/null +++ b/Simple_Prompt_Library @@ -0,0 +1,99 @@ +import random + +class Simple_Prompt_Library: + """ + Simple Prompt Library - Nur Textfeld und Index + • prompt_text: Mehrzeiliges Textfeld für Prompts + • index: Wählt das Prompt-Projekt (### Marker) + • randomize_index: Wenn aktiviert, wird index zufällig gesetzt + • Syntax: ### markiert neues Projekt, --- trennt positive/negative + """ + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "prompt_text": ("STRING", {"multiline": True, "default": ""}), + "index": ("INT", {"default": 1, "min": 1, "max": 99}), + "randomize_index": ("BOOLEAN", {"default": False}), + } + } + + RETURN_TYPES = ("STRING", "STRING", "INT") + RETURN_NAMES = ("positive", "negative", "used_index") + FUNCTION = "get_prompt" + CATEGORY = "hexxacubic" + + def get_prompt(self, prompt_text, index, randomize_index): + if not prompt_text.strip(): + return "", "", index + + # Parse sections - auto-numbered based on ### markers + sections = {} + current_num = 0 + current_lines = [] + + for line in prompt_text.split('\n'): + line = line.rstrip("\n") + if line.startswith("###"): + # Save previous section if exists + if current_num > 0 and current_lines: + sections[current_num] = current_lines + # Start new section + current_num += 1 + current_lines = [] + else: + if current_num > 0: # Only collect lines after first ### + current_lines.append(line) + + # Save last section if exists + if current_num > 0 and current_lines: + sections[current_num] = current_lines + + # Determine final index + if sections: + max_idx = len(sections) + if randomize_index: + # Zufälligen Index setzen + used_idx = random.randint(1, max_idx) + else: + # Verwende den gegebenen Index, aber begrenzt auf verfügbare Sections + used_idx = min(index, max_idx) + else: + used_idx = 1 + + # Extract prompts from selected section + lines = sections.get(used_idx, []) + if '---' in lines: + sep = lines.index('---') + pos = "\n".join(lines[:sep]).strip() + neg = "\n".join(lines[sep+1:]).strip() + else: + pos = "\n".join(lines).strip() + neg = "" + + # Global prompt (first section) voranstellen + if used_idx != 1 and 1 in sections: + global_lines = sections[1] + if '---' in global_lines: + sep = global_lines.index('---') + global_pos = "\n".join(global_lines[:sep]).strip() + global_neg = "\n".join(global_lines[sep+1:]).strip() + else: + global_pos = "\n".join(global_lines).strip() + global_neg = "" + + # Global prompts mit Komma anhängen + if global_pos: + pos = global_pos + ", " + pos if pos else global_pos + if global_neg: + neg = global_neg + ", " + neg if neg else global_neg + + return pos, neg, used_idx + + @classmethod + def IS_CHANGED(s, prompt_text, index, randomize_index): + # Bei Randomize immer als geändert markieren + if randomize_index: + return float("nan") + return hash(prompt_text + str(index))