comfyui-mcp 0.41.0 → 0.43.0
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/dist/orchestrator/gemini-backend.js +109 -29
- package/dist/orchestrator/gemini-backend.js.map +1 -1
- package/dist/orchestrator/index.js +106 -5
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/panel-agent.js +12 -1
- package/dist/orchestrator/panel-agent.js.map +1 -1
- package/dist/services/ai-toolkit.js +220 -0
- package/dist/services/ai-toolkit.js.map +1 -0
- package/dist/services/training-config.js +138 -0
- package/dist/services/training-config.js.map +1 -0
- package/dist/services/training-jobs.js +654 -0
- package/dist/services/training-jobs.js.map +1 -0
- package/dist/services/workflow-validator.js +4 -0
- package/dist/services/workflow-validator.js.map +1 -1
- package/dist/tools/diagnostics.js +120 -1
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/index.js +63 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/train.js +187 -0
- package/dist/tools/train.js.map +1 -0
- package/docker/runpod/.gitattributes +8 -0
- package/docker/runpod/Dockerfile +486 -0
- package/docker/runpod/README.md +658 -0
- package/docker/runpod/config.ini +28 -0
- package/docker/runpod/deploy-dockerhub.sh +46 -0
- package/docker/runpod/extra_model_paths.yaml +61 -0
- package/docker/runpod/nginx.conf +124 -0
- package/docker/runpod/post_start.sh +619 -0
- package/docker/runpod/starting.html +47 -0
- package/docker/runpod/test_image.sh +180 -0
- package/docker/runpod/verify_image_remote.py +126 -0
- package/docker/trainer/Dockerfile +69 -0
- package/package.json +2 -1
- package/plugin/skills/train-character-lora/SKILL.md +83 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
; comfyui-mcp Manager v2 config TEMPLATE (-> <user-dir>/__manager/config.ini)
|
|
2
|
+
; -----------------------------------------------------------------------------
|
|
3
|
+
; REQUIRED for the comfyui-mcp Agent Panel to install models/nodes remotely.
|
|
4
|
+
;
|
|
5
|
+
; network_mode = personal_cloud
|
|
6
|
+
; The /v2 install-model security gate only permits remote installs in
|
|
7
|
+
; personal_cloud mode. Do NOT leave this at the default or remote installs
|
|
8
|
+
; are rejected.
|
|
9
|
+
;
|
|
10
|
+
; security_level = weak
|
|
11
|
+
; Permissive so the Agent Panel can install custom nodes from ARBITRARY
|
|
12
|
+
; git URLs — Manager classes those high-risk and silently skips them at
|
|
13
|
+
; "normal-" (registry-id installs pass, git-URL installs never appear: a
|
|
14
|
+
; confusing half-working state). This is a single-user pod whose premise
|
|
15
|
+
; is agent-driven installs. Set "normal-" to restore the guardrails.
|
|
16
|
+
; Override at runtime with the COMFY_SECURITY_LEVEL env (re-asserted by
|
|
17
|
+
; /post_start.sh on every boot).
|
|
18
|
+
;
|
|
19
|
+
; FAST-RESTART design: ComfyUI runs from the IMMUTABLE image at /opt/ComfyUI, but
|
|
20
|
+
; its --user-directory is the /workspace volume, so comfyui_manager reads its
|
|
21
|
+
; config from the VOLUME (user/__manager/config.ini, or the older
|
|
22
|
+
; user/default/ComfyUI-Manager/config.ini). This file is baked into the image as
|
|
23
|
+
; a template (/opt/ComfyUI/config.ini.seed); /post_start.sh copies it to BOTH
|
|
24
|
+
; volume locations on first boot and re-asserts these two keys on every boot
|
|
25
|
+
; (idempotent), so the remote-install gate is always correct.
|
|
26
|
+
[default]
|
|
27
|
+
network_mode = personal_cloud
|
|
28
|
+
security_level = weak
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# deploy-dockerhub.sh — gated Docker Hub release for the comfyui-mcp RunPod
|
|
4
|
+
# image. Refuses to push anything that hasn't passed test_image.sh (static +
|
|
5
|
+
# boot suite), then verifies what the registry ACTUALLY serves post-push.
|
|
6
|
+
#
|
|
7
|
+
# ./deploy-dockerhub.sh <version> [<local-image-ref>]
|
|
8
|
+
#
|
|
9
|
+
# <version> e.g. 1.6 (also moves :latest)
|
|
10
|
+
# <local-image-ref> default: artokun/comfyui-mcp-runpod:build
|
|
11
|
+
#
|
|
12
|
+
# Typical flow:
|
|
13
|
+
# docker build -t artokun/comfyui-mcp-runpod:build docker/runpod
|
|
14
|
+
# docker/runpod/deploy-dockerhub.sh 1.6
|
|
15
|
+
#
|
|
16
|
+
# After pushing, PIN THE RUNPOD TEMPLATE to the new VERSION tag (not :latest):
|
|
17
|
+
# RunPod hosts cache images per-tag, so a template on :latest can silently serve
|
|
18
|
+
# a stale build — a version tag forces every new pod onto the bits you tested.
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
VERSION="${1:?usage: deploy-dockerhub.sh <version> [<local-image-ref>]}"
|
|
22
|
+
SRC="${2:-artokun/comfyui-mcp-runpod:build}"
|
|
23
|
+
REPO="artokun/comfyui-mcp-runpod"
|
|
24
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
|
|
26
|
+
echo "[deploy] gate 1/2: test_image.sh (static + boot suite) on ${SRC}…"
|
|
27
|
+
"${HERE}/test_image.sh" "${SRC}"
|
|
28
|
+
|
|
29
|
+
echo "[deploy] tagging ${SRC} -> ${REPO}:${VERSION} + ${REPO}:latest"
|
|
30
|
+
docker tag "${SRC}" "${REPO}:${VERSION}"
|
|
31
|
+
docker tag "${SRC}" "${REPO}:latest"
|
|
32
|
+
|
|
33
|
+
echo "[deploy] pushing ${REPO}:${VERSION}…"
|
|
34
|
+
docker push "${REPO}:${VERSION}"
|
|
35
|
+
echo "[deploy] pushing ${REPO}:latest…"
|
|
36
|
+
docker push "${REPO}:latest"
|
|
37
|
+
|
|
38
|
+
echo "[deploy] gate 2/2: verifying what the registry actually serves…"
|
|
39
|
+
PY="$(command -v python3 || command -v python)"
|
|
40
|
+
"${PY}" "${HERE}/verify_image_remote.py" "docker.io/${REPO}:${VERSION}"
|
|
41
|
+
|
|
42
|
+
cat <<EOF
|
|
43
|
+
[deploy] DONE: ${REPO}:${VERSION} (+ :latest) pushed and registry-verified.
|
|
44
|
+
[deploy] NEXT: pin the RunPod template image to ${REPO}:${VERSION}
|
|
45
|
+
[deploy] (console.runpod.io -> Templates; do NOT leave it on :latest).
|
|
46
|
+
EOF
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# comfyui-mcp RunPod image — extra model paths (FAST-RESTART design).
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Baked into the image at /opt/ComfyUI/extra_model_paths.yaml and loaded at
|
|
4
|
+
# launch via: main.py --extra-model-paths-config /opt/ComfyUI/extra_model_paths.yaml
|
|
5
|
+
#
|
|
6
|
+
# WHY: ComfyUI software (install + venv + custom_nodes) lives in the IMMUTABLE
|
|
7
|
+
# image at /opt/ComfyUI. ONLY user data lives on the /workspace network volume.
|
|
8
|
+
# This file points EVERY model category at /workspace/models/<cat> so:
|
|
9
|
+
# * your models persist across stop/start (they're on the volume), and
|
|
10
|
+
# * Manager's install-model writes downloads to the volume — NOT to the image.
|
|
11
|
+
#
|
|
12
|
+
# `is_default: true` makes these paths the PRIMARY entries (inserted at the FRONT
|
|
13
|
+
# of each category's folder list via folder_paths.add_model_folder_path), so they
|
|
14
|
+
# become the DEFAULT download target. Without it, ComfyUI's built-in
|
|
15
|
+
# /opt/ComfyUI/models/<cat> (ephemeral, in the image) would stay first and
|
|
16
|
+
# Manager downloads would NOT persist.
|
|
17
|
+
#
|
|
18
|
+
# NOTE: there is deliberately NO `custom_nodes:` key here. custom_nodes must stay
|
|
19
|
+
# in the image (immutable software). Mapping custom_nodes to the volume would
|
|
20
|
+
# defeat the fast-restart design and the image-baked-nodes contract.
|
|
21
|
+
#
|
|
22
|
+
# base_path is /workspace, and each value is relative to it (matching ComfyUI's
|
|
23
|
+
# own extra_model_paths.yaml.example convention, e.g. `models/checkpoints/`).
|
|
24
|
+
# Category KEYS match ComfyUI's folder_names_and_paths keys exactly.
|
|
25
|
+
# =============================================================================
|
|
26
|
+
|
|
27
|
+
comfyui_mcp_volume:
|
|
28
|
+
base_path: /workspace
|
|
29
|
+
is_default: true
|
|
30
|
+
|
|
31
|
+
checkpoints: models/checkpoints/
|
|
32
|
+
configs: models/configs/
|
|
33
|
+
loras: models/loras/
|
|
34
|
+
vae: models/vae/
|
|
35
|
+
text_encoders: |
|
|
36
|
+
models/text_encoders/
|
|
37
|
+
models/clip/
|
|
38
|
+
diffusion_models: |
|
|
39
|
+
models/diffusion_models/
|
|
40
|
+
models/unet/
|
|
41
|
+
clip_vision: models/clip_vision/
|
|
42
|
+
style_models: models/style_models/
|
|
43
|
+
embeddings: models/embeddings/
|
|
44
|
+
diffusers: models/diffusers/
|
|
45
|
+
vae_approx: models/vae_approx/
|
|
46
|
+
controlnet: |
|
|
47
|
+
models/controlnet/
|
|
48
|
+
models/t2i_adapter/
|
|
49
|
+
gligen: models/gligen/
|
|
50
|
+
upscale_models: models/upscale_models/
|
|
51
|
+
latent_upscale_models: models/latent_upscale_models/
|
|
52
|
+
hypernetworks: models/hypernetworks/
|
|
53
|
+
photomaker: models/photomaker/
|
|
54
|
+
classifiers: models/classifiers/
|
|
55
|
+
model_patches: models/model_patches/
|
|
56
|
+
audio_encoders: models/audio_encoders/
|
|
57
|
+
background_removal: models/background_removal/
|
|
58
|
+
frame_interpolation: models/frame_interpolation/
|
|
59
|
+
geometry_estimation: models/geometry_estimation/
|
|
60
|
+
optical_flow: models/optical_flow/
|
|
61
|
+
detection: models/detection/
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# comfyui-mcp RunPod reverse proxy — SELF-CONTAINED (no include/snippet deps).
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Replaces the base image's /etc/nginx/nginx.conf. The base's /start.sh runs
|
|
4
|
+
# `service nginx start` reading THIS file at boot.
|
|
5
|
+
#
|
|
6
|
+
# Public HTTP :3000 -> ComfyUI :3001 (the comfyui-mcp panel / connect target)
|
|
7
|
+
# * websocket-aware (/ws, /queue/join, and the live-preview upgrade on /)
|
|
8
|
+
# * "starting" fallback: while ComfyUI (:3001) is down, 502s are rewritten to a
|
|
9
|
+
# friendly readme.html (HTTP 200) instead of nginx's raw error page.
|
|
10
|
+
#
|
|
11
|
+
# Also fronts the two extra services on RunPod-convention ports:
|
|
12
|
+
# :8081 -> code-server :8080
|
|
13
|
+
# :8001 -> app-manager :8000
|
|
14
|
+
# (JupyterLab :8888 and SSH :22 are served directly by the base — not proxied.)
|
|
15
|
+
# =============================================================================
|
|
16
|
+
|
|
17
|
+
worker_processes auto;
|
|
18
|
+
events { worker_connections 2048; }
|
|
19
|
+
|
|
20
|
+
http {
|
|
21
|
+
client_max_body_size 1024M; # large model / image uploads
|
|
22
|
+
sendfile on;
|
|
23
|
+
|
|
24
|
+
# WebSocket upgrade plumbing (Connection: upgrade only when requested).
|
|
25
|
+
map $http_upgrade $connection_upgrade {
|
|
26
|
+
default upgrade;
|
|
27
|
+
'' close;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# ---- shared proxy behavior, applied per-server via the directives below ----
|
|
31
|
+
# (Defined at server scope so all locations inherit them; ComfyUI generations
|
|
32
|
+
# and websockets need long timeouts.)
|
|
33
|
+
|
|
34
|
+
# ============================ ComfyUI (:3000 -> :3001) ====================
|
|
35
|
+
server {
|
|
36
|
+
listen 3000;
|
|
37
|
+
|
|
38
|
+
proxy_http_version 1.1;
|
|
39
|
+
proxy_set_header Host $host;
|
|
40
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
41
|
+
proxy_set_header Connection $connection_upgrade;
|
|
42
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
43
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
44
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
45
|
+
proxy_set_header X-Forwarded-Host $host;
|
|
46
|
+
proxy_cache_bypass $http_upgrade;
|
|
47
|
+
proxy_buffering off; # stream SSE/preview promptly
|
|
48
|
+
proxy_read_timeout 3600s; # long generations / idle websockets
|
|
49
|
+
proxy_send_timeout 3600s;
|
|
50
|
+
|
|
51
|
+
# Show the "starting" page instead of a raw 502 until ComfyUI is up.
|
|
52
|
+
proxy_intercept_errors on;
|
|
53
|
+
error_page 502 504 =200 @starting;
|
|
54
|
+
|
|
55
|
+
location /ws { proxy_pass http://127.0.0.1:3001; }
|
|
56
|
+
location /queue/join { proxy_pass http://127.0.0.1:3001; }
|
|
57
|
+
location / { proxy_pass http://127.0.0.1:3001; }
|
|
58
|
+
|
|
59
|
+
location @starting {
|
|
60
|
+
proxy_intercept_errors off;
|
|
61
|
+
add_header Cache-Control no-cache;
|
|
62
|
+
root /usr/share/nginx/html;
|
|
63
|
+
rewrite ^(.*)$ /readme.html break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# ============================ code-server (:8081 -> :8080) =================
|
|
68
|
+
server {
|
|
69
|
+
listen 8081;
|
|
70
|
+
proxy_http_version 1.1;
|
|
71
|
+
proxy_set_header Host $host;
|
|
72
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
73
|
+
proxy_set_header Connection $connection_upgrade;
|
|
74
|
+
proxy_read_timeout 3600s;
|
|
75
|
+
proxy_intercept_errors on;
|
|
76
|
+
error_page 502 504 =200 @starting8081;
|
|
77
|
+
location / { proxy_pass http://127.0.0.1:8080; }
|
|
78
|
+
location @starting8081 {
|
|
79
|
+
proxy_intercept_errors off;
|
|
80
|
+
root /usr/share/nginx/html;
|
|
81
|
+
rewrite ^(.*)$ /readme.html break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# ============================ app-manager (:8001 -> :8000) =================
|
|
86
|
+
server {
|
|
87
|
+
listen 8001;
|
|
88
|
+
proxy_http_version 1.1;
|
|
89
|
+
proxy_set_header Host $host;
|
|
90
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
91
|
+
proxy_set_header Connection $connection_upgrade;
|
|
92
|
+
proxy_read_timeout 3600s;
|
|
93
|
+
proxy_intercept_errors on;
|
|
94
|
+
error_page 502 504 =200 @starting8001;
|
|
95
|
+
location / { proxy_pass http://127.0.0.1:8000; }
|
|
96
|
+
location @starting8001 {
|
|
97
|
+
proxy_intercept_errors off;
|
|
98
|
+
root /usr/share/nginx/html;
|
|
99
|
+
rewrite ^(.*)$ /readme.html break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# ============================ File Browser (:8083 -> :8082) ================
|
|
104
|
+
# Web file manager rooted at /workspace (browse/upload/download/delete).
|
|
105
|
+
# client_max_body_size 0 = no cap, so multi-GB model uploads aren't rejected.
|
|
106
|
+
server {
|
|
107
|
+
listen 8083;
|
|
108
|
+
client_max_body_size 0;
|
|
109
|
+
proxy_http_version 1.1;
|
|
110
|
+
proxy_set_header Host $host;
|
|
111
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
112
|
+
proxy_set_header Connection $connection_upgrade;
|
|
113
|
+
proxy_read_timeout 3600s;
|
|
114
|
+
proxy_request_buffering off; # stream large uploads straight through
|
|
115
|
+
proxy_intercept_errors on;
|
|
116
|
+
error_page 502 504 =200 @starting8083;
|
|
117
|
+
location / { proxy_pass http://127.0.0.1:8082; }
|
|
118
|
+
location @starting8083 {
|
|
119
|
+
proxy_intercept_errors off;
|
|
120
|
+
root /usr/share/nginx/html;
|
|
121
|
+
rewrite ^(.*)$ /readme.html break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|