From 182bbc36a313af3d5f88d4f03a3a119dcfb8eab9 Mon Sep 17 00:00:00 2001 From: awsr <43862868+awsr@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:29:12 -0800 Subject: [PATCH 1/4] Avoid mixing types --- modules/ui_extra_networks.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 90d056a04..00ba542ca 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -70,49 +70,49 @@ def init_api(): return FileResponse(filename, headers={"Accept-Ranges": "bytes"}) def get_metadata(page: str = "", item: str = ""): - page = next(iter([x for x in shared.extra_networks if x.name.lower() == page.lower()]), None) - if page is None: + page_dict = next(iter([x for x in shared.extra_networks if x.name.lower() == page.lower()]), None) + if page_dict is None: return JSONResponse({ 'metadata': 'none' }) - metadata = page.metadata.get(item, 'none') + metadata = page_dict.metadata.get(item, 'none') if metadata is None: metadata = '' # shared.log.debug(f"Networks metadata: page='{page}' item={item} len={len(metadata)}") return JSONResponse({"metadata": metadata}) def get_info(page: str = "", item: str = ""): - page = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) - if page is None: + page_dict = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) + if page_dict is None: return JSONResponse({ 'info': 'none' }) - item = next(iter([x for x in page.items if x['name'].lower() == item.lower()]), None) - if item is None: + item_dict = next(iter([x for x in page_dict.items if x['name'].lower() == item.lower()]), None) + if item_dict is None: return JSONResponse({ 'info': 'none' }) - info = page.find_info(item.get('filename', None) or item.get('name', None)) + info = page_dict.find_info(item_dict.get('filename', None) or item_dict.get('name', None)) if info is None: info = {} # shared.log.debug(f"Networks info: page='{page.name}' item={item['name']} len={len(info)}") return JSONResponse({"info": info}) def get_desc(page: str = "", item: str = ""): - page = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) - if page is None: + page_dict = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) + if page_dict is None: return JSONResponse({ 'description': 'none' }) - item = next(iter([x for x in page.items if x['name'].lower() == item.lower()]), None) - if item is None: + item_dict = next(iter([x for x in page_dict.items if x['name'].lower() == item.lower()]), None) + if item_dict is None: return JSONResponse({ 'description': 'none' }) - desc = page.find_description(item.get('filename', None) or item.get('name', None)) + desc = page_dict.find_description(item_dict.get('filename', None) or item_dict.get('name', None)) if desc is None: desc = '' # shared.log.debug(f"Networks desc: page='{page.name}' item={item['name']} len={len(desc)}") return JSONResponse({"description": desc}) def get_network(page: str = "", item: str = ""): - page = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) - if page is None: + page_dict = next(iter([x for x in get_pages() if x.name.lower() == page.lower()]), None) + if page_dict is None: return JSONResponse({ 'page': 'none' }) - item = next(iter([x for x in page.items if (x['alias'].lower() == item.lower() or x['name'].lower() == item.lower())]), None) - if item is None: + item_dict = next(iter([x for x in page_dict.items if (x['alias'].lower() == item.lower() or x['name'].lower() == item.lower())]), None) + if item_dict is None: return JSONResponse({ 'item': 'none' }) - obj = json.dumps(item, cls=DateTimeEncoder) + obj = json.dumps(item_dict, cls=DateTimeEncoder) return JSONResponse(obj) shared.api.add_api_route("/sdapi/v1/network", get_network, methods=["GET"]) From bcc889d2573429d1de25acca17573788e3f47acc Mon Sep 17 00:00:00 2001 From: awsr <43862868+awsr@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:31:07 -0800 Subject: [PATCH 2/4] Fix and update layout switching --- modules/ui_extra_networks.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 00ba542ca..a2ba111f3 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -153,6 +153,16 @@ class ExtraNetworksPage: def __str__(self): return f'Page(title="{self.title}" name="{self.name}" items={len(self.items)})' + def switch_view(self, tabname: str): + new_view = 'gallery' if self.view == 'list' else 'list' + self.view = new_view + self.card = card_full if new_view == 'gallery' else card_list + self.html = '' + self.create_page(tabname) + if shared.opts.extra_networks_view != new_view: + shared.opts.extra_networks_view = new_view + shared.opts.save() + def refresh(self): pass @@ -574,7 +584,7 @@ def register_pages(): def get_pages(title=None): visible = shared.opts.extra_networks - pages = [] + pages: list[ExtraNetworksPage] = [] if 'All' in visible or visible == []: # default en sort order visible = ['Model', 'Lora', 'Style', 'Wildcards', 'Embedding', 'VAE', 'History', 'Hypernetwork'] @@ -1008,12 +1018,7 @@ def create_ui(container, button_parent, tabname, skip_indexing = False): def ui_view_cards(title): pages = [] for page in get_pages(): - shared.opts.extra_networks_view = page.view - # shared.opts.save(shared.config_filename) - page.view = 'gallery' if page.view == 'list' else 'list' - page.card = card_full if page.view == 'gallery' else card_list - page.html = '' - page.create_page(ui.tabname) + page.switch_view(ui.tabname) shared.log.debug(f'Networks: refresh page="{page.title}" items={len(page.items)} tab={ui.tabname} view={page.view}') pages.append(page.html) ui.search.update(title) From 1f3ee826ed195f078d2a0e1057509aa0a858e25f Mon Sep 17 00:00:00 2001 From: awsr <43862868+awsr@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:31:48 -0800 Subject: [PATCH 3/4] Fix pyright: reportOptionalMemberAccess --- modules/ui_extra_networks.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index a2ba111f3..7eb714022 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -517,7 +517,10 @@ class ExtraNetworksPage: pass if info is None: info = self.find_info(path) - desc = info.get('description', '') or '' + if not isinstance(info, dict): + self.desc_time += time.time() - t0 + return '' + desc = info.get('description', '') f = HTMLFilter() f.feed(desc) t1 = time.time() From d49c484af455969269b7263a09582ea6b30c0e5b Mon Sep 17 00:00:00 2001 From: awsr <43862868+awsr@users.noreply.github.com> Date: Sat, 17 Jan 2026 03:57:53 -0800 Subject: [PATCH 4/4] Use correct import for `piexif.helper` --- modules/ui_extra_networks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py index 7eb714022..d85c39657 100644 --- a/modules/ui_extra_networks.py +++ b/modules/ui_extra_networks.py @@ -203,6 +203,7 @@ class ExtraNetworksPage: def get_exif(self, image: Image.Image): import piexif + import piexif.helper try: exifinfo = image.getexif() if exifinfo is not None and len(exifinfo) > 0: