dikdimon's picture
Upload extensions using SD-Hub extension
3dabe4a verified
from modules import scripts
import gradio as gr
import json
import os
STYLE_FILE = os.path.join(scripts.basedir(), "styles.json")
EMPTY_STYLE = {"styles": {}, "deleted": {}}
class StyleManager:
def __init__(self):
self.STYLE_SHEET = None
def load_styles(self):
if os.path.isfile(STYLE_FILE):
with open(STYLE_FILE, "r", encoding="utf-8") as json_file:
self.STYLE_SHEET = json.load(json_file)
print("[Vec. CC] Style Sheet Loaded...")
else:
with open(STYLE_FILE, "w+", encoding="utf-8") as json_file:
self.STYLE_SHEET = EMPTY_STYLE
json.dump(self.STYLE_SHEET, json_file)
print("[Vec. CC] Creating Empty Style Sheet...")
return self.list_style()
def list_style(self):
return list(self.STYLE_SHEET["styles"].keys())
def get_style(self, style_name: str):
style: dict = self.STYLE_SHEET["styles"].get(style_name, None)
if not style:
print(f'\n[Error] No Style of name "{style_name}" was found!\n')
return [gr.update()] * 12
return (
style.get("alt", gr.update()),
style.get("brightness", gr.update()),
style.get("contrast", gr.update()),
style.get("saturation", gr.update()),
*style.get("rgb", (gr.update(), gr.update(), gr.update())),
style.get("hr", gr.update()),
style.get("ad", gr.update()),
style.get("rn", gr.update()),
style.get("noise", gr.update()),
style.get("scaling", gr.update()),
)
def save_style(
self,
style_name: str,
latent: bool,
bri: float,
con: float,
sat: float,
r: float,
g: float,
b: float,
hr: bool,
ad: bool,
rn: bool,
noise: str,
scaling: str,
):
if style_name in self.STYLE_SHEET["styles"]:
print(f'\n[Error] Duplicated Style Name: "{style_name}" Detected!')
print("Values were not saved!\n")
return self.list_style()
new_style = {
"alt": latent,
"brightness": bri,
"contrast": con,
"saturation": sat,
"rgb": [r, g, b],
"hr": hr,
"ad": ad,
"rn": rn,
"noise": noise,
"scaling": scaling,
}
self.STYLE_SHEET["styles"].update({style_name: new_style})
with open(STYLE_FILE, "w+") as json_file:
json.dump(self.STYLE_SHEET, json_file)
print(f'\nStyle of Name "{style_name}" Saved!\n')
return self.list_style()
def delete_style(self, style_name: str):
if style_name not in self.STYLE_SHEET["styles"]:
print(f'\n[Error] No Style of name "{style_name}" was found!\n')
return self.list_style()
style: dict = self.STYLE_SHEET["styles"].get(style_name)
self.STYLE_SHEET["deleted"].update({style_name: style})
del self.STYLE_SHEET["styles"][style_name]
with open(STYLE_FILE, "w+") as json_file:
json.dump(self.STYLE_SHEET, json_file)
print(f'\nStyle of name "{style_name}" was deleted!\n')
return self.list_style()