fixed: Fix issue where some nodepacks were displayed redundantly in custom nodes manager.

This commit is contained in:
Dr.Lt.Data 2025-06-25 00:18:18 +09:00
parent 2795d00d1e
commit 815784e809
4 changed files with 53 additions and 12 deletions

View File

@ -43,7 +43,7 @@ import manager_downloader
from node_package import InstalledNodePackage
version_code = [3, 33, 1]
version_code = [3, 33, 2]
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
@ -400,32 +400,72 @@ class ManagedResult:
return self
class NormalizedKeyDict(dict):
class NormalizedKeyDict:
def __init__(self):
self._store = {}
self._key_map = {}
def _normalize_key(self, key):
if isinstance(key, str):
return key.strip().lower()
return key
def __setitem__(self, key, value):
super().__setitem__(self._normalize_key(key), value)
norm_key = self._normalize_key(key)
self._key_map[norm_key] = key
self._store[key] = value
def __getitem__(self, key):
return super().__getitem__(self._normalize_key(key))
norm_key = self._normalize_key(key)
original_key = self._key_map[norm_key]
return self._store[original_key]
def __delitem__(self, key):
return super().__delitem__(self._normalize_key(key))
norm_key = self._normalize_key(key)
original_key = self._key_map.pop(norm_key)
del self._store[original_key]
def __contains__(self, key):
return super().__contains__(self._normalize_key(key))
return self._normalize_key(key) in self._key_map
def get(self, key, default=None):
return super().get(self._normalize_key(key), default)
return self[key] if key in self else default
def setdefault(self, key, default=None):
return super().setdefault(self._normalize_key(key), default)
if key in self:
return self[key]
self[key] = default
return default
def pop(self, key, default=None):
return super().pop(self._normalize_key(key), default)
if key in self:
val = self[key]
del self[key]
return val
if default is not None:
return default
raise KeyError(key)
def keys(self):
return self._store.keys()
def values(self):
return self._store.values()
def items(self):
return self._store.items()
def __iter__(self):
return iter(self._store)
def __len__(self):
return len(self._store)
def __repr__(self):
return repr(self._store)
def to_dict(self):
return dict(self._store)
class UnifiedManager:
@ -842,7 +882,7 @@ class UnifiedManager:
channel = normalize_channel(channel)
nodes = await self.load_nightly(channel, mode)
res = {}
res = NormalizedKeyDict()
added_cnr = set()
for v in nodes.values():
v = v[0]

View File

@ -865,7 +865,7 @@ async def fetch_customnode_list(request):
channel = found
result = dict(channel=channel, node_packs=node_packs)
result = dict(channel=channel, node_packs=node_packs.to_dict())
return web.json_response(result, content_type='application/json')

View File

@ -714,6 +714,7 @@ export class CustomNodesManager {
link.href = rowItem.reference;
link.target = '_blank';
link.innerHTML = `<b>${title}</b>`;
link.title = rowItem.originalData.id;
container.appendChild(link);
return container;

View File

@ -1,7 +1,7 @@
[project]
name = "comfyui-manager"
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
version = "3.33.1"
version = "3.33.2"
license = { file = "LICENSE.txt" }
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions", "toml", "uv", "chardet"]