mirror of
https://github.com/sd-webui/stable-diffusion-webui.git
synced 2024-12-14 23:02:00 +03:00
a9bc7eae19
for more information, see https://pre-commit.ci
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
import os
|
|
import pandas as pd
|
|
|
|
|
|
def split_weighted_subprompts(text):
|
|
"""
|
|
grabs all text up to the first occurrence of ':'
|
|
uses the grabbed text as a sub-prompt, and takes the value following ':' as weight
|
|
if ':' has no value defined, defaults to 1.0
|
|
repeats until no text remaining
|
|
"""
|
|
remaining = len(text)
|
|
prompts = []
|
|
weights = []
|
|
while remaining > 0:
|
|
if ":" in text:
|
|
idx = text.index(":") # first occurrence from start
|
|
# grab up to index as sub-prompt
|
|
prompt = text[:idx]
|
|
remaining -= idx
|
|
# remove from main text
|
|
text = text[idx + 1 :]
|
|
# find value for weight
|
|
if " " in text:
|
|
idx = text.index(" ") # first occurence
|
|
else: # no space, read to end
|
|
idx = len(text)
|
|
if idx != 0:
|
|
try:
|
|
weight = float(text[:idx])
|
|
except: # couldn't treat as float
|
|
print(
|
|
f"Warning: '{text[:idx]}' is not a value, are you missing a space?"
|
|
)
|
|
weight = 1.0
|
|
else: # no value found
|
|
weight = 1.0
|
|
# remove from main text
|
|
remaining -= idx
|
|
text = text[idx + 1 :]
|
|
# append the sub-prompt and its weight
|
|
prompts.append(prompt)
|
|
weights.append(weight)
|
|
else: # no : found
|
|
if len(text) > 0: # there is still text though
|
|
# take remainder as weight 1
|
|
prompts.append(text)
|
|
weights.append(1.0)
|
|
remaining = 0
|
|
return prompts, weights
|
|
|
|
|
|
def logger(params, log_csv):
|
|
os.makedirs("logs", exist_ok=True)
|
|
cols = [arg for arg, _ in params.items()]
|
|
if not os.path.exists(log_csv):
|
|
df = pd.DataFrame(columns=cols)
|
|
df.to_csv(log_csv, index=False)
|
|
|
|
df = pd.read_csv(log_csv)
|
|
for arg in cols:
|
|
if arg not in df.columns:
|
|
df[arg] = ""
|
|
df.to_csv(log_csv, index=False)
|
|
|
|
li = {}
|
|
cols = [col for col in df.columns]
|
|
data = {arg: value for arg, value in params.items()}
|
|
for col in cols:
|
|
if col in data:
|
|
li[col] = data[col]
|
|
else:
|
|
li[col] = ""
|
|
|
|
df = pd.DataFrame(li, index=[0])
|
|
df.to_csv(log_csv, index=False, mode="a", header=False)
|