* FIXED: Resolved an issue where cache updates were not working properly.

* IMPROVED: Instead of updating the entire CNR cache at once, the process now divides it into 30-page queries.
* IMPROVED: Clicking on the titles of nodes that exist only in CNR now opens the GitHub repository link instead of the CNR link, where possible.
* ADDED: Added information about `extra_model_paths.yaml` to the README.md file.

https://github.com/ltdrdata/ComfyUI-Manager/issues/1457
This commit is contained in:
Dr.Lt.Data
2025-01-19 02:25:34 +09:00
parent 191bffedcb
commit c6153ea67d
8 changed files with 90 additions and 31 deletions

View File

@@ -5,6 +5,7 @@ import manager_util
import toml
import os
import asyncio
import json
base_url = "https://api.comfy.org"
@@ -13,33 +14,55 @@ lock = asyncio.Lock()
is_cache_loading = False
async def get_cnr_data(page=1, limit=1000, cache_mode=True, dont_wait=True):
async def get_cnr_data(cache_mode=True, dont_wait=True):
global is_cache_loading
uri = f'{base_url}/nodes?page={page}&limit={limit}'
uri = f'{base_url}/nodes'
def touch(json_obj):
for v in json_obj['nodes']:
async def fetch_all():
remained = True
page = 1
full_nodes = {}
while remained:
sub_uri = f'{base_url}/nodes?page={page}&limit=30'
sub_json_obj = await manager_util.get_data_with_cache(sub_uri, cache_mode=False, silent=True)
remained = page < sub_json_obj['totalPages']
for x in sub_json_obj['nodes']:
full_nodes[x['id']] = x
if page % 5 == 0:
print(f"FETCH ComfyRegistry Data: {page}/{sub_json_obj['totalPages']}")
page += 1
print("FETCH ComfyRegistry Data [DONE]")
for v in full_nodes.values():
if 'latest_version' not in v:
v['latest_version'] = dict(version='nightly')
return {'nodes': list(full_nodes.values())}
if cache_mode:
if dont_wait:
json_obj = await manager_util.get_data_with_cache(uri, cache_mode=cache_mode, dont_wait=True) # fallback
if 'nodes' in json_obj:
touch(json_obj)
return json_obj['nodes']
else:
return {}
is_cache_loading = True
cache_state = manager_util.get_cache_state(uri)
if dont_wait:
if cache_state == 'not-cached':
return {}
else:
print("[ComfyUI-Manager] The ComfyRegistry cache update is still in progress, so an outdated cache is being used.")
with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file:
return json.load(json_file)['nodes']
if cache_state == 'cached':
with open(manager_util.get_cache_path(uri), 'r', encoding="UTF-8", errors="ignore") as json_file:
return json.load(json_file)['nodes']
try:
json_obj = await manager_util.get_data_with_cache(uri, cache_mode=cache_mode)
touch(json_obj)
json_obj = await fetch_all()
manager_util.save_to_cache(uri, json_obj)
return json_obj['nodes']
except:
res = {}