164 lines
5.2 KiB
Python
164 lines
5.2 KiB
Python
import re
|
|
|
|
|
|
class Big_Prompter:
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(s):
|
|
return {
|
|
"optional": {
|
|
"is_pony": (
|
|
"BOOLEAN",
|
|
{
|
|
"default": False,
|
|
"forceInput": True,
|
|
},
|
|
),
|
|
"char_collection": (
|
|
"STRING",
|
|
{"forceInput": True, "multiline": True, "default": ""},
|
|
),
|
|
"ext_llm_prompt": ("STRING", {"multiline": True, "default": "", "forceInput": True}),
|
|
"ext_gen_prompt": ("STRING", {"multiline": True, "default": "", "forceInput": True}),
|
|
},
|
|
"required": {
|
|
"positive_prompt": ("STRING", {"multiline": True, "default": ""}),
|
|
"negative_prompt": ("STRING", {"multiline": True, "default": ""}),
|
|
"base_pos_prompt": (
|
|
"STRING",
|
|
{
|
|
"multiline": True,
|
|
"default": "cinematic, colorful background, concept art, 8k, dramatic lighting, high detail, highly detailed, hyper realistic, intricate, intricate sharp details, octane render, smooth, studio lighting, trending on artstation, best quality",
|
|
},
|
|
),
|
|
"base_neg_prompt": (
|
|
"STRING",
|
|
{
|
|
"multiline": True,
|
|
"default": "worst quality, low quality, text, censored, deformed, bad hand, blurry, (watermark),extra hands, extra dicks, extra fingers , deformed fingers",
|
|
},
|
|
),
|
|
"full_wildcard": ("STRING", {"default": "__a-pure-wc__"}),
|
|
"technical_wildcard": ("STRING", {"default": "__a-technical-wc__"}),
|
|
"artist_wildcard": ("STRING", {"default": "__a-artist-wc__"}),
|
|
"use_pos_base": ("BOOLEAN", {"default": True}),
|
|
"use_neg_base": ("BOOLEAN", {"default": True}),
|
|
"use_ext_llm_prompt": ("BOOLEAN", {"default": False}),
|
|
"use_ext_gen_prompt": ("BOOLEAN", {"default": False}),
|
|
"use_full_wildcard": ("BOOLEAN", {"default": False}),
|
|
"use_technical_wildcard": ("BOOLEAN", {"default": False}),
|
|
"use_artist_wildcard": ("BOOLEAN", {"default": False}),
|
|
"select_character": ("STRING", {"default": ""}),
|
|
"rating": (
|
|
["explicit", "questionable", "save", "none"],
|
|
{"default": "save"},
|
|
),
|
|
"pony_quality": ([0, 1, 2, 3, 4], {"default": 4}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING")
|
|
RETURN_NAMES = ("pos_prompt", "neg_prompt")
|
|
CATEGORY = "Foxpack/Prompter"
|
|
FUNCTION = "main"
|
|
|
|
def pony_quality_matrix(self, pony_quality):
|
|
return {
|
|
4: {
|
|
"positive": "score_9,score_8_up,score_7_up,score_6_up,score_5_up,score_4_up",
|
|
"negative": "score_4",
|
|
},
|
|
3: {
|
|
"positive": "score_8_up,score_7_up,score_6_up,score_5_up,score_4_up",
|
|
"negative": "score_4",
|
|
},
|
|
2: {
|
|
"positive": "score_8,score_7_up,score_6_up",
|
|
"negative": "score_6,score_5,score_4",
|
|
},
|
|
1: {"positive": "score_9", "negative": "score_4"},
|
|
0: {"positive": "", "negative": ""},
|
|
}.get(pony_quality, 4)
|
|
|
|
def main(
|
|
self,
|
|
|
|
positive_prompt,
|
|
negative_prompt,
|
|
base_pos_prompt,
|
|
base_neg_prompt,
|
|
full_wildcard,
|
|
technical_wildcard,
|
|
artist_wildcard,
|
|
select_character,
|
|
rating,
|
|
pony_quality,
|
|
use_full_wildcard,
|
|
use_technical_wildcard,
|
|
use_artist_wildcard,
|
|
use_pos_base,
|
|
use_neg_base,
|
|
use_ext_llm_prompt,
|
|
use_ext_gen_prompt,
|
|
is_pony=False,
|
|
char_collection="",
|
|
ext_llm_prompt=None,
|
|
ext_gen_prompt=None,
|
|
):
|
|
pony_pos_quality = ""
|
|
pony_neg_quality = ""
|
|
|
|
if is_pony:
|
|
pony_pos_quality, pony_neg_quality = self.pony_quality_matrix(
|
|
pony_quality
|
|
).values()
|
|
|
|
if use_full_wildcard:
|
|
set_neg_base = base_neg_prompt if use_neg_base else ""
|
|
|
|
pos_prompt = f"{pony_pos_quality},{full_wildcard}"
|
|
neg_prompt = f"{pony_neg_quality},{base_neg_prompt}"
|
|
|
|
pos_prompt = re.sub(r",+", ",", pos_prompt).strip(",")
|
|
neg_prompt = re.sub(r",+", ",", neg_prompt).strip(",")
|
|
|
|
return (pos_prompt, neg_prompt)
|
|
|
|
if ext_llm_prompt is not None and use_ext_llm_prompt:
|
|
positive_prompt = ext_llm_prompt
|
|
|
|
if ext_gen_prompt is not None and use_ext_gen_prompt:
|
|
positive_prompt = ext_gen_prompt
|
|
|
|
set_rating = {
|
|
"explicit": "rating_explicit",
|
|
"questionable": "rating_questionable",
|
|
"save": "rating_safe",
|
|
"none": "",
|
|
}.get(rating, "none")
|
|
|
|
character_details = ""
|
|
if select_character:
|
|
pattern = rf'!{select_character}="([^"]+)"'
|
|
match = re.search(pattern, char_collection)
|
|
|
|
if match:
|
|
character_details = f"{match.group(1)},BREAK"
|
|
|
|
set_technical_wildcard = technical_wildcard if use_technical_wildcard else ""
|
|
set_artist_wildcard = artist_wildcard if use_artist_wildcard else ""
|
|
|
|
set_pos_base = base_pos_prompt if use_pos_base else ""
|
|
set_neg_base = base_neg_prompt if use_neg_base else ""
|
|
|
|
pos_prompt = f"{pony_pos_quality},{set_rating},{set_pos_base},{set_technical_wildcard},{character_details},{positive_prompt},{set_artist_wildcard}"
|
|
|
|
neg_prompt = f"{pony_neg_quality},{set_neg_base},{negative_prompt}"
|
|
|
|
pos_prompt = re.sub(r",+", ",", pos_prompt).strip(",")
|
|
neg_prompt = re.sub(r",+", ",", neg_prompt).strip(",")
|
|
|
|
return (pos_prompt, neg_prompt)
|