Skip to content

Commit 5a6387e

Browse files
committed
make it possible to change models etc by editing options using API
1 parent 84a6f21 commit 5a6387e

File tree

3 files changed

+24
-22
lines changed

3 files changed

+24
-22
lines changed

modules/api/api.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,8 @@ def get_config(self):
253253
return options
254254

255255
def set_config(self, req: Dict[str, Any]):
256-
257-
for o in req:
258-
setattr(shared.opts, o, req[o])
256+
for k, v in req.items():
257+
shared.opts.set(k, v)
259258

260259
shared.opts.save(shared.config_filename)
261260
return
@@ -264,7 +263,7 @@ def get_cmd_flags(self):
264263
return vars(shared.cmd_opts)
265264

266265
def get_samplers(self):
267-
return [{"name":sampler[0], "aliases":sampler[2], "options":sampler[3]} for sampler in sd_samplers.all_samplers]
266+
return [{"name": sampler[0], "aliases":sampler[2], "options":sampler[3]} for sampler in sd_samplers.all_samplers]
268267

269268
def get_upscalers(self):
270269
upscalers = []

modules/shared.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,23 @@ def __getattr__(self, item):
437437

438438
return super(Options, self).__getattribute__(item)
439439

440+
def set(self, key, value):
441+
"""sets an option and calls its onchange callback, returning True if the option changed and False otherwise"""
442+
443+
oldval = self.data.get(key, None)
444+
if oldval == value:
445+
return False
446+
447+
try:
448+
setattr(self, key, value)
449+
except RuntimeError:
450+
return False
451+
452+
if self.data_labels[key].onchange is not None:
453+
self.data_labels[key].onchange()
454+
455+
return True
456+
440457
def save(self, filename):
441458
assert not cmd_opts.freeze_settings, "saving settings is disabled"
442459

modules/ui.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1484,16 +1484,9 @@ def run_settings(*args):
14841484
if comp == dummy_component:
14851485
continue
14861486

1487-
oldval = opts.data.get(key, None)
1488-
try:
1489-
setattr(opts, key, value)
1490-
except RuntimeError:
1491-
continue
1492-
if oldval != value:
1493-
if opts.data_labels[key].onchange is not None:
1494-
opts.data_labels[key].onchange()
1495-
1487+
if opts.set(key, value):
14961488
changed.append(key)
1489+
14971490
try:
14981491
opts.save(shared.config_filename)
14991492
except RuntimeError:
@@ -1504,15 +1497,8 @@ def run_settings_single(value, key):
15041497
if not opts.same_type(value, opts.data_labels[key].default):
15051498
return gr.update(visible=True), opts.dumpjson()
15061499

1507-
oldval = opts.data.get(key, None)
1508-
try:
1509-
setattr(opts, key, value)
1510-
except Exception:
1511-
return gr.update(value=oldval), opts.dumpjson()
1512-
1513-
if oldval != value:
1514-
if opts.data_labels[key].onchange is not None:
1515-
opts.data_labels[key].onchange()
1500+
if not opts.set(key, value):
1501+
return gr.update(value=getattr(opts, key)), opts.dumpjson()
15161502

15171503
opts.save(shared.config_filename)
15181504

0 commit comments

Comments
 (0)