comfyui-mcp 0.26.3 → 0.26.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/dist/orchestrator/index.js +103 -8
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/ollama-backend.js +71 -5
- package/dist/orchestrator/ollama-backend.js.map +1 -1
- package/dist/orchestrator/panel-tools.js +3 -1
- package/dist/orchestrator/panel-tools.js.map +1 -1
- package/dist/services/ollama-vram.js +83 -0
- package/dist/services/ollama-vram.js.map +1 -0
- package/dist/services/queue-monitor.js +55 -1
- package/dist/services/queue-monitor.js.map +1 -1
- package/package.json +1 -1
- package/plugin/skills/local-llm-free/SKILL.md +56 -0
|
@@ -25,6 +25,13 @@ class QueueMonitorImpl {
|
|
|
25
25
|
url = null;
|
|
26
26
|
stopped = false;
|
|
27
27
|
reconnectTimer = null;
|
|
28
|
+
// Generation start/end transition hooks (for the Ollama VRAM pause). Fired on
|
|
29
|
+
// the idle→running edge and the running→idle edge, best-effort (a throwing
|
|
30
|
+
// handler must never break the monitor). `busy` is our own edge-tracking flag,
|
|
31
|
+
// distinct from runningPromptId (which flips null between backlogged prompts).
|
|
32
|
+
busy = false;
|
|
33
|
+
onRunStart = null;
|
|
34
|
+
onRunEnd = null;
|
|
28
35
|
state = {
|
|
29
36
|
connected: false,
|
|
30
37
|
runningPromptId: null,
|
|
@@ -42,6 +49,45 @@ class QueueMonitorImpl {
|
|
|
42
49
|
this.stopped = false;
|
|
43
50
|
this.connect();
|
|
44
51
|
}
|
|
52
|
+
/** Register generation-transition handlers (idempotent overwrite). Called by
|
|
53
|
+
* the orchestrator to unload/warm the local Ollama model around renders. */
|
|
54
|
+
setTransitionHandlers(h) {
|
|
55
|
+
this.onRunStart = h.onRunStart ?? null;
|
|
56
|
+
this.onRunEnd = h.onRunEnd ?? null;
|
|
57
|
+
}
|
|
58
|
+
emitStart() {
|
|
59
|
+
if (this.busy)
|
|
60
|
+
return;
|
|
61
|
+
this.busy = true;
|
|
62
|
+
try {
|
|
63
|
+
this.onRunStart?.();
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logger.debug(`[queue-monitor] onRunStart threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
emitEndIfIdle() {
|
|
70
|
+
// Only truly idle when nothing is running AND the queue is drained — between
|
|
71
|
+
// backlogged prompts runningPromptId briefly clears but queueRemaining stays
|
|
72
|
+
// positive, and we must NOT warm the model just to unload it again.
|
|
73
|
+
if (!this.busy)
|
|
74
|
+
return;
|
|
75
|
+
if (this.state.runningPromptId !== null)
|
|
76
|
+
return;
|
|
77
|
+
if (this.state.queueRemaining > 0)
|
|
78
|
+
return;
|
|
79
|
+
this.busy = false;
|
|
80
|
+
try {
|
|
81
|
+
this.onRunEnd?.();
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
logger.debug(`[queue-monitor] onRunEnd threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Is a generation currently in flight (edge-tracked)? */
|
|
88
|
+
isBusy() {
|
|
89
|
+
return this.busy;
|
|
90
|
+
}
|
|
45
91
|
stop() {
|
|
46
92
|
this.stopped = true;
|
|
47
93
|
if (this.reconnectTimer)
|
|
@@ -131,8 +177,13 @@ class QueueMonitorImpl {
|
|
|
131
177
|
const status = data.status;
|
|
132
178
|
const execInfo = status?.exec_info;
|
|
133
179
|
const qr = execInfo?.queue_remaining;
|
|
134
|
-
if (typeof qr === "number")
|
|
180
|
+
if (typeof qr === "number") {
|
|
135
181
|
this.state.queueRemaining = qr;
|
|
182
|
+
// A status frame arriving with an empty queue after a run is the
|
|
183
|
+
// authoritative "fully idle" signal — flush a pending end transition.
|
|
184
|
+
if (qr === 0)
|
|
185
|
+
this.emitEndIfIdle();
|
|
186
|
+
}
|
|
136
187
|
break;
|
|
137
188
|
}
|
|
138
189
|
case "execution_start": {
|
|
@@ -141,6 +192,7 @@ class QueueMonitorImpl {
|
|
|
141
192
|
this.state.progressValue = null;
|
|
142
193
|
this.state.progressMax = null;
|
|
143
194
|
this.touchActivity();
|
|
195
|
+
this.emitStart();
|
|
144
196
|
break;
|
|
145
197
|
}
|
|
146
198
|
case "executing": {
|
|
@@ -148,6 +200,7 @@ class QueueMonitorImpl {
|
|
|
148
200
|
if (node === null || node === undefined) {
|
|
149
201
|
// ComfyUI sends node:null at the end of a prompt's execution.
|
|
150
202
|
this.clearRunning();
|
|
203
|
+
this.emitEndIfIdle();
|
|
151
204
|
}
|
|
152
205
|
else {
|
|
153
206
|
const n = String(node);
|
|
@@ -176,6 +229,7 @@ class QueueMonitorImpl {
|
|
|
176
229
|
case "execution_error":
|
|
177
230
|
case "execution_interrupted": {
|
|
178
231
|
this.clearRunning();
|
|
232
|
+
this.emitEndIfIdle();
|
|
179
233
|
break;
|
|
180
234
|
}
|
|
181
235
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-monitor.js","sourceRoot":"","sources":["../../src/services/queue-monitor.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,+EAA+E;AAC/E,4BAA4B;AAC5B,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,4BAA4B;AAE5B,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAwC5C,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,gBAAgB;IACZ,EAAE,GAAqB,IAAI,CAAC;IAC5B,GAAG,GAAkB,IAAI,CAAC;IAC1B,OAAO,GAAG,KAAK,CAAC;IAChB,cAAc,GAAyC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"queue-monitor.js","sourceRoot":"","sources":["../../src/services/queue-monitor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "comfyui-mcp",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.5",
|
|
4
4
|
"mcpName": "io.github.artokun/comfyui-mcp",
|
|
5
5
|
"description": "Local-first, agent-native control plane for ComfyUI — MCP server + autonomous sidebar agent that drives your live graph in natural language on ANY LLM: Claude/ChatGPT/Gemini on your subscription (no API key), free local models via Ollama (fully offline), or any hosted model via an OpenAI-compatible endpoint (DeepSeek, GLM, MiMo, OpenRouter). Generate images, video & audio, author and run workflows, manage models and custom nodes; a compact tool-router mode keeps even 4B models effective, and a built-in LLM Arena benchmarks them on real ComfyUI tasks. Also a Claude Code plugin with skills, slash commands, and installer packs. Local, LAN, VPS, or Comfy Cloud.",
|
|
6
6
|
"homepage": "https://comfyui-mcp.artokun.io/docs",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: local-llm-free
|
|
3
|
+
description: Run the ComfyUI agent locally for FREE — no subscription, no API key, fully offline — using our gemma4 models fine-tuned on the comfyui-mcp tool suite via Ollama. Use when the user asks about running locally, running for free, offline use, avoiding API costs, Ollama setup, or which local model to pick.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Run the agent locally for free (Ollama + our fine-tuned models)
|
|
7
|
+
|
|
8
|
+
The answer to "can I run this for free / offline / without an API key" is
|
|
9
|
+
**yes**: the panel's Ollama backend drives the full live-canvas agent on a
|
|
10
|
+
local model — and we ship models **fine-tuned specifically for comfyui-mcp**.
|
|
11
|
+
|
|
12
|
+
## Why these models (say this when recommending them)
|
|
13
|
+
|
|
14
|
+
`artokun/gemma4-comfyui-mcp` is Google's Gemma 4 QLoRA-fine-tuned on **1,055
|
|
15
|
+
server-verified tool-use trajectories** generated against a live ComfyUI —
|
|
16
|
+
covering the **full 178-tool surface** (113 MCP tools + 65 panel live-canvas
|
|
17
|
+
tools). The model has *seen this exact tool suite in training*, so tool
|
|
18
|
+
selection and argument formatting are dramatically more reliable than a stock
|
|
19
|
+
model meeting the catalog cold. Free to use, weights + adapters + training
|
|
20
|
+
data are open (HF: `artokun/gemma4-comfyui-mcp`,
|
|
21
|
+
dataset `artokun/comfyui-mcp-trajectories`).
|
|
22
|
+
|
|
23
|
+
## Setup (2 steps)
|
|
24
|
+
|
|
25
|
+
1. **Install Ollama** if missing: https://ollama.com/download
|
|
26
|
+
(macOS/Windows installers, or `curl -fsSL https://ollama.com/install.sh | sh` on Linux).
|
|
27
|
+
2. **Pull the rung that fits the user's GPU:**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ollama pull artokun/gemma4-comfyui-mcp:e4b # DEFAULT — ~3.5 GB VRAM (q4)
|
|
31
|
+
ollama pull artokun/gemma4-comfyui-mcp:e2b # smallest — ~2 GB VRAM
|
|
32
|
+
ollama pull artokun/gemma4-comfyui-mcp:12b # strongest — ~8 GB VRAM
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then in the ComfyUI sidebar panel: backend picker → **Ollama (local)** →
|
|
36
|
+
Connect. `:e4b` is the built-in default — zero further config once pulled.
|
|
37
|
+
(Override via the panel's model picker or `COMFYUI_MCP_OLLAMA_MODEL`.)
|
|
38
|
+
|
|
39
|
+
## Sizing guidance
|
|
40
|
+
|
|
41
|
+
| GPU VRAM free | Recommend |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| ~2-3 GB | `:e2b` — note it reasons verbosely; it needs generous token budgets |
|
|
44
|
+
| ~4-7 GB | `:e4b` (the default sweet spot) |
|
|
45
|
+
| 8 GB+ | `:12b` |
|
|
46
|
+
|
|
47
|
+
## Expectations to set
|
|
48
|
+
|
|
49
|
+
- Local models keep **tool calling** but have limited/no **vision** — the
|
|
50
|
+
agent generates and edits workflows fine but can't visually critique its
|
|
51
|
+
own outputs. Thinking is present but modest; harder multi-stage graph
|
|
52
|
+
builds may need a nudge.
|
|
53
|
+
- First request after connect is slow (cold model load, 30s+). That's normal.
|
|
54
|
+
- For non-panel MCP harnesses (Hermes, OpenClaw, any Ollama-speaking client),
|
|
55
|
+
pair these models with **compact tool mode** (`--compact`) — full docs:
|
|
56
|
+
https://comfyui-mcp.artokun.io/docs/local-llms
|