ComfyUI-LoRA-Manager

Author ComfyUI-LoRA-Manager nodes from the panel.

How to install

How to install

  1. Setup differs for this server — follow the Installation part of the README below.
  2. Claude Code: claude mcp add <name> -- <command>.
  3. Claude Desktop / Cursor: add it under mcpServers in the MCP config file.
Claude Code — installs the whole folder, not just SKILL.md
npx degit artokun/comfyui-mcp/plugin/skills/lora-manager#main ~/.claude/skills/lora-manager

For 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.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text65 lines
lora-manager/SKILL.md65 lines2.8 KBpushed 27d agoRawView on GitHub

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

  1. panel_add_node(class_type="LoRA Text Loader (LoraManager)"). Do not add Lora Loader (LoraManager); it will wait 5s and refuse.
  2. Wire MODEL (and CLIP if you have one) through it.
  3. Drive lora_syntax with panel_set_widget or a wired STRING, e.g. <lora:style/foo.safetensors:0.8>.
  4. Put the node's trigger_words output 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_widget on text after a refused add never runs, because nothing was created. The working widget name is lora_syntax.
  • A freshly added Text Loader still needs lora_syntax written; an empty string loads no LoRA.

Sources

  • 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.
  • Empirical: the panel_add_node AUTOCOMPLETE_TEXT_* refusal, which nodes add cleanly, and the widget-store explanation from observed panel behavior in this repo.
1---
2name: lora-manager
3description: 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](https://github.com/willmiao/ComfyUI-Lora-Manager) (willmiao)
9registers Vue autocomplete widgets via `getCustomWidgets()`. Those widgets
10are healthy in the ComfyUI menu, and drag-from-palette works, but **`panel_add_node`
11cannot add the nodes that require them**.
12 
13The 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`.
15The 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
30is the LoRA input: `lora_syntax` is a **STRING socket** (`forceInput`), so a
31regular string node or `panel_set_widget` can drive it.
32 
33Syntax (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 
421. `panel_add_node(class_type="LoRA Text Loader (LoraManager)")`. Do **not** add
43 `Lora Loader (LoraManager)`; it will wait 5s and refuse.
442. Wire `MODEL` (and `CLIP` if you have one) through it.
453. Drive `lora_syntax` with `panel_set_widget` or a wired STRING, e.g.
46 `<lora:style/foo.safetensors:0.8>`.
474. Put the node's `trigger_words` output into the prompt if the sidecar has any.
48 
49If 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 

Discussion

From GitHub

1 comment on 1 thread

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

Alternatives

Also in Illustration & art