from .categories import NodeCategories | |
from .shared import hashed_as_strings | |
from .dreamtypes import PartialPrompt | |
class DreamWeightedPromptBuilder: | |
NODE_NAME = "Build Prompt" | |
ICON = "âš–" | |
def INPUT_TYPES(cls): | |
return { | |
"optional": { | |
"partial_prompt": (PartialPrompt.ID,) | |
}, | |
"required": { | |
"added_prompt": ("STRING", {"default": "", "multiline": True}), | |
"weight": ("FLOAT", {"default": 1.0}), | |
}, | |
} | |
CATEGORY = NodeCategories.CONDITIONING | |
RETURN_TYPES = (PartialPrompt.ID,) | |
RETURN_NAMES = ("partial_prompt",) | |
FUNCTION = "result" | |
def IS_CHANGED(cls, *values): | |
return hashed_as_strings(*values) | |
def result(self, added_prompt, weight, **args): | |
input = args.get("partial_prompt", PartialPrompt()) | |
p = input.add(added_prompt, weight) | |
return (p,) | |
class DreamPromptFinalizer: | |
NODE_NAME = "Finalize Prompt" | |
ICON = "🗫" | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"partial_prompt": (PartialPrompt.ID,), | |
"adjustment": (["raw", "by_abs_max", "by_abs_sum"],), | |
"clamp": ("FLOAT", {"default": 2.0, "min": 0.1, "step": 0.1}), | |
"adjustment_reference": ("FLOAT", {"default": 1.0, "min": 0.1}), | |
}, | |
} | |
CATEGORY = NodeCategories.CONDITIONING | |
RETURN_TYPES = ("STRING", "STRING") | |
RETURN_NAMES = ("positive", "negative") | |
FUNCTION = "result" | |
def IS_CHANGED(cls, *values): | |
return hashed_as_strings(*values) | |
def result(self, partial_prompt: PartialPrompt, adjustment, adjustment_reference, clamp): | |
if adjustment == "raw" or partial_prompt.is_empty(): | |
return partial_prompt.finalize(clamp) | |
elif adjustment == "by_abs_sum": | |
f = adjustment_reference / partial_prompt.abs_sum() | |
return partial_prompt.scaled_by(f).finalize(clamp) | |
else: | |
f = adjustment_reference / partial_prompt.abs_max() | |
return partial_prompt.scaled_by(f).finalize(clamp) | |