diff --git a/javascript/base.css b/javascript/base.css index f6a7f7d09..d98181cf7 100644 --- a/javascript/base.css +++ b/javascript/base.css @@ -98,7 +98,7 @@ table.settings-value-table td { padding: 0.4em; border: 1px solid #ccc; max-widt .extra-network-cards .card:hover .overlay { background: rgba(0, 0, 0, 0.40); } .extra-network-cards .card:hover .preview { box-shadow: none; filter: grayscale(100%); } .extra-network-cards .card:hover .overlay { background: rgba(0, 0, 0, 0.40); } -.extra-network-cards .card .tags { margin: 4px; display: none; overflow-wrap: break-word; } +.extra-network-cards .card .tags { margin: 4px; display: none; overflow-wrap: anywhere; } .extra-network-cards .card .tag { padding: 2px; margin: 2px; background: var(--neutral-700); cursor: pointer; display: inline-block; } .extra-network-cards .card .actions > span { padding: 4px; } .extra-network-cards .card:hover .actions { display: block; } diff --git a/modules/civitai/metadata_civitai.py b/modules/civitai/metadata_civitai.py index 93bc143be..20b48a251 100644 --- a/modules/civitai/metadata_civitai.py +++ b/modules/civitai/metadata_civitai.py @@ -260,7 +260,7 @@ def civit_search_metadata(title: str = None): if type(title) == str: if page.title != title: continue - if page.name == 'style': + if page.name == 'style' or page.name == 'wildcards': continue for item in page.list_items(): if item is None: diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 29eedc829..df5d39f31 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -149,23 +149,32 @@ class ExtraNetworksPage: return text.replace('~tabname', tabname) def create_xyz_grid(self): - """ - xyz_grid = [x for x in scripts.scripts_data if x.script_class.__module__ == "xyz_grid.py"][0].module + pass - def add_prompt(p, opt, x): - for item in [x for x in self.items if x["name"] == opt]: - try: - p.prompt = f'{p.prompt} {eval(item["prompt"])}' # pylint: disable=eval-used - except Exception as e: - shared.log.error(f'Cannot evaluate extra network prompt: {item["prompt"]} {e}') - - if not any(self.title in x.label for x in xyz_grid.axis_options): - if self.title == 'Model': - return - opt = xyz_grid.AxisOption(f"[Network] {self.title}", str, add_prompt, choices=lambda: [x["name"] for x in self.items]) - if opt not in xyz_grid.axis_options: - xyz_grid.axis_options.append(opt) - """ + def find_version(self, item, info): + all_versions = info.get('modelVersions', []) + try: + found_versions = [] + if item is None: + return all_versions + elif hasattr(item, 'hash') and item.hash is not None: + current_hash = item.hash[:8].upper() + elif hasattr(item, 'shorthash') and item.shorthash is not None: + current_hash = item.shorthash[:8].upper() + elif hasattr(item, 'sha256') and item.sha256 is not None: + current_hash = item.sha256[:8].upper() + else: + current_hash = None + for v in info.get('modelVersions', []): + for f in v.get('files', []): + if any(h.startswith(current_hash) for h in f.get('hashes', {}).values()): + found_versions.append(v) + if len(found_versions) == 0: + found_versions = all_versions + return found_versions + except Exception as e: + errors.display(e, 'Network version') + return all_versions def link_preview(self, filename): quoted_filename = urllib.parse.quote(filename.replace('\\', '/')) @@ -225,7 +234,6 @@ class ExtraNetworksPage: debug(f'EN create-items: page={self.name} items={len(self.items)} time={t1-t0:.2f}') self.list_time += t1-t0 - def create_page(self, tabname, skip = False): debug(f'EN create-page: {self.name}') if self.page_time > refresh_time and len(self.html) > 0: # cached page diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index 7041157f8..71cd9e984 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -63,7 +63,8 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): } record["info"] = self.find_info(checkpoint.filename) record["description"] = self.find_description(checkpoint.filename, record["info"]) - record["version"] = record["info"].get("modelVersions", [{}])[0].get("baseModel", "N/A") if record["info"] else "N/A" + version = self.find_version(checkpoint, record["info"]) + record["version"] = version[0].get("baseModel", "") if record["info"] else "" except Exception as e: shared.log.debug(f'Networks error: type=model file="{name}" {e}') diff --git a/modules/ui_extra_networks_lora.py b/modules/ui_extra_networks_lora.py index 2bdff7c08..110ec2dd2 100644 --- a/modules/ui_extra_networks_lora.py +++ b/modules/ui_extra_networks_lora.py @@ -17,7 +17,7 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): lora_load.list_available_networks() @staticmethod - def get_tags(l, info): + def get_tags(l, info, version): tags = {} try: if l.metadata is not None: @@ -37,19 +37,7 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): tag = ' '.join(words[1:]).lower() tags[tag] = words[0] - def find_version(): - found_versions = [] - current_hash = l.hash[:8].upper() - all_versions = info.get('modelVersions', []) - for v in info.get('modelVersions', []): - for f in v.get('files', []): - if any(h.startswith(current_hash) for h in f.get('hashes', {}).values()): - found_versions.append(v) - if len(found_versions) == 0: - found_versions = all_versions - return found_versions - - for v in find_version(): # trigger words from info json + for v in version: # trigger words from info json possible_tags = v.get('trainedWords', []) if isinstance(possible_tags, list): for tag_str in possible_tags: @@ -87,6 +75,7 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): name = os.path.splitext(os.path.relpath(l.filename, shared.cmd_opts.lora_dir))[0] size, mtime = modelstats.stat(l.filename) info = self.find_info(l.filename) + version = self.find_version(l, info) item = { "type": 'Lora', "name": name, @@ -97,10 +86,10 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): "metadata": json.dumps(l.metadata, indent=4) if l.metadata else None, "mtime": mtime, "size": size, - "version": info.get("modelVersions", [{}])[0].get("baseModel", l.sd_version) if info else l.sd_version, + "version": version[0].get("baseModel", l.sd_version) if info else l.sd_version, "info": info, "description": self.find_description(l.filename, info), - "tags": self.get_tags(l, info), + "tags": self.get_tags(l, info, version), } return item except Exception as e: diff --git a/modules/ui_extra_networks_vae.py b/modules/ui_extra_networks_vae.py index 78b6d8d5c..12f3a4a11 100644 --- a/modules/ui_extra_networks_vae.py +++ b/modules/ui_extra_networks_vae.py @@ -16,6 +16,7 @@ class ExtraNetworksPageVAEs(ui_extra_networks.ExtraNetworksPage): try: size, mtime = modelstats.stat(filename) info = self.find_info(filename) + version = self.find_version(None, info) record = { "type": 'VAE', "name": name, @@ -31,7 +32,7 @@ class ExtraNetworksPageVAEs(ui_extra_networks.ExtraNetworksPage): "size": size, "info": info, "description": self.find_description(filename, info), - "version": info.get("modelVersions", [{}])[0].get("baseModel", "N/A") if info else "N/A", + "version": version[0].get("baseModel", "N/A") if info else "N/A", } yield record except Exception as e: