aboutsummaryrefslogtreecommitdiffstats
path: root/modules/modelloader.py
diff options
context:
space:
mode:
authorAUTOMATIC <16777216c@gmail.com>2023-05-13 17:21:11 +0000
committerAUTOMATIC <16777216c@gmail.com>2023-05-13 17:21:11 +0000
commit7e3539df6f4e3979e080ed5d76faa3649c10f76f (patch)
tree83880f5f8a2d319fc258f09f673e4411614917de /modules/modelloader.py
parent477199357f4f5f02d62857a0cf432a3ed19e6418 (diff)
downloadstable-diffusion-webui-gfx803-7e3539df6f4e3979e080ed5d76faa3649c10f76f.tar.gz
stable-diffusion-webui-gfx803-7e3539df6f4e3979e080ed5d76faa3649c10f76f.tar.bz2
stable-diffusion-webui-gfx803-7e3539df6f4e3979e080ed5d76faa3649c10f76f.zip
fix upscalers disappearing after the user reloads UI
Diffstat (limited to 'modules/modelloader.py')
-rw-r--r--modules/modelloader.py27
1 files changed, 10 insertions, 17 deletions
diff --git a/modules/modelloader.py b/modules/modelloader.py
index cb85ac4f..a70aa0e3 100644
--- a/modules/modelloader.py
+++ b/modules/modelloader.py
@@ -117,20 +117,6 @@ def move_files(src_path: str, dest_path: str, ext_filter: str = None):
pass
-builtin_upscaler_classes = []
-forbidden_upscaler_classes = set()
-
-
-def list_builtin_upscalers():
- builtin_upscaler_classes.clear()
- builtin_upscaler_classes.extend(Upscaler.__subclasses__())
-
-def forbid_loaded_nonbuiltin_upscalers():
- for cls in Upscaler.__subclasses__():
- if cls not in builtin_upscaler_classes:
- forbidden_upscaler_classes.add(cls)
-
-
def load_upscalers():
# We can only do this 'magic' method to dynamically load upscalers if they are referenced,
# so we'll try to import any _model.py files before looking in __subclasses__
@@ -146,10 +132,17 @@ def load_upscalers():
datas = []
commandline_options = vars(shared.cmd_opts)
- for cls in Upscaler.__subclasses__():
- if cls in forbidden_upscaler_classes:
- continue
+ # some of upscaler classes will not go away after reloading their modules, and we'll end
+ # up with two copies of those classes. The newest copy will always be the last in the list,
+ # so we go from end to beginning and ignore duplicates
+ used_classes = {}
+ for cls in reversed(Upscaler.__subclasses__()):
+ classname = str(cls)
+ if classname not in used_classes:
+ used_classes[classname] = cls
+
+ for cls in reversed(used_classes.values()):
name = cls.__name__
cmd_name = f"{name.lower().replace('upscaler', '')}_models_path"
scaler = cls(commandline_options.get(cmd_name, None))