comfyui-mcp 0.21.0 → 0.21.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "comfyui-mcp",
3
- "version": "0.21.0",
3
+ "version": "0.21.1",
4
4
  "mcpName": "io.github.artokun/comfyui-mcp",
5
5
  "description": "MCP server + autonomous AI agent for ComfyUI — drive your live graph in natural language from a sidebar agent on Claude OR ChatGPT (your own subscription, no API key). Generate images, video & audio, author and run workflows, manage models and custom nodes. Also a Claude Code plugin with skills, slash commands, and installer packs.",
6
6
  "homepage": "https://comfyui-mcp.artokun.io/docs",
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # ===== Auto-generated by scripts/gen-pack-installers.mjs — do not edit =====
4
+ # Pack: WAN Animate 2.2 — OFM hub (Uni3C + face-swap) (Linux / RunPod)
5
+ # Run from your ComfyUI root (the folder containing custom_nodes/ and models/).
6
+ [ -d custom_nodes ] || { echo "[ERROR] run from your ComfyUI root (custom_nodes/ not found)"; exit 1; }
7
+ # Resolve the ComfyUI python: its venv first, then portable embed, then \$PYTHON/python3.
8
+ # Installing requirements into the wrong interpreter is why nodes silently fail to load.
9
+ if [ -n "${PYTHON:-}" ]; then PY="$PYTHON";
10
+ elif [ -x ".venv/bin/python" ]; then PY=".venv/bin/python";
11
+ elif [ -x "venv/bin/python" ]; then PY="venv/bin/python";
12
+ elif [ -x "../python_embeded/python" ]; then PY="../python_embeded/python";
13
+ else PY="python3"; fi
14
+ echo "using python: $PY"
15
+
16
+ clone() { # folder url
17
+ if [ ! -d "custom_nodes/$1" ]; then
18
+ echo " cloning $1"; git clone --depth 1 "$2" "custom_nodes/$1"
19
+ if [ -f "custom_nodes/$1/requirements.txt" ]; then echo " installing $1 requirements.txt"; "$PY" -m pip install -r "custom_nodes/$1/requirements.txt"; fi
20
+ else echo " $1 present - skip"; fi
21
+ }
22
+ grab() { # relpath url
23
+ mkdir -p "$(dirname "$1")"
24
+ if [ ! -f "$1" ]; then echo " downloading $(basename "$1")"; curl -L -o "$1" "$2"; else echo " $(basename "$1") present - skip"; fi
25
+ }
26
+
27
+ echo "-------- custom nodes --------"
28
+ clone "ComfyUI-Manager" "https://github.com/ltdrdata/ComfyUI-Manager.git"
29
+ clone "ComfyUI-WanVideoWrapper" "https://github.com/kijai/ComfyUI-WanVideoWrapper"
30
+ clone "ComfyUI-KJNodes" "https://github.com/kijai/ComfyUI-KJNodes"
31
+ clone "ComfyUI-WanAnimatePreprocess" "https://github.com/kijai/ComfyUI-WanAnimatePreprocess"
32
+ clone "ComfyUI-segment-anything-2" "https://github.com/kijai/ComfyUI-segment-anything-2"
33
+ clone "ComfyUI-VideoHelperSuite" "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite"
34
+ clone "ComfyMath" "https://github.com/evanspearman/ComfyMath"
35
+ clone "CRT-Nodes" "https://github.com/plugcrypt/CRT-Nodes"
36
+
37
+ echo "-------- models --------"
38
+ grab "models/diffusion_models/WanModel.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy_fp8_scaled/resolve/main/Wan22Animate/Wan2_2-Animate-14B_fp8_scaled_e4m3fn_KJ_v2.safetensors"
39
+ grab "models/vae/vae.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan2_1_VAE_bf16.safetensors"
40
+ grab "models/clip_vision/klip_vision.safetensors" "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/clip_vision/clip_vision_h.safetensors"
41
+ grab "models/text_encoders/text_enc.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/umt5-xxl-enc-fp8_e4m3fn.safetensors"
42
+ grab "models/controlnet/Wan21_Uni3C_controlnet_fp16.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan21_Uni3C_controlnet_fp16.safetensors"
43
+ grab "models/loras/light.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors"
44
+ grab "models/loras/wan.reworked.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_relight/WanAnimate_relight_lora_fp16.safetensors"
45
+ grab "models/loras/WanPusa.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Pusa/Wan21_PusaV1_LoRA_14B_rank512_bf16.safetensors"
46
+ grab "models/loras/WanFun.reworked.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_FunReward/Wan2.2-Fun-A14B-InP-LOW-MPS_resized_dynamic_avg_rank_22_bf16.safetensors"
47
+ grab "models/detection/yolov10m.onnx" "https://huggingface.co/Wan-AI/Wan2.2-Animate-14B/resolve/main/process_checkpoint/det/yolov10m.onnx"
48
+ grab "models/detection/vitpose_h_wholebody_model.onnx" "https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_model.onnx"
49
+ grab "models/detection/vitpose_h_wholebody_data.bin" "https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_data.bin"
50
+
51
+ echo "DONE. Restart ComfyUI, then load workflow.json."
@@ -0,0 +1,56 @@
1
+ @echo off
2
+ setlocal EnableExtensions EnableDelayedExpansion
3
+ chcp 65001 >nul
4
+ rem ===== Auto-generated by scripts/gen-pack-installers.mjs — do not edit =====
5
+ rem Pack: WAN Animate 2.2 — OFM hub (Uni3C + face-swap)
6
+ rem Run from your ComfyUI root (the folder containing custom_nodes\ and models\).
7
+ if not exist "custom_nodes" ( echo [ERROR] Run from your ComfyUI root ^(custom_nodes\ not found^). & pause & exit /b 1 )
8
+ where git >nul 2>&1 || ( echo [ERROR] git not found in PATH. & pause & exit /b 1 )
9
+ where curl >nul 2>&1 || ( echo [ERROR] curl not found in PATH. & pause & exit /b 1 )
10
+ rem Resolve the ComfyUI python: venv first, then portable embed, then PATH python.
11
+ set "PY=%CD%\.venv\Scripts\python.exe"
12
+ if not exist "%PY%" set "PY=%CD%\venv\Scripts\python.exe"
13
+ if not exist "%PY%" set "PY=%CD%\..\python_embeded\python.exe"
14
+ if not exist "%PY%" set "PY=python"
15
+ echo using python: %PY%
16
+
17
+ echo -------- custom nodes --------
18
+ call :clone "ComfyUI-Manager" "https://github.com/ltdrdata/ComfyUI-Manager.git"
19
+ call :clone "ComfyUI-WanVideoWrapper" "https://github.com/kijai/ComfyUI-WanVideoWrapper"
20
+ call :clone "ComfyUI-KJNodes" "https://github.com/kijai/ComfyUI-KJNodes"
21
+ call :clone "ComfyUI-WanAnimatePreprocess" "https://github.com/kijai/ComfyUI-WanAnimatePreprocess"
22
+ call :clone "ComfyUI-segment-anything-2" "https://github.com/kijai/ComfyUI-segment-anything-2"
23
+ call :clone "ComfyUI-VideoHelperSuite" "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite"
24
+ call :clone "ComfyMath" "https://github.com/evanspearman/ComfyMath"
25
+ call :clone "CRT-Nodes" "https://github.com/plugcrypt/CRT-Nodes"
26
+
27
+ echo -------- models --------
28
+ call :grab "models\diffusion_models\WanModel.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy_fp8_scaled/resolve/main/Wan22Animate/Wan2_2-Animate-14B_fp8_scaled_e4m3fn_KJ_v2.safetensors"
29
+ call :grab "models\vae\vae.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan2_1_VAE_bf16.safetensors"
30
+ call :grab "models\clip_vision\klip_vision.safetensors" "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/clip_vision/clip_vision_h.safetensors"
31
+ call :grab "models\text_encoders\text_enc.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/umt5-xxl-enc-fp8_e4m3fn.safetensors"
32
+ call :grab "models\controlnet\Wan21_Uni3C_controlnet_fp16.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan21_Uni3C_controlnet_fp16.safetensors"
33
+ call :grab "models\loras\light.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors"
34
+ call :grab "models\loras\wan.reworked.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_relight/WanAnimate_relight_lora_fp16.safetensors"
35
+ call :grab "models\loras\WanPusa.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Pusa/Wan21_PusaV1_LoRA_14B_rank512_bf16.safetensors"
36
+ call :grab "models\loras\WanFun.reworked.safetensors" "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_FunReward/Wan2.2-Fun-A14B-InP-LOW-MPS_resized_dynamic_avg_rank_22_bf16.safetensors"
37
+ call :grab "models\detection\yolov10m.onnx" "https://huggingface.co/Wan-AI/Wan2.2-Animate-14B/resolve/main/process_checkpoint/det/yolov10m.onnx"
38
+ call :grab "models\detection\vitpose_h_wholebody_model.onnx" "https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_model.onnx"
39
+ call :grab "models\detection\vitpose_h_wholebody_data.bin" "https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_data.bin"
40
+
41
+ echo DONE. Restart ComfyUI, then load workflow.json.
42
+ pause
43
+ exit /b
44
+
45
+ :clone
46
+ if not exist "custom_nodes\%~1" (
47
+ echo cloning %~1
48
+ git clone --depth 1 "%~2" "custom_nodes\%~1"
49
+ if exist "custom_nodes\%~1\requirements.txt" ( echo installing %~1 requirements.txt & "%PY%" -m pip install -r "custom_nodes\%~1\requirements.txt" )
50
+ ) else ( echo %~1 present - skip )
51
+ goto :eof
52
+
53
+ :grab
54
+ if not exist "%~dp1" mkdir "%~dp1"
55
+ if not exist "%~1" ( echo downloading %~nx1 & curl -L --ssl-no-revoke -o "%~1" "%~2" ) else ( echo %~nx1 present - skip )
56
+ goto :eof
@@ -0,0 +1,78 @@
1
+ # WAN Animate 2.2 — "OFM hub" variant. PERSONAL pack (see pack.yaml notes).
2
+ # Decoded + flattened from a teskor-hub WAN Animate hub workflow: drive a
3
+ # character image with a video (ViTPose+YOLO pose/face), Uni3C controlnet for
4
+ # temporal stability, optional bypassed SAM2 face-swap masking, color-match,
5
+ # save video.
6
+ #
7
+ # MODEL NAMING: the source workflow uses short PLACEHOLDER filenames
8
+ # (WanModel/vae/klip_vision/text_enc + light/wan.reworked/WanPusa/WanFun.reworked).
9
+ # Each entry below downloads the REAL Kijai file but saves it UNDER THE PLACEHOLDER
10
+ # NAME the graph expects, so the workflow loads without edits.
11
+ #
12
+ # PRIVATE NODES (NOT auto-installable — install manually): this graph also uses
13
+ # four teskor-hub nodes whose repos are private:
14
+ # TSColorMatch, TSVideoCombineNoMetadata, TSPreviewImageNoMetadata, TSPoseDataSmoother
15
+ # (github.com/teskor-hub/NEW-UTILS, github.com/teskor-hub/comfyui-teskors-utils)
16
+ # Without them the graph won't fully load. Swap to VHS_VideoCombine / KJNodes
17
+ # ColorMatch / core PreviewImage if you don't have the teskor packs.
18
+
19
+ pip: []
20
+
21
+ custom_nodes:
22
+ - https://github.com/ltdrdata/ComfyUI-Manager.git
23
+ - https://github.com/kijai/ComfyUI-WanVideoWrapper # WanVideo* (model/vae/lora/sampler/decode/animate/uni3c)
24
+ - https://github.com/kijai/ComfyUI-KJNodes # DrawMaskOnImage, BlockifyMask, GrowMaskWithBlur, ImageResizeKJv2, GetImageSizeAndCount
25
+ - https://github.com/kijai/ComfyUI-WanAnimatePreprocess # PoseAndFaceDetection, OnnxDetectionModelLoader (vitpose+yolov10m auto-download)
26
+ - https://github.com/kijai/ComfyUI-segment-anything-2 # DownloadAndLoadSAM2Model, Sam2Segmentation (bypassed face-swap branch)
27
+ - https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite # VHS_LoadVideo
28
+ - https://github.com/evanspearman/ComfyMath # CM_FloatToInt (bogus aux_id in the file said Workflow-Encrypt — it's ComfyMath)
29
+ - https://github.com/plugcrypt/CRT-Nodes # SimpleKnobNode (bypassed branch)
30
+ # --- PRIVATE / user-supplied (NOT cloned) — see header note ---
31
+ # - https://github.com/teskor-hub/NEW-UTILS # TSColorMatch
32
+ # - https://github.com/teskor-hub/comfyui-teskors-utils # TSPoseDataSmoother, TSVideoCombineNoMetadata, TSPreviewImageNoMetadata
33
+
34
+ models:
35
+ # --- WAN 2.2 Animate 14B (fp8 scaled, Kijai v2) -> placeholder WanModel ---
36
+ - url: https://huggingface.co/Kijai/WanVideo_comfy_fp8_scaled/resolve/main/Wan22Animate/Wan2_2-Animate-14B_fp8_scaled_e4m3fn_KJ_v2.safetensors
37
+ local_path: diffusion_models/WanModel.safetensors
38
+
39
+ # --- WAN 2.1 VAE -> placeholder vae ---
40
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan2_1_VAE_bf16.safetensors
41
+ local_path: vae/vae.safetensors
42
+
43
+ # --- CLIP vision H -> placeholder klip_vision (Comfy-Org repackaged; standard) ---
44
+ - url: https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/clip_vision/clip_vision_h.safetensors
45
+ local_path: clip_vision/klip_vision.safetensors
46
+
47
+ # --- umt5-xxl text encoder (fp8) -> placeholder text_enc ---
48
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/umt5-xxl-enc-fp8_e4m3fn.safetensors
49
+ local_path: text_encoders/text_enc.safetensors
50
+
51
+ # --- Uni3C controlnet (temporal stability) — real name kept ---
52
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan21_Uni3C_controlnet_fp16.safetensors
53
+ local_path: controlnet/Wan21_Uni3C_controlnet_fp16.safetensors
54
+
55
+ # --- LoRA stack (WanVideoLoraSelectMulti) -> placeholders ---
56
+ # light@1.0 = lightx2v 4-step distill
57
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors
58
+ local_path: loras/light.safetensors
59
+ # wan.reworked@0.3 = WanAnimate relight LoRA
60
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_relight/WanAnimate_relight_lora_fp16.safetensors
61
+ local_path: loras/wan.reworked.safetensors
62
+ # WanPusa@0.9 = Pusa V1 temporal LoRA (single-file Wan2.1)
63
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Pusa/Wan21_PusaV1_LoRA_14B_rank512_bf16.safetensors
64
+ local_path: loras/WanPusa.safetensors
65
+ # WanFun.reworked@0.5 = Wan2.2-Fun-A14B-InP LoRA (resized rank-22)
66
+ - url: https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Wan22_FunReward/Wan2.2-Fun-A14B-InP-LOW-MPS_resized_dynamic_avg_rank_22_bf16.safetensors
67
+ local_path: loras/WanFun.reworked.safetensors
68
+
69
+ # --- Pose detection ONNX (OnnxDetectionModelLoader loads from models/detection/) ---
70
+ # YOLOv10m (from the official Wan2.2-Animate checkpoint)
71
+ - url: https://huggingface.co/Wan-AI/Wan2.2-Animate-14B/resolve/main/process_checkpoint/det/yolov10m.onnx
72
+ local_path: detection/yolov10m.onnx
73
+ # ViTPose-Huge wholebody — split into model + data.bin (ONNX 2GB limit); both
74
+ # must sit in the same folder, the .onnx is the one selected in the loader.
75
+ - url: https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_model.onnx
76
+ local_path: detection/vitpose_h_wholebody_model.onnx
77
+ - url: https://huggingface.co/Kijai/vitpose_comfy/resolve/main/onnx/vitpose_h_wholebody_data.bin
78
+ local_path: detection/vitpose_h_wholebody_data.bin
@@ -0,0 +1,43 @@
1
+ name: wan-animate-ofm
2
+ display_name: WAN Animate 2.2 — OFM hub (Uni3C + face-swap)
3
+ family: wan
4
+ kind: video
5
+ description: >-
6
+ WAN Animate 2.2 video-to-video character animation — the "OFM hub" variant,
7
+ decoded and flattened from a teskor-hub workflow. Drives a character image with
8
+ a driving video (ViTPose + YOLOv10 pose/face detection), adds Uni3C controlnet
9
+ for temporal stability, color-matches, and saves video. A SAM2 face-swap /
10
+ deep-fake masking branch ships BYPASSED (opt-in). Runs on the Kijai WanVideo
11
+ stack (Wan2.2-Animate-14B fp8 + Wan2.1 VAE + clip_vision_h + umt5) with a LoRA
12
+ stack of lightx2v (4-step distill), WanAnimate relight, Pusa V1 temporal, and
13
+ Wan2.2-Fun. Distinct from the SeC-based `wan-animate` pack.
14
+ vram: 24GB+
15
+ workflow: workflow.json
16
+ skill: video-extend
17
+ launch_args: []
18
+ sources:
19
+ kijai: https://huggingface.co/Kijai/WanVideo_comfy
20
+ kijai_fp8: https://huggingface.co/Kijai/WanVideo_comfy_fp8_scaled
21
+ notes:
22
+ - PERSONAL PACK — requires FOUR private teskor-hub nodes that are NOT
23
+ auto-installable (TSColorMatch, TSVideoCombineNoMetadata,
24
+ TSPreviewImageNoMetadata, TSPoseDataSmoother). Install them manually, or swap
25
+ to standard equivalents (VHS_VideoCombine / KJNodes ColorMatch / core
26
+ PreviewImage) — without them the graph won't fully load.
27
+ - Models download under the workflow's PLACEHOLDER names (WanModel / vae /
28
+ klip_vision / text_enc + light / wan.reworked / WanPusa / WanFun.reworked) so
29
+ the graph loads without edits — see manifest.yaml for the real Kijai files.
30
+ - It IS a Kijai stack end-to-end (model in WanVideo_comfy_fp8_scaled, the rest +
31
+ LoRAs in WanVideo_comfy). Exact LoRA variant picks (rank/precision) were
32
+ inferred from the canonical WAN_ANIMATE_ULTRA workflow + the video-extend
33
+ skill (Pusa); confirm against your own files if a rank differs.
34
+ - The SAM2 "Face swap" branch (DownloadAndLoadSAM2Model -> Sam2Segmentation ->
35
+ mask nodes) ships BYPASSED — un-bypass those 7 nodes to enable masked
36
+ face-swap. SAM2 + the pose ONNX models (vitpose/yolov10m) auto-download via
37
+ their nodes.
38
+ - NOT render-verified here (WAN Animate models are ~tens of GB and weren't
39
+ installed). Static-validated only (clean flatten + structural lint).
40
+ post_install:
41
+ - Install the private teskor-hub nodes (or swap to standard equivalents).
42
+ - Restart ComfyUI (or ComfyUI-Manager -> Install missing custom nodes).
43
+ - Load workflow.json.