fix: corrected fatal bug in __init__.py that cleared model path configurations instead of just the cache

This commit is contained in:
Thomas
2026-05-10 19:14:24 +02:00
parent d21018b42b
commit 80d31992bf
2 changed files with 64 additions and 56 deletions
+32 -28
View File
@@ -13,48 +13,52 @@ async def model_downloaded(request):
try:
# 1. Warte kurz auf das Dateisystem (besonders wichtig unter Windows)
await asyncio.sleep(0.8)
await asyncio.sleep(0.5)
# 2. Alle Caches in folder_paths radikal leeren
# Wir löschen hier wirklich alles, was ComfyUI im RAM behält
if hasattr(folder_paths, "folder_names"):
folder_paths.folder_names.clear()
# 2. Caches in folder_paths löschen
# WICHTIG: Nicht folder_names löschen! Das sind die Konfigurationen der Pfade.
# Wir löschen nur die berechneten Dateilisten (Caches).
if hasattr(folder_paths, "base_path_layers"):
for layer in folder_paths.base_path_layers.values():
if hasattr(layer, "folder_names"):
layer.folder_names.clear()
if hasattr(folder_paths, "filename_list_cache"):
folder_paths.filename_list_cache.clear()
print("[Model-Downloader] filename_list_cache geleert.")
if hasattr(folder_paths, "cache_helper"):
if hasattr(folder_paths.cache_helper, "clear"):
folder_paths.cache_helper.clear()
print("[Model-Downloader] cache_helper geleert.")
if hasattr(folder_paths, "cache"):
folder_paths.cache.clear()
if hasattr(folder_paths.cache, "clear"):
folder_paths.cache.clear()
else:
folder_paths.cache = {}
print("[Model-Downloader] interner folder_paths.cache geleert.")
# 3. Den Definitions-Cache von ComfyUI löschen
# Dies zwingt ComfyUI, die Node-Metadaten (inkl. Modell-Listen) neu zu generieren
server.PromptServer.instance.object_info = None
# 3. Aktiven Scan triggern
# Wir rufen get_filename_list für die wichtigsten Ordner auf
# Dies repopuliert den Cache mit den neuen Dateien von der Platte
folders = ["checkpoints", "loras", "vae", "controlnet", "diffusion_models", "upscale_models",
"clip", "unet", "gligen", "embeddings", "configs", "hypernetworks", "style_models"]
# 4. Aktiven Scan triggern
# Wir rufen get_filename_list für JEDEN bekannten Ordner auf
# Das zwingt das Backend, die Festplatte wirklich neu zu lesen
all_folders = list(folder_paths.folder_names.keys()) if hasattr(folder_paths, "folder_names") else []
# Fallback auf Standardordner falls Liste leer
if not all_folders:
all_folders = ["checkpoints", "loras", "vae", "controlnet", "diffusion_models", "upscale_models",
"clip", "unet", "gligen", "embeddings", "configs", "hypernetworks", "style_models"]
for folder in all_folders:
# Falls folder_names existiert, nehmen wir alle dort registrierten Kategorien
if hasattr(folder_paths, "folder_names"):
folders = list(folder_paths.folder_names.keys())
for folder in folders:
try:
folder_paths.get_filename_list(folder)
except: pass
print(f"[Model-Downloader] Backend-Reset abgeschlossen. {len(all_folders)} Ordner neu indiziert.")
print(f"[Model-Downloader] Backend-Scan abgeschlossen. {len(folders)} Kategorien aktualisiert.")
except Exception as e:
print(f"[Model-Downloader] Fehler beim Reset: {e}")
print(f"[Model-Downloader] Fehler beim Backend-Reset: {e}")
# 5. Signale an alle Browser
# Wir senden mehrere Signale um sicherzugehen, dass alle Extension-Typen reagieren
server.PromptServer.instance.send_sync("refresh_models", {})
# 4. Signale an alle Browser senden
# Wir senden "refresh", was das Standard-Signal für den UI-Reload ist
server.PromptServer.instance.send_sync("refresh", {})
# Und unser spezielles Signal für die JS-Bridge
server.PromptServer.instance.send_sync("kippster-refresh-ui", {"message": "ready"})
return web.json_response({"status": "success", "message": "Backend reset and rescan complete"})
+32 -28
View File
@@ -13,48 +13,52 @@ async def model_downloaded(request):
try:
# 1. Warte kurz auf das Dateisystem (besonders wichtig unter Windows)
await asyncio.sleep(0.8)
await asyncio.sleep(0.5)
# 2. Alle Caches in folder_paths radikal leeren
# Wir löschen hier wirklich alles, was ComfyUI im RAM behält
if hasattr(folder_paths, "folder_names"):
folder_paths.folder_names.clear()
# 2. Caches in folder_paths löschen
# WICHTIG: Nicht folder_names löschen! Das sind die Konfigurationen der Pfade.
# Wir löschen nur die berechneten Dateilisten (Caches).
if hasattr(folder_paths, "base_path_layers"):
for layer in folder_paths.base_path_layers.values():
if hasattr(layer, "folder_names"):
layer.folder_names.clear()
if hasattr(folder_paths, "filename_list_cache"):
folder_paths.filename_list_cache.clear()
print("[Model-Downloader] filename_list_cache geleert.")
if hasattr(folder_paths, "cache_helper"):
if hasattr(folder_paths.cache_helper, "clear"):
folder_paths.cache_helper.clear()
print("[Model-Downloader] cache_helper geleert.")
if hasattr(folder_paths, "cache"):
folder_paths.cache.clear()
if hasattr(folder_paths.cache, "clear"):
folder_paths.cache.clear()
else:
folder_paths.cache = {}
print("[Model-Downloader] interner folder_paths.cache geleert.")
# 3. Den Definitions-Cache von ComfyUI löschen
# Dies zwingt ComfyUI, die Node-Metadaten (inkl. Modell-Listen) neu zu generieren
server.PromptServer.instance.object_info = None
# 3. Aktiven Scan triggern
# Wir rufen get_filename_list für die wichtigsten Ordner auf
# Dies repopuliert den Cache mit den neuen Dateien von der Platte
folders = ["checkpoints", "loras", "vae", "controlnet", "diffusion_models", "upscale_models",
"clip", "unet", "gligen", "embeddings", "configs", "hypernetworks", "style_models"]
# 4. Aktiven Scan triggern
# Wir rufen get_filename_list für JEDEN bekannten Ordner auf
# Das zwingt das Backend, die Festplatte wirklich neu zu lesen
all_folders = list(folder_paths.folder_names.keys()) if hasattr(folder_paths, "folder_names") else []
# Fallback auf Standardordner falls Liste leer
if not all_folders:
all_folders = ["checkpoints", "loras", "vae", "controlnet", "diffusion_models", "upscale_models",
"clip", "unet", "gligen", "embeddings", "configs", "hypernetworks", "style_models"]
for folder in all_folders:
# Falls folder_names existiert, nehmen wir alle dort registrierten Kategorien
if hasattr(folder_paths, "folder_names"):
folders = list(folder_paths.folder_names.keys())
for folder in folders:
try:
folder_paths.get_filename_list(folder)
except: pass
print(f"[Model-Downloader] Backend-Reset abgeschlossen. {len(all_folders)} Ordner neu indiziert.")
print(f"[Model-Downloader] Backend-Scan abgeschlossen. {len(folders)} Kategorien aktualisiert.")
except Exception as e:
print(f"[Model-Downloader] Fehler beim Reset: {e}")
print(f"[Model-Downloader] Fehler beim Backend-Reset: {e}")
# 5. Signale an alle Browser
# Wir senden mehrere Signale um sicherzugehen, dass alle Extension-Typen reagieren
server.PromptServer.instance.send_sync("refresh_models", {})
# 4. Signale an alle Browser senden
# Wir senden "refresh", was das Standard-Signal für den UI-Reload ist
server.PromptServer.instance.send_sync("refresh", {})
# Und unser spezielles Signal für die JS-Bridge
server.PromptServer.instance.send_sync("kippster-refresh-ui", {"message": "ready"})
return web.json_response({"status": "success", "message": "Backend reset and rescan complete"})