Fixed logics

Fixed alot of the logics with creating a prompt, should give more concistent results. Also fixed composition, pose, background and place + other small fixes
This commit is contained in:
Dag Thomas Olsen
2024-05-15 15:32:39 +02:00
parent ce4237804b
commit 3523cc203b
2 changed files with 104 additions and 47 deletions
+19 -19
View File
@@ -1,21 +1,21 @@
[
"front view",
"bilaterally symmetrical",
"side view",
"back view",
"from above",
"from below",
"from behind",
"wide angle view",
"fisheyes view",
"macro view",
"overhead shot",
"top down",
"bird’s eye view",
"high angle",
"slightly above",
"straight on",
"hero view",
"low view",
"selfie"
"front view",
"bilaterally symmetrical",
"side view",
"back view",
"from above",
"from below",
"from behind",
"wide angle view",
"fisheyes view",
"macro view",
"overhead shot",
"top down",
"birds eye view",
"high angle",
"slightly above",
"straight on",
"hero view",
"low view",
"selfie"
]
+85 -28
View File
@@ -133,7 +133,10 @@ class PromptGenerator:
return self.rng.choices(default_choices, k=1)[0]
else:
return input_str
def clean_consecutive_commas(self, input_string):
cleaned_string = re.sub(r',\s*,', ',', input_string)
return cleaned_string
def generate_prompt(self, **kwargs):
seed = kwargs.get("seed", 0)
if seed is not None:
@@ -148,8 +151,11 @@ class PromptGenerator:
selected_photo_style = self.get_choice(
kwargs.get("photography_styles", ""), PHOTOGRAPHY_STYLES
)
if not selected_photo_style:
selected_photo_style = "photography"
components.append(selected_photo_style)
components.append(" of")
if kwargs.get("photography_style", "") != "disabled" and kwargs.get("default_tags", "") != "disabled" or kwargs.get("subject", "") != "":
components.append(" of")
custom = kwargs.get("custom", "")
subject = kwargs.get("subject", "")
default_tags = kwargs.get(
@@ -174,11 +180,7 @@ class PromptGenerator:
("roles", ROLES),
("hairstyles", HAIRSTYLES),
("additional_details", ADDITIONAL_DETAILS),
("place", PLACE),
("clothing", CLOTHING),
("composition", COMPOSITION),
("pose", POSE),
("background", BACKGROUND),
]
for param in params:
components.append(self.get_choice(kwargs.get(param[0], ""), param[1]))
@@ -186,6 +188,63 @@ class PromptGenerator:
if components[i] in PLACE:
components[i] += ","
break
if kwargs.get("clothing", "") != "disabled" and kwargs.get("clothing", "") != "random":
components.append(", dressed in ")
clothing = kwargs.get("clothing", "")
components.append(clothing)
elif kwargs.get("clothing", "") == "random":
components.append(", dressed in ")
clothing = self.get_choice(
kwargs.get("clothing", ""), CLOTHING
)
components.append(clothing)
if kwargs.get("composition", "") != "disabled" and kwargs.get("composition", "") != "random":
components.append(", ")
composition = kwargs.get("composition", "")
components.append(composition)
elif kwargs.get("composition", "") == "random":
components.append(", ")
composition = self.get_choice(
kwargs.get("composition", ""), COMPOSITION
)
components.append(composition)
if kwargs.get("pose", "") != "disabled" and kwargs.get("pose", "") != "random":
components.append(", ")
pose = kwargs.get("pose", "")
components.append(pose)
elif kwargs.get("pose", "") == "random":
components.append(", ")
pose = self.get_choice(
kwargs.get("pose", ""), POSE
)
components.append(pose)
if kwargs.get("background", "") != "disabled" and kwargs.get("background", "") != "random":
components.append(", ")
background = kwargs.get("background", "")
components.append(background)
elif kwargs.get("background", "") == "random":
components.append(", ")
background = self.get_choice(
kwargs.get("background", ""), BACKGROUND
)
components.append(background)
if kwargs.get("place", "") != "disabled" and kwargs.get("place", "") != "random":
components.append(", ")
place = kwargs.get("place", "")
components.append(place)
elif kwargs.get("place", "") == "random":
components.append(", ")
place = self.get_choice(
kwargs.get("place", ""), PLACE
)
components.append(place)
lighting = kwargs.get("lighting", "").lower()
if lighting == "random":
selected_lighting = ", ".join(
@@ -195,25 +254,20 @@ class PromptGenerator:
elif lighting == "disabled":
pass
else:
components.append(", ")
components.append(lighting)
if is_photographer:
photo_type_choice = self.get_choice(
kwargs.get("photo_type", ""), PHOTO_TYPE
)
# If a specific photo_type is chosen, use it directly in the prompt
if photo_type_choice and photo_type_choice != "random":
random_value = round(self.rng.uniform(1.1, 1.5), 1)
components.append(f", ({photo_type_choice}:{random_value}), ")
else:
random_type = self.rng.choice(PHOTO_TYPE)
components.append(f"{random_type}, ")
random_type_float = round(random.uniform(1, 2), 1)
formatted_type_value = f"({random_type}:{random_type_float})"
random_framing = random.choice(PHOTO_FRAMING)
random_framing_float = round(random.uniform(1, 2), 1)
formatted_framing_value = f"({random_framing}:{random_framing_float})"
components.append(f"{formatted_type_value} {formatted_framing_value} ")
if kwargs.get("photo_type", "") != "disabled":
print("why")
photo_type_choice = self.get_choice(
kwargs.get("photo_type", ""), PHOTO_TYPE
)
if photo_type_choice and photo_type_choice != "random" and photo_type_choice != "disabled":
random_value = round(self.rng.uniform(1.1, 1.5), 1)
components.append(f", ({photo_type_choice}:{random_value}), ")
params = [
# ("photography_styles", PHOTOGRAPHY_STYLES),
@@ -226,24 +280,27 @@ class PromptGenerator:
for param in params
]
)
components[-2] = f"shot on {components[-2]}"
components[-1] = f"photo by {components[-1]}"
if kwargs.get("device", "") != "disabled":
components[-2] = f", shot on {components[-2]}"
if kwargs.get("photographer", "") != "disabled":
components[-1] = f", photo by {components[-1]}"
else:
digital_artform_choice = self.get_choice(
kwargs.get("digital_artform", ""), DIGITAL_ARTFORM
)
if digital_artform_choice:
components.append(f"{digital_artform_choice}")
components.append(f"by {self.get_choice(kwargs.get('artist', ''), ARTIST)}")
if kwargs.get("artist", "") != "disabled":
components.append(f"by {self.get_choice(kwargs.get('artist', ''), ARTIST)}")
prompt = " ".join(components)
prompt = re.sub(" +", " ", prompt)
print(f"PromptGenerator Seed : {seed}")
replaced = prompt.replace("of as", "of")
replaced = replaced.replace(" , ", ", ")
replaced = replaced.replace(". ", ", ")
replaced = replaced.replace(";", ", ")
replaced = self.clean_consecutive_commas(replaced)
print(f"PromptGenerator String: {replaced}")
return (
replaced,