diff --git a/modules/lora/lora_load.py b/modules/lora/lora_load.py index d93386cab..a454eff91 100644 --- a/modules/lora/lora_load.py +++ b/modules/lora/lora_load.py @@ -214,6 +214,13 @@ def list_available_networks(): available_network_aliases[entry.name] = entry if entry.fullname != entry.name: available_network_aliases[entry.fullname] = entry + # entry.name mangles dots to underscores for legacy reasons and entry.fullname + # carries any subfolder prefix, so neither matches when the user types the file's + # natural basename. setdefault avoids clobbering an explicit primary entry when + # two files in different subfolders share a basename. + basename_alias = os.path.splitext(os.path.basename(filename))[0] + if basename_alias and basename_alias not in (entry.name, entry.fullname): + available_network_aliases.setdefault(basename_alias, entry) if entry.shorthash: available_network_hash_lookup[entry.shorthash] = entry except OSError as e: # should catch FileNotFoundError and PermissionError etc. diff --git a/modules/lora/network.py b/modules/lora/network.py index 3086efd82..576f5831c 100644 --- a/modules/lora/network.py +++ b/modules/lora/network.py @@ -27,7 +27,10 @@ class NetworkOnDisk: self.name = name self.filename = filename if filename.startswith(shared.cmd_opts.lora_dir): - self.fullname = os.path.splitext(filename[len(shared.cmd_opts.lora_dir):].strip("/"))[0] + # strip("/") missed Windows's leading backslash after the slice; normalize separators + # so the registry key is one canonical form on every OS. + rel = filename[len(shared.cmd_opts.lora_dir):].lstrip('/\\').replace('\\', '/') + self.fullname = os.path.splitext(rel)[0] if rel else name else: self.fullname = name self.metadata = {}