Thank you for this report — it is accurate, and the diagnosis is right. On current `main` (v0.52.203) the `panel_set_widget` guard chain in `src/orchestrator/panel-tools.ts` (`refuseKnownBadWidgetWrite` → Anima / LTXDirector / MiniMax / DaSiWa) has no entry for the LoraManager `text` / `loras` pair, so the write lands on the `text` widget, never fires the frontend's text→loras callback, and the receipt reports success while execution reads an empty `loras`. Fail-open, exactly as you describe. **Parking, not fixing.** As of 2026-09-09 this project is no longer maintained (see the README notice)… read the rest
ComfyUI-LoRA-Manager
Author ComfyUI-LoRA-Manager nodes from the panel.
How to install
- Setup differs for this server — follow the Installation part of the README below.
- Claude Code:
claude mcp add <name> -- <command>. - Claude Desktop / Cursor: add it under
mcpServersin the MCP config file.
npx degit artokun/comfyui-mcp/plugin/skills/lora-manager#main ~/.claude/skills/lora-managerFor one project only, change the path to .claude/skills/lora-manager.
This one runs on your machine and can reach your files. Read the README below before you connect it.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text65 lines
ComfyUI-LoRA-Manager
ComfyUI-LoRA-Manager (willmiao)
registers Vue autocomplete widgets via getCustomWidgets(). Those widgets
are healthy in the ComfyUI menu, and drag-from-palette works, but panel_add_node
cannot add the nodes that require them.
The add-node guard polls app.widgets for a constructor. ComfyUI 1.49+ stores
getCustomWidgets() results in the frontend widget store, not on app.widgets.
The wait always expires after 5s. Reload, panel_refresh_nodes, and retry
cannot clear it. That refusal is not a missing pack.
Which nodes panel_add_node will actually add
| Works | Refuses (AUTOCOMPLETE_TEXT_*) |
|---|---|
LoRA Text Loader (LoraManager) |
Lora Loader (LoraManager) |
core LoraLoader |
Lora Stacker (LoraManager) |
core LoraLoaderModelOnly |
WanVideo Lora Select (LoraManager) |
Text (LoraManager) |
|
Prompt (LoraManager) |
LoRA Text Loader (LoraManager) is the same backend as Lora Loader (LoraManager) (MODEL / CLIP / trigger_words / loaded_loras). The difference
is the LoRA input: lora_syntax is a STRING socket (forceInput), so a
regular string node or panel_set_widget can drive it.
Syntax (spaces or punctuation between entries):
<lora:lora_name:strength>
<lora:lora_name:model_strength:clip_strength>
Recipe — stack a LoRA from the panel
panel_add_node(class_type="LoRA Text Loader (LoraManager)"). Do not addLora Loader (LoraManager); it will wait 5s and refuse.- Wire
MODEL(andCLIPif you have one) through it. - Drive
lora_syntaxwithpanel_set_widgetor a wired STRING, e.g.<lora:style/foo.safetensors:0.8>. - Put the node's
trigger_wordsoutput into the prompt if the sidecar has any.
If LoRA Manager is not installed, use core LoraLoader and set lora_name /
strength_model / strength_clip as usual.
Gotchas
- The refusal names a tab reload. Do not follow that. The constructor will
never appear on
app.widgets. panel_set_widgetontextafter a refused add never runs, because nothing was created. The working widget name islora_syntax.- A freshly added Text Loader still needs
lora_syntaxwritten; an empty string loads no LoRA.
Sources
- Official: https://github.com/willmiao/ComfyUI-Lora-Manager for node class names and the
lora_syntaxformat from the pack; no vendor panel-authoring guide exists. - Empirical: the
panel_add_nodeAUTOCOMPLETE_TEXT_* refusal, which nodes add cleanly, and the widget-store explanation from observed panel behavior in this repo.
| 1 | |
| 2 | name lora-manager |
| 3 | description Author ComfyUI-LoRA-Manager nodes from the panel. Use when adding a LoRA Manager loader, stacker, prompt, or text node, or when panel_add_node refuses AUTOCOMPLETE_TEXT_LORAS / AUTOCOMPLETE_TEXT_PROMPT after waiting for a widget. |
| 4 | |
| 5 | |
| 6 | # ComfyUI-LoRA-Manager |
| 7 | |
| 8 | [ComfyUI-LoRA-Manager] (willmiao) |
| 9 | registers Vue autocomplete widgets via `getCustomWidgets()`. Those widgets |
| 10 | are healthy in the ComfyUI menu, and drag-from-palette works, but **`panel_add_node` |
| 11 | cannot add the nodes that require them**. |
| 12 | |
| 13 | The add-node guard polls `app.widgets` for a constructor. ComfyUI 1.49+ stores |
| 14 | `getCustomWidgets()` results in the frontend widget store, not on `app.widgets`. |
| 15 | The wait always expires after 5s. Reload, `panel_refresh_nodes`, and retry |
| 16 | **cannot** clear it. That refusal is not a missing pack. |
| 17 | |
| 18 | ## Which nodes `panel_add_node` will actually add |
| 19 | |
| 20 | | Works | Refuses (AUTOCOMPLETE_TEXT_*) | |
| 21 | |---|---| |
| 22 | | `LoRA Text Loader (LoraManager)` | `Lora Loader (LoraManager)` | |
| 23 | | core `LoraLoader` | `Lora Stacker (LoraManager)` | |
| 24 | | core `LoraLoaderModelOnly` | `WanVideo Lora Select (LoraManager)` | |
| 25 | | | `Text (LoraManager)` | |
| 26 | | | `Prompt (LoraManager)` | |
| 27 | |
| 28 | `LoRA Text Loader (LoraManager)` is the same backend as `Lora Loader |
| 29 | (LoraManager)` (MODEL / CLIP / `trigger_words` / `loaded_loras`). The difference |
| 30 | is the LoRA input: `lora_syntax` is a **STRING socket** (`forceInput`), so a |
| 31 | regular string node or `panel_set_widget` can drive it. |
| 32 | |
| 33 | Syntax (spaces or punctuation between entries): |
| 34 | |
| 35 | |
| 36 | <lora:lora_name:strength> |
| 37 | <lora:lora_name:model_strength:clip_strength> |
| 38 | |
| 39 | |
| 40 | ## Recipe — stack a LoRA from the panel |
| 41 | |
| 42 | `panel_add_node(class_type="LoRA Text Loader (LoraManager)")`. Do **not** add |
| 43 | `Lora Loader (LoraManager)`; it will wait 5s and refuse. |
| 44 | Wire `MODEL` (and `CLIP` if you have one) through it. |
| 45 | Drive `lora_syntax` with `panel_set_widget` or a wired STRING, e.g. |
| 46 | `<lora:style/foo.safetensors:0.8>`. |
| 47 | Put the node's `trigger_words` output into the prompt if the sidecar has any. |
| 48 | |
| 49 | If LoRA Manager is not installed, use core `LoraLoader` and set `lora_name` / |
| 50 | `strength_model` / `strength_clip` as usual. |
| 51 | |
| 52 | ## Gotchas |
| 53 | |
| 54 | The refusal names a tab reload. **Do not follow that.** The constructor will |
| 55 | never appear on `app.widgets`. |
| 56 | `panel_set_widget` on `text` after a refused add never runs, because nothing |
| 57 | was created. The working widget name is `lora_syntax`. |
| 58 | A freshly added Text Loader still needs `lora_syntax` written; an empty |
| 59 | string loads no LoRA. |
| 60 | |
| 61 | ## Sources |
| 62 | |
| 63 | **Official:** https://github.com/willmiao/ComfyUI-Lora-Manager for node class names and the `lora_syntax` format from the pack; no vendor panel-authoring guide exists. |
| 64 | **Empirical:** the `panel_add_node` AUTOCOMPLETE_TEXT_* refusal, which nodes add cleanly, and the widget-store explanation from observed panel behavior in this repo. |
| 65 |