From 9f5cabe95f64f61fb17071efed00ea2a0f126bde Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 4 Nov 2023 13:14:35 -0400 Subject: [PATCH] add user lora tags --- CHANGELOG.md | 1 + .../Lora/ui_extra_networks_lora.py | 26 +++++++++++++------ javascript/sdnext.css | 2 +- .../ui_extra_networks_textual_inversion.py | 2 +- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4185af6e6..b7edc215d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ Some highlights: [OpenVINO](https://github.com/vladmandic/automatic/wiki/OpenVIN - **Extra networks** - sort by name, size, date, etc. - switch between *gallery* and *list* views + - add tags from user metadata (in addition to tags in model metadata) for **lora** - faster enumeration of all networks on server startup - **Packages** - updated `diffusers` to 0.22.0, `transformers` to 4.34.1 diff --git a/extensions-builtin/Lora/ui_extra_networks_lora.py b/extensions-builtin/Lora/ui_extra_networks_lora.py index 22ac1da19..249f84890 100644 --- a/extensions-builtin/Lora/ui_extra_networks_lora.py +++ b/extensions-builtin/Lora/ui_extra_networks_lora.py @@ -16,7 +16,8 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): l = networks.available_networks.get(name) try: path, _ext = os.path.splitext(l.filename) - possible_tags = l.metadata.get('ss_tag_frequency', {}) if l.metadata is not None else {} + name = os.path.splitext(os.path.relpath(l.filename, shared.cmd_opts.lora_dir))[0] + if shared.backend == shared.Backend.ORIGINAL: if l.sd_version == network.SdVersion.SDXL: return None @@ -29,6 +30,9 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): elif shared.sd_model_type == 'sd': if l.sd_version == network.SdVersion.SDXL: return None + + # tags from model metedata + possible_tags = l.metadata.get('ss_tag_frequency', {}) if l.metadata is not None else {} if isinstance(possible_tags, str): possible_tags = {} tags = {} @@ -38,10 +42,7 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): if words[0] == '{}': words[0] = 0 tags[' '.join(words[1:])] = words[0] - possible_tags = l.metadata.get('tags', []) if l.metadata is not None else [] - for tag in possible_tags: - tags[tag] = 1 - name = os.path.splitext(os.path.relpath(l.filename, shared.cmd_opts.lora_dir))[0] + item = { "type": 'Lora', "name": name, @@ -52,12 +53,21 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage): "prompt": json.dumps(f" "), "local_preview": f"{path}.{shared.opts.samples_format}", "metadata": json.dumps(l.metadata, indent=4) if l.metadata else None, - "tags": tags, "mtime": os.path.getmtime(l.filename), "size": os.path.getsize(l.filename), } - item["info"] = self.find_info(l.filename) - item["description"] = self.find_description(l.filename, item["info"]) # use existing info instead of double-read + info = self.find_info(l.filename) + item["info"] = info + item["description"] = self.find_description(l.filename, info) # use existing info instead of double-read + + # tags from user metadata + possible_tags = info.get('tags', []) + if not isinstance(possible_tags, list): + possible_tags = [v for v in possible_tags.values()] + for v in possible_tags: + tags[v] = 0 + item["tags"] = tags + return item except Exception as e: shared.log.debug(f"Extra networks error: type=lora file={name} {e}") diff --git a/javascript/sdnext.css b/javascript/sdnext.css index 035862dbd..73bd52edd 100644 --- a/javascript/sdnext.css +++ b/javascript/sdnext.css @@ -199,7 +199,7 @@ table.settings-value-table td { padding: 0.4em; border: 1px solid #ccc; max-widt .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 .overlay .tags { display: none; overflow-wrap: break-word; } -.extra-network-cards .card .overlay .tag { padding: 3px; background: rgba(70, 70, 70, 0.60); font-size: var(--text-lg); cursor: pointer; display: inline-block; margin-bottom: 4px; } +.extra-network-cards .card .overlay .tag { padding: 2px; margin: 2px; background: rgba(70, 70, 70, 0.60); font-size: var(--text-md); cursor: pointer; display: inline-block; } .extra-network-cards .card .actions > span { padding: 4px; } .extra-network-cards .card .actions > span:hover { color: var(--highlight-color); } .extra-network-cards .card:hover .actions { display: block; } diff --git a/modules/ui_extra_networks_textual_inversion.py b/modules/ui_extra_networks_textual_inversion.py index bd5b59fb9..cb9213106 100644 --- a/modules/ui_extra_networks_textual_inversion.py +++ b/modules/ui_extra_networks_textual_inversion.py @@ -51,7 +51,7 @@ class ExtraNetworksPageTextualInversion(ui_extra_networks.ExtraNetworksPage): "filename": embedding.filename, "preview": self.find_preview(path), "search_term": self.search_terms_from_path(name), - "prompt": json.dumps(os.path.splitext(embedding.name)[0]), + "prompt": json.dumps(f" {os.path.splitext(embedding.name)[0]}"), "local_preview": f"{path}.{shared.opts.samples_format}", "tags": tags, "mtime": os.path.getmtime(embedding.filename),