Files
exectails-comfyui-et_dynami…/node.py
T

61 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, seeded by the set seed."}),
"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:
random.seed(seed)
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",
}