comfyui-mcp 0.7.0 → 0.8.1
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/CHANGELOG.md +90 -0
- package/CONTRIBUTING.md +137 -0
- package/README.md +17 -4
- package/ROADMAP.md +15 -0
- package/design/remote-and-cloud-modes.md +113 -0
- package/dist/services/download-auth.d.ts +7 -0
- package/dist/services/download-auth.d.ts.map +1 -1
- package/dist/services/download-auth.js +26 -1
- package/dist/services/download-auth.js.map +1 -1
- package/dist/services/download-cache.d.ts +3 -1
- package/dist/services/download-cache.d.ts.map +1 -1
- package/dist/services/download-cache.js +45 -9
- package/dist/services/download-cache.js.map +1 -1
- package/dist/services/health-check.d.ts +6 -0
- package/dist/services/health-check.d.ts.map +1 -0
- package/dist/services/health-check.js +103 -0
- package/dist/services/health-check.js.map +1 -0
- package/dist/services/image-convert.d.ts +29 -0
- package/dist/services/image-convert.d.ts.map +1 -0
- package/dist/services/image-convert.js +218 -0
- package/dist/services/image-convert.js.map +1 -0
- package/dist/services/manifest.d.ts +63 -0
- package/dist/services/manifest.d.ts.map +1 -0
- package/dist/services/manifest.js +333 -0
- package/dist/services/manifest.js.map +1 -0
- package/dist/services/model-resolver.d.ts.map +1 -1
- package/dist/services/model-resolver.js +7 -1
- package/dist/services/model-resolver.js.map +1 -1
- package/dist/services/node-authoring.d.ts +5 -0
- package/dist/services/node-authoring.d.ts.map +1 -1
- package/dist/services/node-authoring.js +56 -0
- package/dist/services/node-authoring.js.map +1 -1
- package/dist/services/node-verify.d.ts +35 -0
- package/dist/services/node-verify.d.ts.map +1 -0
- package/dist/services/node-verify.js +138 -0
- package/dist/services/node-verify.js.map +1 -0
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +53 -7
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/skill-cache.d.ts +26 -0
- package/dist/services/skill-cache.d.ts.map +1 -0
- package/dist/services/skill-cache.js +172 -0
- package/dist/services/skill-cache.js.map +1 -0
- package/dist/services/storage/azure-blob.d.ts +8 -0
- package/dist/services/storage/azure-blob.d.ts.map +1 -0
- package/dist/services/storage/azure-blob.js +146 -0
- package/dist/services/storage/azure-blob.js.map +1 -0
- package/dist/services/storage/hf.d.ts +7 -0
- package/dist/services/storage/hf.d.ts.map +1 -0
- package/dist/services/storage/hf.js +80 -0
- package/dist/services/storage/hf.js.map +1 -0
- package/dist/services/storage/http.d.ts +6 -0
- package/dist/services/storage/http.d.ts.map +1 -0
- package/dist/services/storage/http.js +41 -0
- package/dist/services/storage/http.js.map +1 -0
- package/dist/services/storage/index.d.ts +28 -0
- package/dist/services/storage/index.d.ts.map +1 -0
- package/dist/services/storage/index.js +42 -0
- package/dist/services/storage/index.js.map +1 -0
- package/dist/services/storage/s3.d.ts +12 -0
- package/dist/services/storage/s3.d.ts.map +1 -0
- package/dist/services/storage/s3.js +84 -0
- package/dist/services/storage/s3.js.map +1 -0
- package/dist/services/storage/types.d.ts +22 -0
- package/dist/services/storage/types.d.ts.map +1 -0
- package/dist/services/storage/types.js +2 -0
- package/dist/services/storage/types.js.map +1 -0
- package/dist/services/storage/utils.d.ts +6 -0
- package/dist/services/storage/utils.d.ts.map +1 -0
- package/dist/services/storage/utils.js +39 -0
- package/dist/services/storage/utils.js.map +1 -0
- package/dist/services/storage-upload.d.ts +18 -0
- package/dist/services/storage-upload.d.ts.map +1 -0
- package/dist/services/storage-upload.js +121 -0
- package/dist/services/storage-upload.js.map +1 -0
- package/dist/tools/health-check.d.ts +3 -0
- package/dist/tools/health-check.d.ts.map +1 -0
- package/dist/tools/health-check.js +30 -0
- package/dist/tools/health-check.js.map +1 -0
- package/dist/tools/image-convert.d.ts +3 -0
- package/dist/tools/image-convert.d.ts.map +1 -0
- package/dist/tools/image-convert.js +58 -0
- package/dist/tools/image-convert.js.map +1 -0
- package/dist/tools/image-management.d.ts.map +1 -1
- package/dist/tools/image-management.js +27 -83
- package/dist/tools/image-management.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/manifest.d.ts +3 -0
- package/dist/tools/manifest.d.ts.map +1 -0
- package/dist/tools/manifest.js +25 -0
- package/dist/tools/manifest.js.map +1 -0
- package/dist/tools/model-management.d.ts.map +1 -1
- package/dist/tools/model-management.js +9 -1
- package/dist/tools/model-management.js.map +1 -1
- package/dist/tools/node-authoring.d.ts.map +1 -1
- package/dist/tools/node-authoring.js +8 -2
- package/dist/tools/node-authoring.js.map +1 -1
- package/dist/tools/node-verify.d.ts +3 -0
- package/dist/tools/node-verify.d.ts.map +1 -0
- package/dist/tools/node-verify.js +42 -0
- package/dist/tools/node-verify.js.map +1 -0
- package/dist/tools/skill-generator.d.ts.map +1 -1
- package/dist/tools/skill-generator.js +16 -3
- package/dist/tools/skill-generator.js.map +1 -1
- package/dist/tools/storage-upload.d.ts +3 -0
- package/dist/tools/storage-upload.d.ts.map +1 -0
- package/dist/tools/storage-upload.js +57 -0
- package/dist/tools/storage-upload.js.map +1 -0
- package/package.json +11 -1
- package/scripts/gen-tool-docs.ts +7 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-cache.js","sourceRoot":"","sources":["../../src/services/download-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,EAAE,EACF,IAAI,EACJ,MAAM,GACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"download-cache.js","sourceRoot":"","sources":["../../src/services/download-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check.d.ts","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,cAAc,CAClC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAgGjB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Aggregate pre-flight health check for a connected ComfyUI instance.
|
|
2
|
+
//
|
|
3
|
+
// Originally contributed by João Lucas (github.com/joaolvivas) in
|
|
4
|
+
// joaolvivas/comfyui-mcp-byjlucas@de82ecda (2026-05-12). Refactored to
|
|
5
|
+
// match this repo's service/tool split.
|
|
6
|
+
import { ConnectionError } from "../utils/errors.js";
|
|
7
|
+
import { getClient, getQueue, getSystemStats } from "../comfyui/client.js";
|
|
8
|
+
const CRITICAL_MODEL_CATS = [
|
|
9
|
+
"checkpoints",
|
|
10
|
+
"diffusion_models",
|
|
11
|
+
"loras",
|
|
12
|
+
"vae",
|
|
13
|
+
"text_encoders",
|
|
14
|
+
"controlnet",
|
|
15
|
+
];
|
|
16
|
+
export async function runHealthCheck(options = {}) {
|
|
17
|
+
const categories = options.modelCategories ?? [...CRITICAL_MODEL_CATS];
|
|
18
|
+
const recentErrors = options.recentErrors ?? 20;
|
|
19
|
+
const lines = ["## Health Check\n"];
|
|
20
|
+
try {
|
|
21
|
+
const stats = (await getSystemStats());
|
|
22
|
+
const sys = stats.system ?? {};
|
|
23
|
+
const dev = stats.devices?.[0] ?? {};
|
|
24
|
+
const vramTotalGB = dev.vram_total
|
|
25
|
+
? (dev.vram_total / 1024 ** 3).toFixed(1)
|
|
26
|
+
: "?";
|
|
27
|
+
const vramFreeGB = dev.vram_free
|
|
28
|
+
? (dev.vram_free / 1024 ** 3).toFixed(1)
|
|
29
|
+
: "?";
|
|
30
|
+
const ramFreeGB = sys.ram_free
|
|
31
|
+
? (sys.ram_free / 1024 ** 3).toFixed(1)
|
|
32
|
+
: "?";
|
|
33
|
+
lines.push(`**ComfyUI**: ${sys.comfyui_version ?? "?"} | ` +
|
|
34
|
+
`Python ${(sys.python_version ?? "").split(" ")[0] || "?"} | ` +
|
|
35
|
+
`PyTorch ${sys.pytorch_version ?? "?"}`);
|
|
36
|
+
lines.push(`**GPU**: ${dev.name ?? "?"} | VRAM free ${vramFreeGB}/${vramTotalGB} GB | RAM free ${ramFreeGB} GB`);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
throw new ConnectionError(`ComfyUI unreachable: ${err instanceof Error ? err.message : err}`);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const q = await getQueue();
|
|
43
|
+
const running = q.queue_running?.length ?? 0;
|
|
44
|
+
const pending = q.queue_pending?.length ?? 0;
|
|
45
|
+
lines.push(`**Queue**: ${running} running, ${pending} pending`);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
lines.push(`**Queue**: ERROR — ${err instanceof Error ? err.message : err}`);
|
|
49
|
+
}
|
|
50
|
+
const client = getClient();
|
|
51
|
+
const modelLines = [];
|
|
52
|
+
let totalModelsSeen = 0;
|
|
53
|
+
for (const cat of categories) {
|
|
54
|
+
try {
|
|
55
|
+
const res = await client.fetchApi(`/models/${cat}`);
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
modelLines.push(`- ${cat}: REST ${res.status}`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const files = (await res.json());
|
|
61
|
+
const count = Array.isArray(files) ? files.length : 0;
|
|
62
|
+
totalModelsSeen += count;
|
|
63
|
+
if (count === 0) {
|
|
64
|
+
modelLines.push(`- ${cat}: **EMPTY** ⚠️ (check extra_model_paths.yaml)`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const preview = files.slice(0, 3).join(", ");
|
|
68
|
+
const more = count > 3 ? ` (+${count - 3} more)` : "";
|
|
69
|
+
modelLines.push(`- ${cat}: ${count} — ${preview}${more}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
modelLines.push(`- ${cat}: ERROR — ${err instanceof Error ? err.message : err}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
lines.push(`\n**Models** (${totalModelsSeen} total across ${categories.length} categories):`);
|
|
77
|
+
lines.push(...modelLines);
|
|
78
|
+
// Recent custom-node errors from /internal/logs (best-effort; older
|
|
79
|
+
// ComfyUI versions and remote-only deployments may not expose it).
|
|
80
|
+
try {
|
|
81
|
+
const res = await client.fetchApi("/internal/logs");
|
|
82
|
+
if (res.ok) {
|
|
83
|
+
const text = await res.text();
|
|
84
|
+
const errLines = text
|
|
85
|
+
.split("\n")
|
|
86
|
+
.filter((l) => /traceback|error|exception/i.test(l))
|
|
87
|
+
.slice(-recentErrors);
|
|
88
|
+
if (errLines.length > 0) {
|
|
89
|
+
lines.push(`\n**Recent errors** (last ${errLines.length}):`);
|
|
90
|
+
for (const e of errLines)
|
|
91
|
+
lines.push(` ${e.trim()}`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
lines.push(`\n**Recent errors**: none in /internal/logs`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Logs endpoint unavailable — silent.
|
|
100
|
+
}
|
|
101
|
+
return lines.join("\n");
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=health-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/services/health-check.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,kEAAkE;AAClE,uEAAuE;AACvE,wCAAwC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,mBAAmB,GAAG;IAC1B,aAAa;IACb,kBAAkB;IAClB,OAAO;IACP,KAAK;IACL,eAAe;IACf,YAAY;CACJ,CAAC;AAOX,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAA8B,EAAE;IAEhC,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAChD,MAAM,KAAK,GAAa,CAAC,mBAAmB,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,MAAM,cAAc,EAAE,CAAmC,CAAC;QACzE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU;YAChC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS;YAC9B,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ;YAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,GAAG,CAAC;QACR,KAAK,CAAC,IAAI,CACR,gBAAgB,GAAG,CAAC,eAAe,IAAI,GAAG,KAAK;YAC7C,UAAU,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK;YAC9D,WAAW,GAAG,CAAC,eAAe,IAAI,GAAG,EAAE,CAC1C,CAAC;QACF,KAAK,CAAC,IAAI,CACR,YAAY,GAAG,CAAC,IAAI,IAAI,GAAG,gBAAgB,UAAU,IAAI,WAAW,kBAAkB,SAAS,KAAK,CACrG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,aAAa,OAAO,UAAU,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CACR,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;YAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,eAAe,IAAI,KAAK,CAAC;YACzB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,UAAU,CAAC,IAAI,CACb,KAAK,GAAG,+CAA+C,CACxD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAI,KAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CACb,KAAK,GAAG,aAAa,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAChE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,iBAAiB,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IAE1B,oEAAoE;IACpE,mEAAmE;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,IAAI;iBAClB,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACnD,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ConvertImageFormat = "png" | "jpeg" | "webp";
|
|
2
|
+
export interface ConvertImageOptions {
|
|
3
|
+
asset_id?: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
format: ConvertImageFormat;
|
|
6
|
+
quality?: number;
|
|
7
|
+
progressive?: boolean;
|
|
8
|
+
lossless?: boolean;
|
|
9
|
+
effort?: number;
|
|
10
|
+
out_path?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConvertImageResult {
|
|
13
|
+
content: Array<{
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
} | {
|
|
17
|
+
type: "image";
|
|
18
|
+
data: string;
|
|
19
|
+
mimeType: string;
|
|
20
|
+
}>;
|
|
21
|
+
format: ConvertImageFormat;
|
|
22
|
+
mimeType: string;
|
|
23
|
+
sourceBytes: number;
|
|
24
|
+
outputBytes: number;
|
|
25
|
+
bytesSaved: number;
|
|
26
|
+
outPath?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function convertImage(opts: ConvertImageOptions): Promise<ConvertImageResult>;
|
|
29
|
+
//# sourceMappingURL=image-convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-convert.d.ts","sourceRoot":"","sources":["../../src/services/image-convert.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CACV;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC9B;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CACpD,CAAC;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA4ND,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { lstat, mkdir, readFile, realpath, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import sharp from "sharp";
|
|
4
|
+
import { config } from "../config.js";
|
|
5
|
+
import { AssetRegistry } from "./asset-registry.js";
|
|
6
|
+
import { getOutputImage } from "./image-management.js";
|
|
7
|
+
import { ValidationError } from "../utils/errors.js";
|
|
8
|
+
const MIME_BY_FORMAT = {
|
|
9
|
+
png: "image/png",
|
|
10
|
+
jpeg: "image/jpeg",
|
|
11
|
+
webp: "image/webp",
|
|
12
|
+
};
|
|
13
|
+
const SUPPORTED_SOURCE_MIME = /^image\/(png|jpe?g|webp)$/i;
|
|
14
|
+
const DEFAULT_MAX_SOURCE_BYTES = 64 * 1024 * 1024;
|
|
15
|
+
const DEFAULT_LIMIT_INPUT_PIXELS = 100_000_000;
|
|
16
|
+
function getOutputDir() {
|
|
17
|
+
if (!config.comfyuiPath) {
|
|
18
|
+
throw new ValidationError("COMFYUI_PATH is not configured. Set the COMFYUI_PATH environment variable.");
|
|
19
|
+
}
|
|
20
|
+
return resolve(config.comfyuiPath, "output");
|
|
21
|
+
}
|
|
22
|
+
function parsePositiveIntEnv(name, fallback) {
|
|
23
|
+
const raw = process.env[name];
|
|
24
|
+
if (raw === undefined || raw.trim() === "")
|
|
25
|
+
return fallback;
|
|
26
|
+
const parsed = Number(raw);
|
|
27
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback;
|
|
28
|
+
}
|
|
29
|
+
function maxSourceBytes() {
|
|
30
|
+
return parsePositiveIntEnv("COMFYUI_CONVERT_IMAGE_MAX_SOURCE_BYTES", DEFAULT_MAX_SOURCE_BYTES);
|
|
31
|
+
}
|
|
32
|
+
function limitInputPixels() {
|
|
33
|
+
return parsePositiveIntEnv("COMFYUI_CONVERT_IMAGE_LIMIT_INPUT_PIXELS", DEFAULT_LIMIT_INPUT_PIXELS);
|
|
34
|
+
}
|
|
35
|
+
function resolveOutputPath(path, label) {
|
|
36
|
+
if (path.trim().length === 0) {
|
|
37
|
+
throw new ValidationError(`${label} must be a non-empty path.`);
|
|
38
|
+
}
|
|
39
|
+
const outputDir = getOutputDir();
|
|
40
|
+
const resolved = isAbsolute(path) ? resolve(path) : resolve(outputDir, path);
|
|
41
|
+
if (resolved === outputDir || !resolved.startsWith(outputDir + sep)) {
|
|
42
|
+
throw new ValidationError(`${label} must stay within the ComfyUI output directory.`);
|
|
43
|
+
}
|
|
44
|
+
return resolved;
|
|
45
|
+
}
|
|
46
|
+
async function realOutputRoot() {
|
|
47
|
+
return realpath(getOutputDir());
|
|
48
|
+
}
|
|
49
|
+
function isInsideOrEqual(root, candidate) {
|
|
50
|
+
const rel = relative(root, candidate);
|
|
51
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
52
|
+
}
|
|
53
|
+
function assertInsideRealOutputDir(root, candidate, label, opts = {}) {
|
|
54
|
+
if (!isInsideOrEqual(root, candidate) || (!opts.allowRoot && candidate === root)) {
|
|
55
|
+
throw new ValidationError(`${label} must stay within the ComfyUI output directory.`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function validateExistingOutputAncestors(root, parent, label) {
|
|
59
|
+
const outputDir = getOutputDir();
|
|
60
|
+
let cursor = parent;
|
|
61
|
+
while (cursor !== outputDir && cursor.startsWith(outputDir + sep)) {
|
|
62
|
+
try {
|
|
63
|
+
const info = await lstat(cursor);
|
|
64
|
+
if (info.isSymbolicLink()) {
|
|
65
|
+
const realCursor = await realpath(cursor);
|
|
66
|
+
assertInsideRealOutputDir(root, realCursor, label, { allowRoot: true });
|
|
67
|
+
}
|
|
68
|
+
else if (!info.isDirectory()) {
|
|
69
|
+
throw new ValidationError(`${label} parent is not a directory: ${cursor}`);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (err instanceof ValidationError)
|
|
75
|
+
throw err;
|
|
76
|
+
cursor = dirname(cursor);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function resolveSourcePath(path) {
|
|
81
|
+
const lexicalPath = resolveOutputPath(path, "path");
|
|
82
|
+
const root = await realOutputRoot();
|
|
83
|
+
const sourcePath = await realpath(lexicalPath).catch(() => undefined);
|
|
84
|
+
if (!sourcePath) {
|
|
85
|
+
throw new ValidationError(`Source image not found: ${lexicalPath}`);
|
|
86
|
+
}
|
|
87
|
+
assertInsideRealOutputDir(root, sourcePath, "path");
|
|
88
|
+
const info = await stat(sourcePath).catch(() => undefined);
|
|
89
|
+
if (!info?.isFile()) {
|
|
90
|
+
throw new ValidationError(`Source image not found: ${sourcePath}`);
|
|
91
|
+
}
|
|
92
|
+
const maxBytes = maxSourceBytes();
|
|
93
|
+
if (info.size > maxBytes) {
|
|
94
|
+
throw new ValidationError(`Source image is too large (${info.size} bytes). Maximum is ${maxBytes} bytes.`);
|
|
95
|
+
}
|
|
96
|
+
return { path: sourcePath, size: info.size };
|
|
97
|
+
}
|
|
98
|
+
async function resolveWritableOutputPath(path) {
|
|
99
|
+
const targetPath = resolveOutputPath(path, "out_path");
|
|
100
|
+
const root = await realOutputRoot();
|
|
101
|
+
const parent = dirname(targetPath);
|
|
102
|
+
await validateExistingOutputAncestors(root, parent, "out_path");
|
|
103
|
+
await mkdir(parent, { recursive: true });
|
|
104
|
+
const realParent = await realpath(parent);
|
|
105
|
+
assertInsideRealOutputDir(root, realParent, "out_path", { allowRoot: true });
|
|
106
|
+
try {
|
|
107
|
+
const info = await lstat(targetPath);
|
|
108
|
+
if (info.isSymbolicLink()) {
|
|
109
|
+
const realTarget = await realpath(targetPath);
|
|
110
|
+
assertInsideRealOutputDir(root, realTarget, "out_path");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (err instanceof ValidationError)
|
|
115
|
+
throw err;
|
|
116
|
+
// Missing target is fine; writeFile will create it.
|
|
117
|
+
}
|
|
118
|
+
return targetPath;
|
|
119
|
+
}
|
|
120
|
+
async function resolveSource(opts) {
|
|
121
|
+
if (opts.asset_id) {
|
|
122
|
+
const record = AssetRegistry.get(opts.asset_id);
|
|
123
|
+
if (!record) {
|
|
124
|
+
throw new ValidationError(`No asset found for id "${opts.asset_id}". It may have expired or never been registered.`);
|
|
125
|
+
}
|
|
126
|
+
const validType = record.type === "output" || record.type === "input" || record.type === "temp";
|
|
127
|
+
const fetchType = validType
|
|
128
|
+
? record.type
|
|
129
|
+
: "output";
|
|
130
|
+
const image = await getOutputImage(record.filename, fetchType, record.subfolder);
|
|
131
|
+
if (!SUPPORTED_SOURCE_MIME.test(image.mimeType)) {
|
|
132
|
+
throw new ValidationError(`Asset "${opts.asset_id}" is not a supported image (mime: ${image.mimeType}).`);
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
label: `asset ${opts.asset_id} (${record.filename})`,
|
|
136
|
+
bytes: Buffer.from(image.base64, "base64"),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (!opts.path) {
|
|
140
|
+
throw new ValidationError("convert_image requires either asset_id or path.");
|
|
141
|
+
}
|
|
142
|
+
const source = await resolveSourcePath(opts.path);
|
|
143
|
+
return {
|
|
144
|
+
label: source.path,
|
|
145
|
+
bytes: await readFile(source.path),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function buildEncoder(input, opts) {
|
|
149
|
+
const image = sharp(input, { limitInputPixels: limitInputPixels() });
|
|
150
|
+
if (opts.format === "png") {
|
|
151
|
+
return image.png({ quality: opts.quality });
|
|
152
|
+
}
|
|
153
|
+
if (opts.format === "jpeg") {
|
|
154
|
+
return image.jpeg({
|
|
155
|
+
quality: opts.quality,
|
|
156
|
+
progressive: opts.progressive,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return image.webp({
|
|
160
|
+
quality: opts.quality,
|
|
161
|
+
lossless: opts.lossless,
|
|
162
|
+
effort: opts.effort,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
function validateEncodeOptions(opts) {
|
|
166
|
+
if (opts.quality !== undefined &&
|
|
167
|
+
(!Number.isInteger(opts.quality) || opts.quality < 1 || opts.quality > 100)) {
|
|
168
|
+
throw new ValidationError("quality must be an integer between 1 and 100.");
|
|
169
|
+
}
|
|
170
|
+
if (opts.effort !== undefined &&
|
|
171
|
+
(!Number.isInteger(opts.effort) || opts.effort < 0 || opts.effort > 6)) {
|
|
172
|
+
throw new ValidationError("effort must be an integer between 0 and 6.");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export async function convertImage(opts) {
|
|
176
|
+
if (Boolean(opts.asset_id) === Boolean(opts.path)) {
|
|
177
|
+
throw new ValidationError("Provide exactly one image source: asset_id or path.");
|
|
178
|
+
}
|
|
179
|
+
validateEncodeOptions(opts);
|
|
180
|
+
const source = await resolveSource(opts);
|
|
181
|
+
const converted = await buildEncoder(source.bytes, opts).toBuffer();
|
|
182
|
+
const mimeType = MIME_BY_FORMAT[opts.format];
|
|
183
|
+
const outPath = opts.out_path
|
|
184
|
+
? await resolveWritableOutputPath(opts.out_path)
|
|
185
|
+
: undefined;
|
|
186
|
+
if (outPath) {
|
|
187
|
+
await writeFile(outPath, converted);
|
|
188
|
+
}
|
|
189
|
+
const sourceBytes = source.bytes.length;
|
|
190
|
+
const outputBytes = converted.length;
|
|
191
|
+
const bytesSaved = sourceBytes - outputBytes;
|
|
192
|
+
const summary = {
|
|
193
|
+
source: source.label,
|
|
194
|
+
format: opts.format,
|
|
195
|
+
mime_type: mimeType,
|
|
196
|
+
source_bytes: sourceBytes,
|
|
197
|
+
output_bytes: outputBytes,
|
|
198
|
+
bytes_saved: bytesSaved,
|
|
199
|
+
out_path: outPath,
|
|
200
|
+
};
|
|
201
|
+
return {
|
|
202
|
+
content: [
|
|
203
|
+
{ type: "text", text: JSON.stringify(summary, null, 2) },
|
|
204
|
+
{
|
|
205
|
+
type: "image",
|
|
206
|
+
data: converted.toString("base64"),
|
|
207
|
+
mimeType,
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
format: opts.format,
|
|
211
|
+
mimeType,
|
|
212
|
+
sourceBytes,
|
|
213
|
+
outputBytes,
|
|
214
|
+
bytesSaved,
|
|
215
|
+
outPath,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=image-convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-convert.js","sourceRoot":"","sources":["../../src/services/image-convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const manifestSchema: z.ZodObject<{
|
|
3
|
+
apt: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
4
|
+
pip: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
5
|
+
custom_nodes: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
6
|
+
models: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
7
|
+
url: z.ZodString;
|
|
8
|
+
model_type: z.ZodOptional<z.ZodEnum<["checkpoints", "loras", "vae", "upscale_models", "controlnet", "embeddings", "clip", "diffusers", "diffusion_models", "gligen", "hypernetworks", "photomaker", "style_models", "text_encoders", "unet"]>>;
|
|
9
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
10
|
+
local_path: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strict", z.ZodTypeAny, {
|
|
12
|
+
url: string;
|
|
13
|
+
filename?: string | undefined;
|
|
14
|
+
model_type?: "unet" | "diffusion_models" | "checkpoints" | "loras" | "clip" | "vae" | "controlnet" | "upscale_models" | "embeddings" | "diffusers" | "gligen" | "hypernetworks" | "photomaker" | "style_models" | "text_encoders" | undefined;
|
|
15
|
+
local_path?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
url: string;
|
|
18
|
+
filename?: string | undefined;
|
|
19
|
+
model_type?: "unet" | "diffusion_models" | "checkpoints" | "loras" | "clip" | "vae" | "controlnet" | "upscale_models" | "embeddings" | "diffusers" | "gligen" | "hypernetworks" | "photomaker" | "style_models" | "text_encoders" | undefined;
|
|
20
|
+
local_path?: string | undefined;
|
|
21
|
+
}>, "many">>>;
|
|
22
|
+
}, "strict", z.ZodTypeAny, {
|
|
23
|
+
models: {
|
|
24
|
+
url: string;
|
|
25
|
+
filename?: string | undefined;
|
|
26
|
+
model_type?: "unet" | "diffusion_models" | "checkpoints" | "loras" | "clip" | "vae" | "controlnet" | "upscale_models" | "embeddings" | "diffusers" | "gligen" | "hypernetworks" | "photomaker" | "style_models" | "text_encoders" | undefined;
|
|
27
|
+
local_path?: string | undefined;
|
|
28
|
+
}[];
|
|
29
|
+
custom_nodes: string[];
|
|
30
|
+
pip: string[];
|
|
31
|
+
apt: string[];
|
|
32
|
+
}, {
|
|
33
|
+
models?: {
|
|
34
|
+
url: string;
|
|
35
|
+
filename?: string | undefined;
|
|
36
|
+
model_type?: "unet" | "diffusion_models" | "checkpoints" | "loras" | "clip" | "vae" | "controlnet" | "upscale_models" | "embeddings" | "diffusers" | "gligen" | "hypernetworks" | "photomaker" | "style_models" | "text_encoders" | undefined;
|
|
37
|
+
local_path?: string | undefined;
|
|
38
|
+
}[] | undefined;
|
|
39
|
+
custom_nodes?: string[] | undefined;
|
|
40
|
+
pip?: string[] | undefined;
|
|
41
|
+
apt?: string[] | undefined;
|
|
42
|
+
}>;
|
|
43
|
+
export type ComfyManifest = z.infer<typeof manifestSchema>;
|
|
44
|
+
export interface ApplyManifestOptions {
|
|
45
|
+
manifest?: unknown;
|
|
46
|
+
path?: string;
|
|
47
|
+
}
|
|
48
|
+
export type ManifestAction = "apt" | "pip" | "custom_node" | "model";
|
|
49
|
+
export type ManifestItemStatus = "applied" | "skipped" | "failed";
|
|
50
|
+
export interface ManifestItemReport {
|
|
51
|
+
item: string;
|
|
52
|
+
action: ManifestAction;
|
|
53
|
+
status: ManifestItemStatus;
|
|
54
|
+
message: string;
|
|
55
|
+
}
|
|
56
|
+
export interface ApplyManifestResult {
|
|
57
|
+
success: boolean;
|
|
58
|
+
summary: Record<ManifestItemStatus, number>;
|
|
59
|
+
results: ManifestItemReport[];
|
|
60
|
+
}
|
|
61
|
+
export declare function loadManifestFile(path: string): Promise<ComfyManifest>;
|
|
62
|
+
export declare function applyManifest(opts: ApplyManifestOptions): Promise<ApplyManifestResult>;
|
|
63
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/services/manifest.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBhB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,KAAK,GACL,aAAa,GACb,OAAO,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAwBD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAU3E;AAwPD,wBAAsB,aAAa,CACjC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CA2F9B"}
|