250 lines
9.0 KiB
Python
250 lines
9.0 KiB
Python
from __future__ import annotations
|
|
|
|
try:
|
|
from .caption_naturalizer import naturalize_caption
|
|
from .caption_policy import caption_profile_choices
|
|
from .krea_formatter import format_krea2_prompt
|
|
from .sdxl_formatter import (
|
|
format_sdxl_prompt,
|
|
sdxl_formatter_profile_choices,
|
|
sdxl_quality_preset_choices,
|
|
sdxl_style_preset_choices,
|
|
)
|
|
except ImportError: # Allows local smoke tests from the repository root.
|
|
from caption_naturalizer import naturalize_caption
|
|
from caption_policy import caption_profile_choices
|
|
from krea_formatter import format_krea2_prompt
|
|
from sdxl_formatter import (
|
|
format_sdxl_prompt,
|
|
sdxl_formatter_profile_choices,
|
|
sdxl_quality_preset_choices,
|
|
sdxl_style_preset_choices,
|
|
)
|
|
|
|
|
|
class SxCPCaptionNaturalizer:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"source_text": ("STRING", {"default": "", "multiline": True}),
|
|
"input_hint": (["auto", "metadata_json", "caption_or_prompt"], {"default": "auto"}),
|
|
"caption_profile": (caption_profile_choices(), {"default": "manual_controls"}),
|
|
"detail_level": (["balanced", "concise", "dense"], {"default": "balanced"}),
|
|
"style_policy": (["drop_style_tail", "keep_style_terms"], {"default": "drop_style_tail"}),
|
|
"trigger": ("STRING", {"default": "sxcppnl7"}),
|
|
"include_trigger": ("BOOLEAN", {"default": True}),
|
|
"target": (["auto", "single", "softcore", "hardcore"], {"default": "auto"}),
|
|
},
|
|
"optional": {
|
|
"source_text_input": ("STRING", {"forceInput": True}),
|
|
"metadata_json": ("STRING", {"forceInput": True}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING")
|
|
RETURN_NAMES = ("natural_caption", "method")
|
|
FUNCTION = "build"
|
|
CATEGORY = "prompt_builder"
|
|
|
|
def build(
|
|
self,
|
|
source_text,
|
|
input_hint,
|
|
caption_profile,
|
|
detail_level,
|
|
style_policy,
|
|
trigger,
|
|
include_trigger,
|
|
target="auto",
|
|
source_text_input="",
|
|
metadata_json="",
|
|
):
|
|
active_source_text = source_text_input or source_text or ""
|
|
return naturalize_caption(
|
|
source_text=active_source_text,
|
|
metadata_json=metadata_json or "",
|
|
input_hint=input_hint,
|
|
target=target,
|
|
trigger=trigger,
|
|
include_trigger=include_trigger,
|
|
detail_level=detail_level,
|
|
style_policy=style_policy,
|
|
caption_profile=caption_profile,
|
|
)
|
|
|
|
|
|
class SxCPKrea2Formatter:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"source_text": ("STRING", {"default": "", "multiline": True}),
|
|
"input_hint": (["auto", "metadata_json", "prompt"], {"default": "auto"}),
|
|
"target": (["auto", "single", "softcore", "hardcore"], {"default": "auto"}),
|
|
"detail_level": (["balanced", "concise", "dense"], {"default": "balanced"}),
|
|
"style_mode": (["preserve", "photographic", "minimal"], {"default": "preserve"}),
|
|
"preserve_trigger": ("BOOLEAN", {"default": False}),
|
|
},
|
|
"optional": {
|
|
"source_text_input": ("STRING", {"forceInput": True}),
|
|
"metadata_json": ("STRING", {"forceInput": True}),
|
|
"negative_prompt": ("STRING", {"forceInput": True}),
|
|
"extra_positive": ("STRING", {"default": "", "multiline": True}),
|
|
"extra_negative": ("STRING", {"default": "", "multiline": True}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING")
|
|
RETURN_NAMES = (
|
|
"krea_prompt",
|
|
"negative_prompt",
|
|
"krea_softcore_prompt",
|
|
"krea_hardcore_prompt",
|
|
"softcore_negative_prompt",
|
|
"hardcore_negative_prompt",
|
|
"method",
|
|
)
|
|
FUNCTION = "build"
|
|
CATEGORY = "prompt_builder"
|
|
|
|
def build(
|
|
self,
|
|
source_text,
|
|
input_hint,
|
|
target,
|
|
detail_level,
|
|
style_mode,
|
|
preserve_trigger,
|
|
source_text_input="",
|
|
metadata_json="",
|
|
negative_prompt="",
|
|
extra_positive="",
|
|
extra_negative="",
|
|
):
|
|
active_source_text = source_text_input or source_text or ""
|
|
row = format_krea2_prompt(
|
|
source_text=active_source_text,
|
|
metadata_json=metadata_json or "",
|
|
negative_prompt=negative_prompt or "",
|
|
input_hint=input_hint,
|
|
target=target,
|
|
detail_level=detail_level,
|
|
style_mode=style_mode,
|
|
preserve_trigger=preserve_trigger,
|
|
extra_positive=extra_positive or "",
|
|
extra_negative=extra_negative or "",
|
|
)
|
|
return (
|
|
row["krea_prompt"],
|
|
row["negative_prompt"],
|
|
row["krea_softcore_prompt"],
|
|
row["krea_hardcore_prompt"],
|
|
row["softcore_negative_prompt"],
|
|
row["hardcore_negative_prompt"],
|
|
row["method"],
|
|
)
|
|
|
|
|
|
class SxCPSDXLFormatter:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"source_text": ("STRING", {"default": "", "multiline": True}),
|
|
"input_hint": (["auto", "metadata_json", "prompt"], {"default": "auto"}),
|
|
"target": (["auto", "single", "softcore", "hardcore"], {"default": "auto"}),
|
|
"formatter_profile": (sdxl_formatter_profile_choices(), {"default": "manual_controls"}),
|
|
"style_preset": (sdxl_style_preset_choices(), {"default": "flat_vector_pony"}),
|
|
"quality_preset": (sdxl_quality_preset_choices(), {"default": "pony_high"}),
|
|
"trigger": ("STRING", {"default": "mythp0rt", "multiline": False}),
|
|
"prepend_trigger_to_prompt": ("BOOLEAN", {"default": True}),
|
|
"preserve_trigger": ("BOOLEAN", {"default": False}),
|
|
"nude_weight": ("FLOAT", {"default": 1.29, "min": 0.1, "max": 3.0, "step": 0.01}),
|
|
},
|
|
"optional": {
|
|
"source_text_input": ("STRING", {"forceInput": True}),
|
|
"metadata_json": ("STRING", {"forceInput": True}),
|
|
"negative_prompt": ("STRING", {"forceInput": True}),
|
|
"custom_style": ("STRING", {"default": "", "multiline": True}),
|
|
"custom_quality": ("STRING", {"default": "", "multiline": True}),
|
|
"extra_positive": ("STRING", {"default": "", "multiline": True}),
|
|
"extra_negative": ("STRING", {"default": "", "multiline": True}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING")
|
|
RETURN_NAMES = (
|
|
"sdxl_prompt",
|
|
"negative_prompt",
|
|
"sdxl_softcore_prompt",
|
|
"sdxl_hardcore_prompt",
|
|
"softcore_negative_prompt",
|
|
"hardcore_negative_prompt",
|
|
"method",
|
|
)
|
|
FUNCTION = "build"
|
|
CATEGORY = "prompt_builder"
|
|
|
|
def build(
|
|
self,
|
|
source_text,
|
|
input_hint,
|
|
target,
|
|
formatter_profile,
|
|
style_preset,
|
|
quality_preset,
|
|
trigger,
|
|
prepend_trigger_to_prompt,
|
|
preserve_trigger,
|
|
nude_weight,
|
|
source_text_input="",
|
|
metadata_json="",
|
|
negative_prompt="",
|
|
custom_style="",
|
|
custom_quality="",
|
|
extra_positive="",
|
|
extra_negative="",
|
|
):
|
|
active_source_text = source_text_input or source_text or ""
|
|
row = format_sdxl_prompt(
|
|
source_text=active_source_text,
|
|
metadata_json=metadata_json or "",
|
|
negative_prompt=negative_prompt or "",
|
|
input_hint=input_hint,
|
|
target=target,
|
|
formatter_profile=formatter_profile,
|
|
style_preset=style_preset,
|
|
quality_preset=quality_preset,
|
|
trigger=trigger,
|
|
prepend_trigger=prepend_trigger_to_prompt,
|
|
preserve_trigger=preserve_trigger,
|
|
nude_weight=nude_weight,
|
|
custom_style=custom_style or "",
|
|
custom_quality=custom_quality or "",
|
|
extra_positive=extra_positive or "",
|
|
extra_negative=extra_negative or "",
|
|
)
|
|
return (
|
|
row["sdxl_prompt"],
|
|
row["negative_prompt"],
|
|
row["sdxl_softcore_prompt"],
|
|
row["sdxl_hardcore_prompt"],
|
|
row["softcore_negative_prompt"],
|
|
row["hardcore_negative_prompt"],
|
|
row["method"],
|
|
)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"SxCPCaptionNaturalizer": SxCPCaptionNaturalizer,
|
|
"SxCPKrea2Formatter": SxCPKrea2Formatter,
|
|
"SxCPSDXLFormatter": SxCPSDXLFormatter,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"SxCPCaptionNaturalizer": "SxCP Caption Naturalizer",
|
|
"SxCPKrea2Formatter": "SxCP Krea2 Formatter",
|
|
"SxCPSDXLFormatter": "SxCP SDXL Formatter",
|
|
}
|