fix: corrected fatal bug in __init__.py that cleared model path configurations instead of just the cache
This commit is contained in:
+32
-28
@@ -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"})
|
||||
|
||||
@@ -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"})
|
||||
|
||||
Reference in New Issue
Block a user