Commit 5a6387e1 authored by AUTOMATIC's avatar AUTOMATIC

make it possible to change models etc by editing options using API

parent 84a6f211
...@@ -253,9 +253,8 @@ class Api: ...@@ -253,9 +253,8 @@ class Api:
return options return options
def set_config(self, req: Dict[str, Any]): def set_config(self, req: Dict[str, Any]):
for k, v in req.items():
for o in req: shared.opts.set(k, v)
setattr(shared.opts, o, req[o])
shared.opts.save(shared.config_filename) shared.opts.save(shared.config_filename)
return return
...@@ -264,7 +263,7 @@ class Api: ...@@ -264,7 +263,7 @@ class Api:
return vars(shared.cmd_opts) return vars(shared.cmd_opts)
def get_samplers(self): def get_samplers(self):
return [{"name":sampler[0], "aliases":sampler[2], "options":sampler[3]} for sampler in sd_samplers.all_samplers] return [{"name": sampler[0], "aliases":sampler[2], "options":sampler[3]} for sampler in sd_samplers.all_samplers]
def get_upscalers(self): def get_upscalers(self):
upscalers = [] upscalers = []
......
...@@ -437,6 +437,23 @@ class Options: ...@@ -437,6 +437,23 @@ class Options:
return super(Options, self).__getattribute__(item) return super(Options, self).__getattribute__(item)
def set(self, key, value):
"""sets an option and calls its onchange callback, returning True if the option changed and False otherwise"""
oldval = self.data.get(key, None)
if oldval == value:
return False
try:
setattr(self, key, value)
except RuntimeError:
return False
if self.data_labels[key].onchange is not None:
self.data_labels[key].onchange()
return True
def save(self, filename): def save(self, filename):
assert not cmd_opts.freeze_settings, "saving settings is disabled" assert not cmd_opts.freeze_settings, "saving settings is disabled"
......
...@@ -1484,16 +1484,9 @@ def create_ui(wrap_gradio_gpu_call): ...@@ -1484,16 +1484,9 @@ def create_ui(wrap_gradio_gpu_call):
if comp == dummy_component: if comp == dummy_component:
continue continue
oldval = opts.data.get(key, None) if opts.set(key, value):
try:
setattr(opts, key, value)
except RuntimeError:
continue
if oldval != value:
if opts.data_labels[key].onchange is not None:
opts.data_labels[key].onchange()
changed.append(key) changed.append(key)
try: try:
opts.save(shared.config_filename) opts.save(shared.config_filename)
except RuntimeError: except RuntimeError:
...@@ -1504,15 +1497,8 @@ def create_ui(wrap_gradio_gpu_call): ...@@ -1504,15 +1497,8 @@ def create_ui(wrap_gradio_gpu_call):
if not opts.same_type(value, opts.data_labels[key].default): if not opts.same_type(value, opts.data_labels[key].default):
return gr.update(visible=True), opts.dumpjson() return gr.update(visible=True), opts.dumpjson()
oldval = opts.data.get(key, None) if not opts.set(key, value):
try: return gr.update(value=getattr(opts, key)), opts.dumpjson()
setattr(opts, key, value)
except Exception:
return gr.update(value=oldval), opts.dumpjson()
if oldval != value:
if opts.data_labels[key].onchange is not None:
opts.data_labels[key].onchange()
opts.save(shared.config_filename) opts.save(shared.config_filename)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment