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.
Files changed (34) hide show
  1. package/dist/orchestrator/gemini-backend.js +109 -29
  2. package/dist/orchestrator/gemini-backend.js.map +1 -1
  3. package/dist/orchestrator/index.js +106 -5
  4. package/dist/orchestrator/index.js.map +1 -1
  5. package/dist/orchestrator/panel-agent.js +12 -1
  6. package/dist/orchestrator/panel-agent.js.map +1 -1
  7. package/dist/services/ai-toolkit.js +220 -0
  8. package/dist/services/ai-toolkit.js.map +1 -0
  9. package/dist/services/training-config.js +138 -0
  10. package/dist/services/training-config.js.map +1 -0
  11. package/dist/services/training-jobs.js +654 -0
  12. package/dist/services/training-jobs.js.map +1 -0
  13. package/dist/services/workflow-validator.js +4 -0
  14. package/dist/services/workflow-validator.js.map +1 -1
  15. package/dist/tools/diagnostics.js +120 -1
  16. package/dist/tools/diagnostics.js.map +1 -1
  17. package/dist/tools/index.js +63 -3
  18. package/dist/tools/index.js.map +1 -1
  19. package/dist/tools/train.js +187 -0
  20. package/dist/tools/train.js.map +1 -0
  21. package/docker/runpod/.gitattributes +8 -0
  22. package/docker/runpod/Dockerfile +486 -0
  23. package/docker/runpod/README.md +658 -0
  24. package/docker/runpod/config.ini +28 -0
  25. package/docker/runpod/deploy-dockerhub.sh +46 -0
  26. package/docker/runpod/extra_model_paths.yaml +61 -0
  27. package/docker/runpod/nginx.conf +124 -0
  28. package/docker/runpod/post_start.sh +619 -0
  29. package/docker/runpod/starting.html +47 -0
  30. package/docker/runpod/test_image.sh +180 -0
  31. package/docker/runpod/verify_image_remote.py +126 -0
  32. package/docker/trainer/Dockerfile +69 -0
  33. package/package.json +2 -1
  34. 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
+ }