fix: improve ComfyUI bridge refresh by moving delay to backend and ensuring clean frontend refresh

This commit is contained in:
Thomas Kippster
2026-05-11 15:10:57 +02:00
parent a518bead11
commit fc1e963660
2 changed files with 13 additions and 15 deletions
@@ -2,6 +2,7 @@
import server
import folder_paths
import os
import asyncio
from aiohttp import web
print("\033[95m[Model-Downloader] UI Extension Bridge active\033[0m")
@@ -16,9 +17,11 @@ if os.path.exists(USER_MODEL_PATH):
async def model_downloaded(request):
print("\033[92m🔥 [Model-Downloader] PING ERHALTEN! Bereite UI-Refresh vor...\033[0m")
# 1. Dem Dateisystem Zeit geben, BEVOR wir den Cache leeren!
await asyncio.sleep(2)
try:
# 1. Wir löschen nur die Caches, machen aber KEINEN eigenen Scan mehr!
# Das verhindert, dass wir einen noch unfertigen Windows-Ordner scannen und den Fehler cachen.
# 2. Erst jetzt die Caches leeren, wenn die Datei sicher im OS registriert ist
if hasattr(folder_paths, "filename_list_cache"):
folder_paths.filename_list_cache.clear()
@@ -28,13 +31,13 @@ async def model_downloaded(request):
if hasattr(folder_paths, "cache") and hasattr(folder_paths.cache, "clear"):
folder_paths.cache.clear()
# 2. Object Info zurücksetzen (zwingt ComfyUI beim nächsten UI-Klick zum Neuladen)
# Object Info zurücksetzen (zwingt ComfyUI beim nächsten UI-Klick zum Neuladen)
server.PromptServer.instance.object_info = None
except Exception as e:
print(f"[Model-Downloader] Fehler beim Cache-Reset: {e}")
# 3. Signal an das Frontend senden
# 3. Signal an das Frontend senden (jetzt ist der Cache wirklich leer und das OS bereit!)
server.PromptServer.instance.send_sync("kippster-refresh-ui", {"message": "ready"})
return web.json_response({"status": "success"})
@@ -12,7 +12,7 @@ const initializeExtension = async () => {
api.addEventListener("kippster-refresh-ui", async (event) => {
console.log("%c🔥 [Model-Downloader] SIGNAL ERHALTEN! Starte Refresh-Sequenz...", "background: #ff0000; color: #fff; font-size: 14px;");
try {
const showToast = (text) => {
const toast = document.createElement("div");
@@ -21,24 +21,19 @@ const initializeExtension = async () => {
document.body.appendChild(toast);
setTimeout(() => { toast.style.opacity = "0"; setTimeout(() => document.body.removeChild(toast), 500); }, 3000);
};
showToast("🔄 Sync: Warte auf Windows-Dateisystem...");
// WICHTIG: 2 Sekunden warten!
// Windows braucht einen Moment, um die Ordner-Indizes nach dem Verschieben/Entpacken zu aktualisieren.
await new Promise(r => setTimeout(r, 2000));
showToast("🔄 Führe 'Refresh Node Definitions' aus...");
// ComfyUI Frontend-Cache leeren
api.nodeDefs = null;
// Den originalen Refresh-Befehl von ComfyUI ausführen (exakt wie der manuelle Klick)
// Den originalen Refresh-Befehl von ComfyUI ausführen
if (app.refresh) {
await app.refresh();
await app.refresh(); // Wichtig: Erst abwarten, bis das Backend die neuen Daten gesendet hat!
}
// Fallback: Bereits gerenderte Dropdowns zwingen, die neuen Werte zu fressen und rote Nodes zu heilen
// Fallback: Bereits gerenderte Dropdowns zwingen
let healedCount = 0;
if (app.graph && app.graph._nodes) {
const nodeDefs = await api.getNodeDefs();