File size: 2,633 Bytes
2de3774
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import json
from os.path import exists
from pathlib import Path
import time
import shared

class SettingsManager:
    DEFAULT_SETTINGS = {
        "advanced_mode": False,
        "image_number": 1,
        "seed_random": True,
        "seed": 0,
        "style": ["Style: sai-cinematic"],
        "prompt": "",
        "negative_prompt": "",
        "performance": "Speed",
        "resolution": "1152x896 (4:3)",
        "base_model": "sd_xl_base_1.0_0.9vae.safetensors",
        "lora_1_model": "None",
        "lora_1_weight": 0.5,
        "lora_2_model": "None",
        "lora_2_weight": 0.5,
        "lora_3_model": "None",
        "lora_3_weight": 0.5,
        "lora_4_model": "None",
        "lora_4_weight": 0.5,
        "lora_5_model": "None",
        "lora_5_weight": 0.5,
        "theme": "None",
        "auto_negative_prompt": False,
        "OBP_preset": "Standard",
        "hint_chance": 25,
    }

    default_settings = None
    settings_path = None
    name = None

    def __init__(self):
        from argparser import args
        self.name = args.settings
        self.set_settings_path(args.settings)
        self.load_settings()

    def set_settings_path(self, subfolder=None):
        self.subfolder = subfolder
        if self.subfolder in [None, "", "default"]:
            path = Path("settings/settings.json")
        else:
            path = Path(f"settings/{self.subfolder}/settings.json")
        if not path.parent.exists():
            path.parent.mkdir()
        self.settings_path = path

    def load_settings(self):
        path = self.settings_path
        if path and exists(path):
            with open(path) as f:
                self.default_settings = json.load(f)
        else:
            self.default_settings = {}

        # Add any missing default settings
        changed = False
        for key, value in self.DEFAULT_SETTINGS.items():
            if key not in self.default_settings:
                self.default_settings[key] = value
                changed = True

        # Some sanity checks
        for key in ['style', 'archive_folders']:
            if key in self.default_settings and not isinstance(self.default_settings[key], list):
                self.default_settings[key] = [self.default_settings[key]]

        if changed:
            with open(self.settings_path, "w") as f:
                json.dump(self.default_settings, f, indent=2)

    def save_settings(self):
        # FIXME: Add some error checks and exception handling
        with open(self.settings_path, "w") as f:
            json.dump(self.default_settings, f, indent=2)
        shared.update_cfg()