diff --git a/.eslintrc.json b/.eslintrc.json index 0fa3cf216..ca36cce73 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,6 +22,7 @@ "no-confusing-arrow":"off", "no-console":"off", "no-empty":"off", + "no-loop-func":"off", "no-mixed-operators":"off", "no-param-reassign":"off", "no-plusplus":"off", diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index 27c522029..fce6775a6 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit 27c522029e6efe64fe889c89386497b5a14d3512 +Subproject commit fce6775a6dddef52ecd658259e909687d9dedf72 diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js index a0773514a..06c0cf819 100644 --- a/javascript/extraNetworks.js +++ b/javascript/extraNetworks.js @@ -1,4 +1,5 @@ const activePromptTextarea = {}; +let sortVal = 0; // helpers @@ -92,22 +93,28 @@ async function filterExtraNetworksForTab(tabname, searchTerm) { let found = 0; let items = 0; const t0 = performance.now(); - const cards = Array.from(gradioApp().querySelectorAll(`#${tabname}_extra_tabs div.card`)); - cards.forEach((elem) => { - items += 1; - if (searchTerm === '') { - elem.style.display = ''; - } else { - let text = `${elem.querySelector('.name').textContent.toLowerCase()} ${elem.querySelector('.search_term').textContent}`; - text = text.toLowerCase().replace('models--', 'Diffusers').replace('\\', '/'); - if (text.indexOf(searchTerm) === -1) { - elem.style.display = 'none'; - } else { + const pagename = getENActivePage(); + if (!pagename) return; + const allPages = Array.from(gradioApp().querySelectorAll('.extra-network-cards')); + const pages = allPages.filter((el) => el.id.includes(pagename.toLowerCase())); + for (const pg of pages) { + const cards = Array.from(pg.querySelectorAll('.card') || []); + cards.forEach((elem) => { + items += 1; + if (searchTerm === '') { elem.style.display = ''; - found += 1; + } else { + let text = elem.dataset.search.toLowerCase(); + text = text.toLowerCase().replace('models--', 'Diffusers').replace('\\', '/'); + if (text.indexOf(searchTerm) === -1) { + elem.style.display = 'none'; + } else { + elem.style.display = ''; + found += 1; + } } - } - }); + }); + } const t1 = performance.now(); if (found > 0) log(`filterExtraNetworks: text=${searchTerm} items=${items} match=${found} time=${Math.round(1000 * (t1 - t0)) / 1000000}`); else log(`filterExtraNetworks: text=all items=${items} time=${Math.round(1000 * (t1 - t0)) / 1000000}`); @@ -145,8 +152,6 @@ function tryToRemoveExtraNetworkFromPrompt(textarea, text) { return false; } -let sortVal = 0; - function sortExtraNetworks() { const sortDesc = ['Name [A-Z]', 'Name [Z-A]', 'Date [Newest]', 'Date [Oldest]', 'Size [Largest]', 'Size [Smallest]']; const pagename = getENActivePage(); @@ -160,8 +165,8 @@ function sortExtraNetworks() { if (num === 0) return 'sort: no cards'; cards.sort((a, b) => { // eslint-disable-line no-loop-func switch (sortVal) { - case 0: return a.dataset.name ? a.dataset.name.localeCompare(b.dataset.name) : 0; - case 1: return b.dataset.name ? b.dataset.name.localeCompare(a.dataset.name) : 0; + case 0: return a.dataset.name ? a.dataset.search.localeCompare(b.dataset.name) : 0; + case 1: return b.dataset.name ? b.dataset.search.localeCompare(a.dataset.name) : 0; case 2: return a.dataset.mtime && !isNaN(a.dataset.mtime) ? parseFloat(b.dataset.mtime) - parseFloat(a.dataset.mtime) : 0; case 3: return b.dataset.mtime && !isNaN(b.dataset.mtime) ? parseFloat(a.dataset.mtime) - parseFloat(b.dataset.mtime) : 0; case 4: return a.dataset.size && !isNaN(a.dataset.size) ? parseFloat(b.dataset.size) - parseFloat(a.dataset.size) : 0; diff --git a/modules/images.py b/modules/images.py index e061040f1..2c4ecefe4 100644 --- a/modules/images.py +++ b/modules/images.py @@ -413,7 +413,7 @@ class FilenameGenerator: [part := part.replace(word, '_') for word in invalid_files] # pylint: disable=expression-not-assigned newparts.append(part) fn = Path(*newparts) - max_length = os.statvfs(__file__).f_namemax - 32 if hasattr(os, 'statvfs') else 230 + max_length = max(230, os.statvfs(__file__).f_namemax - 32 if hasattr(os, 'statvfs') else 230) fn = str(fn)[:max_length-max(4, len(ext))].rstrip(invalid_suffix) + ext debug(f'Filename sanitize: input="{filename}" parts={parts} output="{fn}" ext={ext} max={max_length} len={len(fn)}') return fn diff --git a/modules/lora b/modules/lora index 2a23713f7..95ae56bd2 160000 --- a/modules/lora +++ b/modules/lora @@ -1 +1 @@ -Subproject commit 2a23713f71628b2d1b88a51035b3e4ee2b5dbe46 +Subproject commit 95ae56bd22c285ccb2fe5fca96d92f39842bb99b diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 0cc87b0cf..9a9257d39 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -25,9 +25,8 @@ refresh_time = 0 extra_pages = shared.extra_networks debug = shared.log.info if os.environ.get('SD_EN_DEBUG', None) is not None else lambda *args, **kwargs: None card_full = ''' -
+
-
{title}
@@ -39,11 +38,10 @@ card_full = '''
''' card_list = ''' -
+
🛈 
{title}
 
-
''' @@ -258,6 +256,7 @@ class ExtraNetworksPage: self.create_items(tabname) self.create_xyz_grid() htmls = [] + self.items.sort(key=lambda x: x["mtime"], reverse=True) for item in self.items: htmls.append(self.create_html(item, tabname)) self.html += ''.join(htmls) @@ -283,7 +282,7 @@ class ExtraNetworksPage: "tabname": tabname, "page": self.name, "name": item["name"], - "title": item["name"].replace('_', ' '), + "title": os.path.basename(item["name"].replace('_', ' ')), "filename": item["filename"], "tags": '|'.join([item.get("tags")] if isinstance(item.get("tags", {}), str) else list(item.get("tags", {}).keys())), "preview": html.escape(item.get("preview", self.link_preview('html/card-no-preview.png'))), @@ -291,7 +290,7 @@ class ExtraNetworksPage: "height": shared.opts.extra_networks_card_size if shared.opts.extra_networks_card_square else 'auto', "fit": shared.opts.extra_networks_card_fit, "prompt": item.get("prompt", None), - "search_term": item.get("search_term", ""), + "search": item.get("search_term", ""), "description": item.get("description") or "", "card_click": item.get("onclick", '"' + html.escape(f'return cardClicked({item.get("prompt", None)}, {"true" if self.allow_negative_prompt else "false"})') + '"'), "mtime": item.get("mtime", 0), diff --git a/modules/ui_extra_networks_checkpoints.py b/modules/ui_extra_networks_checkpoints.py index bf071c720..ee01e54cd 100644 --- a/modules/ui_extra_networks_checkpoints.py +++ b/modules/ui_extra_networks_checkpoints.py @@ -16,7 +16,6 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): checkpoints = sd_models.checkpoints_list.copy() for name, checkpoint in checkpoints.items(): try: - fn = os.path.splitext(checkpoint.filename)[0] record = { "type": 'Model', "name": checkpoint.name, @@ -24,15 +23,15 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage): "filename": checkpoint.filename, "hash": checkpoint.shorthash, "search_term": self.search_terms_from_path(checkpoint.title), - "preview": self.find_preview(fn), - "local_preview": f"{fn}.{shared.opts.samples_format}", + "preview": self.find_preview(checkpoint.filename), + "local_preview": f"{os.path.splitext(checkpoint.filename)[0]}.{shared.opts.samples_format}", "metadata": checkpoint.metadata, "onclick": '"' + html.escape(f"""return selectCheckpoint({json.dumps(name)})""") + '"', "mtime": os.path.getmtime(checkpoint.filename), "size": os.path.getsize(checkpoint.filename), } - record["info"] = self.find_info(fn) - record["description"] = self.find_description(fn, record["info"]) + record["info"] = self.find_info(checkpoint.filename) + record["description"] = self.find_description(checkpoint.filename, record["info"]) yield record except Exception as e: shared.log.debug(f"Extra networks error: type=model file={name} {e}") diff --git a/modules/ui_extra_networks_hypernets.py b/modules/ui_extra_networks_hypernets.py index cf6a02ae7..2fde91634 100644 --- a/modules/ui_extra_networks_hypernets.py +++ b/modules/ui_extra_networks_hypernets.py @@ -14,17 +14,17 @@ class ExtraNetworksPageHypernetworks(ui_extra_networks.ExtraNetworksPage): for name, path in shared.hypernetworks.items(): try: fn = os.path.splitext(path)[0] - name = os.path.relpath(fn, shared.opts.hypernetwork_dir) + name = os.path.relpath(os.path.splitext(path)[0], shared.opts.hypernetwork_dir) yield { "type": 'Hypernetwork', - "name": os.path.relpath(fn, shared.opts.hypernetwork_dir), + "name": name, "filename": path, - "preview": self.find_preview(fn), - "description": self.find_description(fn), - "info": self.find_info(fn), + "preview": self.find_preview(path), + "description": self.find_description(path), + "info": self.find_info(path), "search_term": self.search_terms_from_path(name), - "prompt": json.dumps(f""), - "local_preview": f"{fn}.{shared.opts.samples_format}", + "prompt": json.dumps(f""), + "local_preview": f"{os.path.splitext(path)[0]}.{shared.opts.samples_format}", "mtime": os.path.getmtime(path), "size": os.path.getsize(path), } diff --git a/modules/ui_extra_networks_textual_inversion.py b/modules/ui_extra_networks_textual_inversion.py index cb9213106..004e4cecc 100644 --- a/modules/ui_extra_networks_textual_inversion.py +++ b/modules/ui_extra_networks_textual_inversion.py @@ -49,7 +49,7 @@ class ExtraNetworksPageTextualInversion(ui_extra_networks.ExtraNetworksPage): "type": 'Embedding', "name": name, "filename": embedding.filename, - "preview": self.find_preview(path), + "preview": self.find_preview(embedding.filename), "search_term": self.search_terms_from_path(name), "prompt": json.dumps(f" {os.path.splitext(embedding.name)[0]}"), "local_preview": f"{path}.{shared.opts.samples_format}", diff --git a/modules/ui_extra_networks_vae.py b/modules/ui_extra_networks_vae.py index e1bac425b..e05920a6b 100644 --- a/modules/ui_extra_networks_vae.py +++ b/modules/ui_extra_networks_vae.py @@ -14,23 +14,22 @@ class ExtraNetworksPageVAEs(ui_extra_networks.ExtraNetworksPage): def list_items(self): for name, filename in sd_vae.vae_dict.items(): try: - fn = os.path.splitext(filename)[0] record = { "type": 'VAE', "name": name, "title": name, - "filename": fn, - "hash": hashes.sha256_from_cache(filename, f"vae/{fn}"), - "search_term": self.search_terms_from_path(fn), - "preview": self.find_preview(fn), - "local_preview": f"{fn}.{shared.opts.samples_format}", + "filename": filename, + "hash": hashes.sha256_from_cache(filename, f"vae/{filename}"), + "search_term": self.search_terms_from_path(filename), + "preview": self.find_preview(filename), + "local_preview": f"{os.path.splitext(filename)[0]}.{shared.opts.samples_format}", "metadata": {}, "onclick": '"' + html.escape(f"""return selectVAE({json.dumps(name)})""") + '"', "mtime": os.path.getmtime(filename), "size": os.path.getsize(filename), } - record["info"] = self.find_info(fn) - record["description"] = self.find_description(fn, record["info"]) + record["info"] = self.find_info(filename) + record["description"] = self.find_description(filename, record["info"]) yield record except Exception as e: shared.log.debug(f"Extra networks error: type=vae file={filename} {e}")