✨ Lora Manager Web Frame
Your LoRA library, pinned inside the graph — no second browser tab
If you run ComfyUI for more than a couple of weeks, your LoRA folder turns into a junk drawer: 400 files with names like epicrealism_v7 and best-25-epoch-fixed-2. The community's answer is willmiao/ComfyUI-Lora-Manager, a web UI that browses your LoRA library with CivitAI previews, copies filenames, and tracks recipes. It's genuinely useful - and it lives in a browser tab you keep losing. This node is the fix for that: it embeds the whole Lora Manager interface inside a node on your canvas, so the LoRA browser sits right next to the loader that uses it.
First, the catch that matters: this is a frame, not the manager. It adds zero functionality of its own. If you haven't installed willmiao's extension, the node renders as a dead gray rectangle. Think of it as a picture frame for a tool you already own.
How it works
The Python side is almost insultingly simple. LoraWebFrame declares no inputs, no outputs, and its do_nothing() function literally returns an empty tuple. The node is what ComfyUI calls a display node - it exists so the frontend has something to hang a widget on. All the actual work happens in JavaScript (js/lora_frame_v5.js), which creates a DOM widget containing an <iframe> and points it at the manager's /loras page. Because Lora Manager attaches to your ComfyUI server's own port (8188 by default), the iframe is same-origin, so the manager's CivitAI preview fetches and its API calls work without hitting CORS walls.
The fiddly part - and where the pack's real effort went - is finding the right port. ComfyUI Desktop and multi-instance setups bounce ports around, so the node runs a three-strategy discovery:
- Origin match - check
window.location.origin + /loras, the same trick the manager's own launch button uses. - Server-side scan - a custom endpoint (
/lora-web-frame/scan-port) on your ComfyUI server probes ports 8000–8005 onlocalhostand the request host, then verifies the page actually says "Lora Manager" before trusting it. This bypasses browser CORS. - Client-side brute force - no-cors
fetchprobes as a last resort.
What you actually touch
There's exactly one widget and one button:
- URL - a text field, saved into the workflow JSON, so your custom address survives a save/load. Default is
http://127.0.0.1:8000/loras. - Port Scan - manually re-runs discovery. Click this whenever the frame comes up blank after you've moved something.
That's it. The node has no outputs, so don't wire anything into it - it's a dashboard, not a data source.
Installing it
The base extension first. Install willmiao/ComfyUI-Lora-Manager via ComfyUI Manager (search "Lora Manager"), restart, and confirm http://127.0.0.1:8188/loras opens in your browser before you even touch this pack.
Then, for the frame itself, ComfyUI Manager is easiest - search "Lora Manager Web Frame" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/revisiontony/LoraMangerWebFrame.git
Restart ComfyUI after either. No model downloads, no heavy dependencies: pyproject.toml declares dependencies = [], and the only third-party imports (aiohttp, server) are already bundled with ComfyUI. It's MIT-licensed and ships example workflow JSONs if you want a reference.
Where people get burned
- Blank iframe, always. The manager isn't installed, isn't running, or the frame found the wrong port. Verify the
/loraspage in a browser, then hit Port Scan. - Port outside 8000–8005. Discovery won't find it; type the full address into the URL field. It persists in the workflow.
- Slow first load. The manager's initial CivitAI sync can crawl on big libraries - that's the manager, not this node.
- Remote/HTTPS hosts. The iframe sandbox allows scripts and same-origin but no top-navigation, and browsers won't embed an insecure HTTP iframe from an HTTPS page. Remote works best over the same protocol.
Is it a must-have? No. But if Lora Manager is already part of your routine, pinning it on the canvas is the kind of small convenience that quietly stops a daily annoyance - one fewer tab to lose.
Inputs (0)
No inputs
Outputs (0)
No outputs