60 lines
2.3 KiB
Python
60 lines
2.3 KiB
Python
import random
|
|
from dynamicprompts.generators import RandomPromptGenerator, CombinatorialPromptGenerator
|
|
|
|
CATEGORY_NAME = "exectails"
|
|
|
|
|
|
class ETDynamicPrompt:
|
|
"""
|
|
A node that generates prompts from a given text.
|
|
"""
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"text": ("STRING", {"default": "", "multiline": True, "tooltip": "The text to generate prompts from."}),
|
|
"count": ("INT", {"default": 1, "tooltip": "Number of prompts to generate for non-combinatorial prompts."}),
|
|
"gen_type": (["random", "combinatorial"], {"default": "random", "tooltip": "Determines the type of prompt generation to use. Combinatorial returns all possible combinations, while random returns random combinations."}),
|
|
"seed_type": (["fixed", "sequential", "random"], {"default": "random", "tooltip": "Determines how returned seeds are generated. Fixed uses the set seed for all generations, sequential seeds start at the set seed, and random seeds are random for each prompt."}),
|
|
"seed": ("INT", {"default": 0, "min": 0, "max": 2000000000, "tooltip": "The seed to use for generating images. Plug returned seed(s) into sampler."}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "INT", "INT",)
|
|
RETURN_NAMES = ("text", "seed", "count",)
|
|
OUTPUT_IS_LIST = (True, True, False,)
|
|
|
|
CATEGORY = CATEGORY_NAME
|
|
FUNCTION = "process"
|
|
|
|
def process(self, text: str, count: int, gen_type: str, seed_type: str, seed: int) -> tuple:
|
|
generator = None
|
|
|
|
prompts = []
|
|
seeds = []
|
|
|
|
if gen_type == "combinatorial":
|
|
generator = CombinatorialPromptGenerator()
|
|
prompts = generator.generate(text)
|
|
else:
|
|
generator = RandomPromptGenerator()
|
|
prompts = generator.generate(text, num_images=count)
|
|
|
|
if seed_type == "fixed":
|
|
seeds = [seed] * len(prompts)
|
|
elif seed_type == "sequential":
|
|
seeds = [seed + i for i in range(len(prompts))]
|
|
else:
|
|
seeds = [random.randint(0, 2000000000) for i in range(len(prompts))]
|
|
|
|
return (prompts, seeds, len(prompts),)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"DynamicPrompt": ETDynamicPrompt,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"DynamicPrompt": "Dynamic Prompt",
|
|
}
|