Files

131 lines
4.3 KiB
Python

import re
class CustomSelector:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_string": ("STRING", {"default": ""}),
"triggerwords": ("STRING", {"default": "michipeklo,chrishnsk,renehundertpfund,mikegasparik"}),
# Weight set
"weight_closeup": ("FLOAT", {"default": 0.50, "step": 0.01}),
"weight_medium": ("FLOAT", {"default": 0.50, "step": 0.01}),
"weight_wide": ("FLOAT", {"default": 0.50, "step": 0.01}),
# Start set
"start_at_closeup": ("FLOAT", {"default": 0.00, "step": 0.01}),
"start_at_medium": ("FLOAT", {"default": 0.00, "step": 0.01}),
"start_at_wide": ("FLOAT", {"default": 0.00, "step": 0.01}),
# End set
"end_at_closeup": ("FLOAT", {"default": 1.00, "step": 0.01}),
"end_at_medium": ("FLOAT", {"default": 1.00, "step": 0.01}),
"end_at_wide": ("FLOAT", {"default": 1.00, "step": 0.01}),
# Denoise set
"denoise_closeup": ("FLOAT", {"default": 0.20, "step": 0.01}),
"denoise_medium": ("FLOAT", {"default": 0.20, "step": 0.01}),
"denoise_wide": ("FLOAT", {"default": 0.20, "step": 0.01}),
"clear_string": ("BOOLEAN", {"default": False}),
"url_prefix": ("STRING", {"default": ""}),
}
}
RETURN_TYPES = (
"FLOAT", # matched_weight
"FLOAT", # matched_start
"FLOAT", # matched_end
"FLOAT", # matched_denoise
"STRING", # cleaned_string
"STRING", # matched_keyword
"STRING" # image_url
)
RETURN_NAMES = (
"matched_weight",
"matched_start",
"matched_end",
"matched_denoise",
"cleaned_string",
"matched_keyword",
"image_url"
)
FUNCTION = "select_crop_values"
CATEGORY = "Custom"
def select_crop_values(
self,
input_string,
triggerwords,
weight_closeup, weight_medium, weight_wide,
start_at_closeup, start_at_medium, start_at_wide,
end_at_closeup, end_at_medium, end_at_wide,
denoise_closeup, denoise_medium, denoise_wide,
clear_string,
url_prefix
):
input_string = input_string.strip()
lowered = input_string.lower()
cleaned_string = input_string
matched_weight = 0.0
matched_start = 0.0
matched_end = 1.0
matched_denoise = 0.0
matched_keyword = ""
image_url = ""
# Crop matching
match_map = {
"crop:medium": {
"weight": weight_medium,
"start": start_at_medium,
"end": end_at_medium,
"denoise": denoise_medium
},
"crop:wide": {
"weight": weight_wide,
"start": start_at_wide,
"end": end_at_wide,
"denoise": denoise_wide
},
"crop:closeup": {
"weight": weight_closeup,
"start": start_at_closeup,
"end": end_at_closeup,
"denoise": denoise_closeup
}
}
for key, values in match_map.items():
pattern = re.compile(re.escape(key), re.IGNORECASE)
if pattern.search(lowered):
matched_weight = round(values["weight"], 2)
matched_start = round(values["start"], 2)
matched_end = round(values["end"], 2)
matched_denoise = round(values["denoise"], 2)
cleaned_string = pattern.sub("", cleaned_string).strip()
break
# Keyword match to generate image URL
keyword_list = [kw.strip().lower() for kw in triggerwords.split(",") if kw.strip()]
for kw in keyword_list:
if re.search(rf"\b{re.escape(kw)}\b", lowered):
matched_keyword = kw
image_url = f"{url_prefix.rstrip('/')}/{kw}.jpg"
break
if clear_string:
cleaned_string = ""
return (
matched_weight,
matched_start,
matched_end,
matched_denoise,
cleaned_string,
matched_keyword,
image_url
)