comfyui-mcp 0.48.21 → 0.48.23

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 (252) hide show
  1. package/README.md +2 -2
  2. package/dist/comfyui/client.js +46 -6
  3. package/dist/comfyui/client.js.map +1 -1
  4. package/dist/config.js +15 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/orchestrator/error-text.js +29 -1
  7. package/dist/orchestrator/error-text.js.map +1 -1
  8. package/dist/orchestrator/error-text.test.js +28 -0
  9. package/dist/orchestrator/error-text.test.js.map +1 -1
  10. package/dist/orchestrator/index.js +331 -56
  11. package/dist/orchestrator/index.js.map +1 -1
  12. package/dist/orchestrator/panel-agent.js +122 -31
  13. package/dist/orchestrator/panel-agent.js.map +1 -1
  14. package/dist/orchestrator/panel-tools.js +1256 -198
  15. package/dist/orchestrator/panel-tools.js.map +1 -1
  16. package/dist/orchestrator/ready-banner.js +70 -0
  17. package/dist/orchestrator/ready-banner.js.map +1 -0
  18. package/dist/orchestrator/session-store.js +163 -28
  19. package/dist/orchestrator/session-store.js.map +1 -1
  20. package/dist/services/api-nodes.js +5 -7
  21. package/dist/services/api-nodes.js.map +1 -1
  22. package/dist/services/download-cache.js +126 -18
  23. package/dist/services/download-cache.js.map +1 -1
  24. package/dist/services/download-jobs.js +463 -14
  25. package/dist/services/download-jobs.js.map +1 -1
  26. package/dist/services/download-progress.js +252 -3
  27. package/dist/services/download-progress.js.map +1 -1
  28. package/dist/services/env-capabilities.js +80 -9
  29. package/dist/services/env-capabilities.js.map +1 -1
  30. package/dist/services/generate-audio.js +16 -0
  31. package/dist/services/generate-audio.js.map +1 -1
  32. package/dist/services/local-models-fallback.js +7 -3
  33. package/dist/services/local-models-fallback.js.map +1 -1
  34. package/dist/services/manifest.js +180 -65
  35. package/dist/services/manifest.js.map +1 -1
  36. package/dist/services/model-resolver.js +267 -11
  37. package/dist/services/model-resolver.js.map +1 -1
  38. package/dist/services/node-management.js +179 -45
  39. package/dist/services/node-management.js.map +1 -1
  40. package/dist/services/output-dir.js +33 -3
  41. package/dist/services/output-dir.js.map +1 -1
  42. package/dist/services/panel-secrets.js +19 -7
  43. package/dist/services/panel-secrets.js.map +1 -1
  44. package/dist/services/process-control.js +107 -8
  45. package/dist/services/process-control.js.map +1 -1
  46. package/dist/services/queue-monitor.js +45 -2
  47. package/dist/services/queue-monitor.js.map +1 -1
  48. package/dist/services/queue-monitor.stall.test.js +78 -0
  49. package/dist/services/queue-monitor.stall.test.js.map +1 -0
  50. package/dist/services/secure-bridge.js +84 -0
  51. package/dist/services/secure-bridge.js.map +1 -1
  52. package/dist/services/storage/azure-blob.js +8 -3
  53. package/dist/services/storage/azure-blob.js.map +1 -1
  54. package/dist/services/storage/index.js +3 -3
  55. package/dist/services/storage/index.js.map +1 -1
  56. package/dist/services/storage/s3.js +9 -3
  57. package/dist/services/storage/s3.js.map +1 -1
  58. package/dist/services/ui-bridge.js +341 -24
  59. package/dist/services/ui-bridge.js.map +1 -1
  60. package/dist/services/workflow-converter.js +767 -72
  61. package/dist/services/workflow-converter.js.map +1 -1
  62. package/dist/services/workflow-deps.js +20 -1
  63. package/dist/services/workflow-deps.js.map +1 -1
  64. package/dist/services/workflow-lock.js +127 -27
  65. package/dist/services/workflow-lock.js.map +1 -1
  66. package/dist/services/workflow-target-store.js +7 -3
  67. package/dist/services/workflow-target-store.js.map +1 -1
  68. package/dist/services/workspace-env.js +48 -0
  69. package/dist/services/workspace-env.js.map +1 -1
  70. package/dist/tools/diagnostics.js +10 -1
  71. package/dist/tools/diagnostics.js.map +1 -1
  72. package/dist/tools/generate-audio.js +44 -0
  73. package/dist/tools/generate-audio.js.map +1 -1
  74. package/dist/tools/model-explorer.js +85 -5
  75. package/dist/tools/model-explorer.js.map +1 -1
  76. package/dist/tools/model-extras.js +24 -4
  77. package/dist/tools/model-extras.js.map +1 -1
  78. package/dist/tools/model-management.js +124 -14
  79. package/dist/tools/model-management.js.map +1 -1
  80. package/dist/tools/report-issue.js +220 -66
  81. package/dist/tools/report-issue.js.map +1 -1
  82. package/dist/tools/report-issue.test.js +223 -83
  83. package/dist/tools/report-issue.test.js.map +1 -1
  84. package/dist/tools/skills-access.js +7 -2
  85. package/dist/tools/skills-access.js.map +1 -1
  86. package/dist/tools/template-schema.js +5 -5
  87. package/dist/tools/template-schema.js.map +1 -1
  88. package/dist/tools/workflow-compose.js +18 -3
  89. package/dist/tools/workflow-compose.js.map +1 -1
  90. package/dist/tools/workflow-visualize.js +1 -1
  91. package/dist/tools/workflow-visualize.js.map +1 -1
  92. package/package.json +1 -1
  93. package/packs/anima/install-runpod.sh +0 -1
  94. package/packs/anima/install-windows.bat +0 -1
  95. package/packs/anima/manifest.yaml +0 -1
  96. package/packs/anima-img2img/install-runpod.sh +0 -1
  97. package/packs/anima-img2img/install-windows.bat +0 -1
  98. package/packs/anima-img2img/manifest.yaml +0 -1
  99. package/packs/anima-inpaint/install-runpod.sh +0 -1
  100. package/packs/anima-inpaint/install-windows.bat +0 -1
  101. package/packs/anima-inpaint/manifest.yaml +0 -1
  102. package/packs/anima-txt2img/install-runpod.sh +0 -1
  103. package/packs/anima-txt2img/install-windows.bat +0 -1
  104. package/packs/anima-txt2img/manifest.yaml +0 -1
  105. package/packs/artokun-flow/install-runpod.sh +0 -1
  106. package/packs/artokun-flow/install-windows.bat +0 -1
  107. package/packs/artokun-flow/manifest.yaml +0 -1
  108. package/packs/ernie/install-runpod.sh +0 -1
  109. package/packs/ernie/install-windows.bat +0 -1
  110. package/packs/ernie/manifest.yaml +0 -1
  111. package/packs/ernie-combo/install-runpod.sh +0 -1
  112. package/packs/ernie-combo/install-windows.bat +0 -1
  113. package/packs/ernie-combo/manifest.yaml +0 -1
  114. package/packs/ernie-img2img/install-runpod.sh +0 -1
  115. package/packs/ernie-img2img/install-windows.bat +0 -1
  116. package/packs/ernie-img2img/manifest.yaml +0 -1
  117. package/packs/ernie-txt2img/install-runpod.sh +0 -1
  118. package/packs/ernie-txt2img/install-windows.bat +0 -1
  119. package/packs/ernie-txt2img/manifest.yaml +0 -1
  120. package/packs/ideogram/install-runpod.sh +0 -1
  121. package/packs/ideogram/install-windows.bat +0 -1
  122. package/packs/ideogram/manifest.yaml +0 -1
  123. package/packs/ideogram-img2img/install-runpod.sh +0 -1
  124. package/packs/ideogram-img2img/install-windows.bat +0 -1
  125. package/packs/ideogram-img2img/manifest.yaml +0 -1
  126. package/packs/ideogram-txt2img/install-runpod.sh +0 -1
  127. package/packs/ideogram-txt2img/install-windows.bat +0 -1
  128. package/packs/ideogram-txt2img/manifest.yaml +0 -1
  129. package/packs/ltx-2.3/install-runpod.sh +0 -1
  130. package/packs/ltx-2.3/install-windows.bat +0 -1
  131. package/packs/ltx-2.3/manifest.yaml +0 -1
  132. package/packs/ltx-2.3-extender/install-runpod.sh +0 -1
  133. package/packs/ltx-2.3-extender/install-windows.bat +0 -1
  134. package/packs/ltx-2.3-extender/manifest.yaml +0 -1
  135. package/packs/ltx-2.3-extender-no-audio/install-runpod.sh +0 -1
  136. package/packs/ltx-2.3-extender-no-audio/install-windows.bat +0 -1
  137. package/packs/ltx-2.3-extender-no-audio/manifest.yaml +0 -1
  138. package/packs/ltx-2.3-flf/install-runpod.sh +0 -1
  139. package/packs/ltx-2.3-flf/install-windows.bat +0 -1
  140. package/packs/ltx-2.3-flf/manifest.yaml +0 -1
  141. package/packs/ltx-2.3-img2vid/install-runpod.sh +0 -1
  142. package/packs/ltx-2.3-img2vid/install-windows.bat +0 -1
  143. package/packs/ltx-2.3-img2vid/manifest.yaml +3 -4
  144. package/packs/ltx-2.3-txt2vid/install-runpod.sh +0 -1
  145. package/packs/ltx-2.3-txt2vid/install-windows.bat +0 -1
  146. package/packs/ltx-2.3-txt2vid/manifest.yaml +3 -4
  147. package/packs/ltx-2.3-xy-plot/install-runpod.sh +0 -1
  148. package/packs/ltx-2.3-xy-plot/install-windows.bat +0 -1
  149. package/packs/ltx-2.3-xy-plot/manifest.yaml +0 -1
  150. package/packs/ltx23-distill-3stage/install-runpod.sh +0 -1
  151. package/packs/ltx23-distill-3stage/install-windows.bat +0 -1
  152. package/packs/ltx23-distill-3stage/manifest.yaml +0 -1
  153. package/packs/qwen-image/install-runpod.sh +0 -1
  154. package/packs/qwen-image/install-windows.bat +0 -1
  155. package/packs/qwen-image/manifest.yaml +0 -1
  156. package/packs/qwen-image-edit/install-runpod.sh +0 -1
  157. package/packs/qwen-image-edit/install-windows.bat +0 -1
  158. package/packs/qwen-image-edit/manifest.yaml +0 -1
  159. package/packs/qwen-image-edit-edit/install-runpod.sh +0 -1
  160. package/packs/qwen-image-edit-edit/install-windows.bat +0 -1
  161. package/packs/qwen-image-edit-edit/manifest.yaml +0 -1
  162. package/packs/wan-animate/install-runpod.sh +0 -1
  163. package/packs/wan-animate/install-windows.bat +0 -1
  164. package/packs/wan-animate/manifest.yaml +0 -1
  165. package/packs/wan-animate-character/install-runpod.sh +0 -1
  166. package/packs/wan-animate-character/install-windows.bat +0 -1
  167. package/packs/wan-animate-character/manifest.yaml +0 -1
  168. package/packs/wan-animate-ofm/install-runpod.sh +0 -1
  169. package/packs/wan-animate-ofm/install-windows.bat +0 -1
  170. package/packs/wan-animate-ofm/manifest.yaml +0 -1
  171. package/packs/wan-longer-videos/install-runpod.sh +0 -1
  172. package/packs/wan-longer-videos/install-windows.bat +0 -1
  173. package/packs/wan-longer-videos/manifest.yaml +0 -1
  174. package/packs/wan-longer-videos-i2v/install-runpod.sh +0 -1
  175. package/packs/wan-longer-videos-i2v/install-windows.bat +0 -1
  176. package/packs/wan-longer-videos-i2v/manifest.yaml +0 -1
  177. package/packs/wan-longer-videos-i2v-96gb/install-runpod.sh +0 -1
  178. package/packs/wan-longer-videos-i2v-96gb/install-windows.bat +0 -1
  179. package/packs/wan-longer-videos-i2v-96gb/manifest.yaml +0 -1
  180. package/packs/wan-longer-videos-t2v/install-runpod.sh +0 -1
  181. package/packs/wan-longer-videos-t2v/install-windows.bat +0 -1
  182. package/packs/wan-longer-videos-t2v/manifest.yaml +0 -1
  183. package/packs/wan-longer-videos-t2v-96gb/install-runpod.sh +0 -1
  184. package/packs/wan-longer-videos-t2v-96gb/install-windows.bat +0 -1
  185. package/packs/wan-longer-videos-t2v-96gb/manifest.yaml +0 -1
  186. package/packs/wan-longer-videos-v2v/install-runpod.sh +0 -1
  187. package/packs/wan-longer-videos-v2v/install-windows.bat +0 -1
  188. package/packs/wan-longer-videos-v2v/manifest.yaml +0 -1
  189. package/packs/wan-longer-videos-v2v-96gb/install-runpod.sh +0 -1
  190. package/packs/wan-longer-videos-v2v-96gb/install-windows.bat +0 -1
  191. package/packs/wan-longer-videos-v2v-96gb/manifest.yaml +0 -1
  192. package/packs/wan-multitalk/install-runpod.sh +0 -1
  193. package/packs/wan-multitalk/install-windows.bat +0 -1
  194. package/packs/wan-multitalk/manifest.yaml +0 -1
  195. package/packs/wan-pusa-extend/install-runpod.sh +0 -1
  196. package/packs/wan-pusa-extend/install-windows.bat +0 -1
  197. package/packs/wan-pusa-extend/manifest.yaml +0 -1
  198. package/packs/wan-transparent/install-runpod.sh +0 -1
  199. package/packs/wan-transparent/install-windows.bat +0 -1
  200. package/packs/wan-transparent/manifest.yaml +0 -1
  201. package/packs/wan-transparent-img2vid/install-runpod.sh +0 -1
  202. package/packs/wan-transparent-img2vid/install-windows.bat +0 -1
  203. package/packs/wan-transparent-img2vid/manifest.yaml +0 -1
  204. package/packs/wan-transparent-img2vid-96gb/install-runpod.sh +0 -1
  205. package/packs/wan-transparent-img2vid-96gb/install-windows.bat +0 -1
  206. package/packs/wan-transparent-img2vid-96gb/manifest.yaml +0 -1
  207. package/packs/z-image-base/install-runpod.sh +0 -1
  208. package/packs/z-image-base/install-windows.bat +0 -1
  209. package/packs/z-image-base/manifest.yaml +0 -1
  210. package/packs/z-image-base-combo/install-runpod.sh +0 -1
  211. package/packs/z-image-base-combo/install-windows.bat +0 -1
  212. package/packs/z-image-base-combo/manifest.yaml +0 -1
  213. package/packs/z-image-base-controlnet/install-runpod.sh +0 -1
  214. package/packs/z-image-base-controlnet/install-windows.bat +0 -1
  215. package/packs/z-image-base-controlnet/manifest.yaml +0 -1
  216. package/packs/z-image-base-img2img/install-runpod.sh +0 -1
  217. package/packs/z-image-base-img2img/install-windows.bat +0 -1
  218. package/packs/z-image-base-img2img/manifest.yaml +0 -1
  219. package/packs/z-image-base-inpaint/install-runpod.sh +0 -1
  220. package/packs/z-image-base-inpaint/install-windows.bat +0 -1
  221. package/packs/z-image-base-inpaint/manifest.yaml +0 -1
  222. package/packs/z-image-base-txt2img/install-runpod.sh +0 -1
  223. package/packs/z-image-base-txt2img/install-windows.bat +0 -1
  224. package/packs/z-image-base-txt2img/manifest.yaml +0 -1
  225. package/packs/z-image-turbo/install-runpod.sh +0 -1
  226. package/packs/z-image-turbo/install-windows.bat +0 -1
  227. package/packs/z-image-turbo/manifest.yaml +0 -1
  228. package/packs/z-image-turbo-combo/install-runpod.sh +0 -1
  229. package/packs/z-image-turbo-combo/install-windows.bat +0 -1
  230. package/packs/z-image-turbo-combo/manifest.yaml +0 -1
  231. package/packs/z-image-turbo-controlnet/install-runpod.sh +0 -1
  232. package/packs/z-image-turbo-controlnet/install-windows.bat +0 -1
  233. package/packs/z-image-turbo-controlnet/manifest.yaml +0 -1
  234. package/packs/z-image-turbo-detail-daemon/install-runpod.sh +0 -1
  235. package/packs/z-image-turbo-detail-daemon/install-windows.bat +0 -1
  236. package/packs/z-image-turbo-detail-daemon/manifest.yaml +0 -1
  237. package/packs/z-image-turbo-img2img/install-runpod.sh +0 -1
  238. package/packs/z-image-turbo-img2img/install-windows.bat +0 -1
  239. package/packs/z-image-turbo-img2img/manifest.yaml +0 -1
  240. package/packs/z-image-turbo-inpainting/install-runpod.sh +0 -1
  241. package/packs/z-image-turbo-inpainting/install-windows.bat +0 -1
  242. package/packs/z-image-turbo-inpainting/manifest.yaml +0 -1
  243. package/packs/z-image-turbo-txt2img/install-runpod.sh +0 -1
  244. package/packs/z-image-turbo-txt2img/install-windows.bat +0 -1
  245. package/packs/z-image-turbo-txt2img/manifest.yaml +0 -1
  246. package/packs/z-image-xy-plot/install-runpod.sh +0 -1
  247. package/packs/z-image-xy-plot/install-windows.bat +0 -1
  248. package/packs/z-image-xy-plot/manifest.yaml +0 -1
  249. package/plugin/skills/flux-txt2img/SKILL.md +9 -4
  250. package/plugin/skills/wan-scail-replacement/SKILL.md +95 -0
  251. package/scripts/sync-agents.mjs +18 -8
  252. package/scripts/test-packs.sh +8 -3
@@ -30,7 +30,7 @@ Flux is a guidance-distilled diffusion model family from Black Forest Labs. It u
30
30
  | Component | Node | Model | Notes |
31
31
  |-----------|------|-------|-------|
32
32
  | **UNET** | `UNETLoader` | `bigLove_klein1.safetensors` | 17.3GB, Klein 9B variant |
33
- | **CLIP** | `CLIPLoader` (type=`flux`) | `qwen_3_8b_fp8mixed.safetensors` | Qwen3-8B in text_encoders/ (8.3GB) |
33
+ | **CLIP** | `CLIPLoader` (type=`flux2`) | `qwen_3_8b_fp8mixed.safetensors` | Qwen3-8B in text_encoders/ (8.3GB). Use `flux2`, NOT `flux` — both exist in the enum and `flux` fails at the sampler |
34
34
  | **VAE** | `VAELoader` | `flux2-vae.safetensors` | Flux 2 specific VAE (321MB) |
35
35
 
36
36
  **Klein 9B vs Flux.1 Dev**: Klein uses Qwen3-8B text encoder (not T5XXL + CLIP-L). It has a different VAE (`flux2-vae.safetensors`). 9B distilled runs in 4 steps; 9B base needs ~50 steps at CFG 5.0. Fits in ~20GB VRAM with FP8.
@@ -195,11 +195,11 @@ Bad: "masterpiece, best quality, 1girl, cafe, paris"
195
195
  ```json
196
196
  {
197
197
  "1": { "class_type": "UNETLoader", "inputs": { "unet_name": "bigLove_klein1.safetensors", "weight_dtype": "default" }},
198
- "2": { "class_type": "CLIPLoader", "inputs": { "clip_name": "qwen_3_8b_fp8mixed.safetensors", "type": "flux" }},
198
+ "2": { "class_type": "CLIPLoader", "inputs": { "clip_name": "qwen_3_8b_fp8mixed.safetensors", "type": "flux2" }},
199
199
  "3": { "class_type": "VAELoader", "inputs": { "vae_name": "flux2-vae.safetensors" }},
200
200
  "4": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["2", 0], "text": "<prompt>" }},
201
201
  "5": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["4", 0] }},
202
- "6": { "class_type": "EmptyLatentImage", "inputs": { "width": 1024, "height": 1024, "batch_size": 1 }},
202
+ "6": { "class_type": "EmptyFlux2LatentImage", "inputs": { "width": 1024, "height": 1024, "batch_size": 1 }},
203
203
  "7": { "class_type": "KSampler", "inputs": {
204
204
  "model": ["1", 0],
205
205
  "positive": ["4", 0],
@@ -212,7 +212,12 @@ Bad: "masterpiece, best quality, 1girl, cafe, paris"
212
212
  }
213
213
  ```
214
214
 
215
- **Klein note**: Uses single `CLIPLoader` (not DualCLIPLoader) with `type: "flux"` and the Qwen3-8B text encoder from `text_encoders/`. The CLIP loader path resolves from `models/text_encoders/`.
215
+ **Klein note**: Uses single `CLIPLoader` (not DualCLIPLoader) with `type: "flux2"` and the Qwen3-8B text encoder from `text_encoders/`. The CLIP loader path resolves from `models/text_encoders/`.
216
+
217
+ **Two Flux-2-specific gotchas** (both fail at the KSampler, not at the loader, so the error points at the wrong node):
218
+ - `type` must be **`flux2`**, not `flux`. Both values exist in the CLIPLoader enum, so `flux` loads without complaint and then dies during sampling.
219
+ - Use **`EmptyFlux2LatentImage`**, not `EmptyLatentImage` — Flux 2 uses a different latent channel count.
220
+ - Klein **9B** pairs with the **Qwen3-8B** encoder (`qwen_3_8b*` from `Comfy-Org/vae-text-encorder-for-flux-klein-9b`). The similarly-named `qwen_3_4b` ships in the klein-**4b** repo and is for the 4B model. Mismatching them raises `mat1 and mat2 shapes cannot be multiplied (512x7680 and 12288x4096)` — 7680 = 2560x3 (4B hidden size) vs 12288 = 4096x3 (8B) — which reads as a confusing CLIP error rather than a wrong-file error.
216
221
 
217
222
  ## Complete Workflow: Flux.1 Dev + Turbo LoRA (4-Step)
218
223
 
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: wan-scail-replacement
3
+ description: SCAIL-2 in-video character replacement on WAN 2.1 — WanSCAILToVideo + SCAIL2ColoredMask + SAM3, the reference-image framing→scale rule, and the tuning/compositing pitfalls
4
+ globs:
5
+ - "**/*.json"
6
+ ---
7
+
8
+ # SCAIL-2 In-Video Character Replacement (WAN 2.1)
9
+
10
+ SCAIL-2 (zai-org, on WAN 2.1 14B) replaces the person in a driving video with a
11
+ character you supply as a reference image — end-to-end, with no pose maps, and
12
+ with multi-character support. It is the successor to WAN Animate / motion
13
+ transfer for the "swap the subject, keep the motion" job. The official ComfyUI
14
+ template is **`video_wan21_scail2_character_replacement_int8`**, built around
15
+ `WanSCAILToVideo` (+ `SCAIL2ColoredMask`) with a SAM3 mask driving *where* the
16
+ character goes.
17
+
18
+ This skill documents the non-obvious behaviours that cost a full multi-minute
19
+ render to discover. It is not a from-scratch graph — start from the official
20
+ template and apply the guidance below.
21
+
22
+ ## The one rule that costs a re-render: reference framing controls SCALE
23
+
24
+ **In `replacement_mode: true`, the reference image's FRAMING controls the output
25
+ character's SIZE — not just its appearance.** The SAM3 mask controls *where* the
26
+ character is placed; the reference image controls *how large*.
27
+
28
+ Measured on a 720x1280 driving clip where the subject occupied ~30% of frame
29
+ height (subject bbox 363 px):
30
+
31
+ | Reference framing | Person bbox in output | vs driving subject |
32
+ |---|---|---|
33
+ | Full-bleed portrait (person ~93% of frame) | 621 px | **1.71x oversized** |
34
+ | Reframed (person ~34% of frame) | 364 px | **1.003x — correct** |
35
+
36
+ After reframing, top/bottom registration matched the driving subject within 1 px
37
+ (the character stands on the same ground plane at the same height). Pose transfer
38
+ was correct in *both* cases — only the scale was wrong, which makes it easy to
39
+ misread as "the model works" until you A/B against the source.
40
+
41
+ **Guidance — pad/reframe the reference before you render:**
42
+
43
+ > Pad/reframe the reference image onto a canvas at the working resolution so the
44
+ > person occupies roughly the same fraction of frame height as the subject in the
45
+ > driving video. A full-bleed portrait reference against a wide-shot driving clip
46
+ > renders the character oversized in proportion to the framing mismatch.
47
+
48
+ Why it's a trap: this isn't stated in the template's on-canvas notes, and it does
49
+ not surface in the popular Civitai motion-transfer workflows — those run
50
+ *animation* mode, where the reference legitimately fills the frame.
51
+
52
+ ## Tuning trade-off: distill LoRA strength / shift leaks driving-subject detail
53
+
54
+ Running the `lightx2v` distill LoRA at `0.8` with `ModelSamplingSD3 shift 5` (the
55
+ settings the popular Civitai workflow uses) improves colour and detail versus
56
+ `1.0` / `shift 8` — but it also increases adherence to the driving video enough
57
+ that **original-subject details bleed onto the replacement character.** In one
58
+ run the original golfer's neon-yellow shoe appeared on a replacement character
59
+ who wears white shoes in the reference (same seed, same reference, only those two
60
+ params changed). If you see source details you didn't ask for, raise the LoRA
61
+ strength / shift back toward `1.0` / `shift 8`.
62
+
63
+ ## Don't "fix" colour with post-hoc compositing — it's a regression
64
+
65
+ The raw SCAIL-2 output shows a measurable colour error (background ~-5 per channel
66
+ from the VAE round-trip; the character loses red ~2.4x faster than green, which
67
+ reads as a slight green cast). It is tempting to composite the generated character
68
+ back over the original plate through the SAM3 mask to "correct" it. **Don't** —
69
+ it measures better but looks worse:
70
+
71
+ - The mask boundary produces an obvious halo.
72
+ - Layering the original plate's props (e.g. a golf club) over generated hands
73
+ severs the grip relationship the model had solved coherently.
74
+
75
+ SCAIL-2 resolves colour, edges, grip and occlusion *jointly*; correcting any one
76
+ of them in isolation breaks the others. Leave the raw output alone.
77
+
78
+ ## Models (reference set)
79
+
80
+ The template's int8 build was exercised with:
81
+
82
+ - `wan2.1_14B_SCAIL_2_int8_convrot` — SCAIL-2 model
83
+ - `wan2.1_SCAIL_2_DPO_lora_bf16` — DPO LoRA
84
+ - `lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16` — distill LoRA (see tuning note)
85
+ - `Wan2_1_VAE_bf16`
86
+ - `umt5_xxl_fp8_e4m3fn_scaled` — text encoder
87
+ - `clip_vision_h`
88
+ - `sam3.1_multiplex_fp16` — SAM3 mask model
89
+
90
+ VRAM: ~22.2 GB peak at 576x1024 / 81-frame chunks on a 24 GB card.
91
+
92
+ ## See also
93
+
94
+ - `wan-t2v-video`, `wan-flf-video` — other WAN 2.x video pipelines
95
+ - `director` — multi-shot scene direction for video pipelines
@@ -57,9 +57,25 @@ ${body.trim()}`;
57
57
  const skillsDir = path.join(PLUGIN_DIR, 'skills');
58
58
  if (fs.existsSync(skillsDir)) {
59
59
  for (const skillName of fs.readdirSync(skillsDir)) {
60
- const srcPath = path.join(skillsDir, skillName, 'SKILL.md');
61
- const destPath = path.join(AGENTS_DIR, 'skills', skillName, 'SKILL.md');
60
+ const skillSrcDir = path.join(skillsDir, skillName);
61
+ if (!fs.statSync(skillSrcDir).isDirectory()) continue;
62
+ const srcPath = path.join(skillSrcDir, 'SKILL.md');
63
+ const destSkillDir = path.join(AGENTS_DIR, 'skills', skillName);
64
+ const destPath = path.join(destSkillDir, 'SKILL.md');
62
65
  processSkillOrAgent(srcPath, destPath, skillName, false);
66
+
67
+ // Also copy sibling asset folders the SKILL.md links to (references/, docs/).
68
+ // Without this the synced bundle keeps the SKILL.md but drops the docs it
69
+ // points at, leaving dangling relative-doc links in .agents/skills/<name>/
70
+ // (the class of breakage reported in #552).
71
+ for (const sub of ['references', 'docs']) {
72
+ const subSrc = path.join(skillSrcDir, sub);
73
+ if (fs.existsSync(subSrc) && fs.statSync(subSrc).isDirectory()) {
74
+ const subDest = path.join(destSkillDir, sub);
75
+ fs.cpSync(subSrc, subDest, { recursive: true });
76
+ console.log(`Synced ${subSrc} -> ${subDest}`);
77
+ }
78
+ }
63
79
  }
64
80
  }
65
81
 
@@ -129,12 +145,6 @@ const mcpConfig = {
129
145
  CIVITAI_API_TOKEN: ""
130
146
  }
131
147
  },
132
- civitai: {
133
- url: "https://mcp.civitai.com/mcp",
134
- headers: {
135
- Authorization: "Bearer ${CIVITAI_API_TOKEN:-}"
136
- }
137
- },
138
148
  huggingface: {
139
149
  url: "https://huggingface.co/mcp",
140
150
  headers: {
@@ -43,9 +43,14 @@ for dir in "$PACKS"/*/; do
43
43
  ( cd "$root" && PATH="$BIN:$PATH" bash "$sh" ) > "$WORK/r1.log" 2>&1
44
44
  nodes=$(find "$root/custom_nodes" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
45
45
  models=$(find "$root/models" -type f | wc -l | tr -d ' ')
46
- echo " nodes=$nodes models=$models"
47
- if [ "$nodes" -lt 1 ] || [ "$models" -lt 1 ]; then
48
- echo " [FAIL] expected >=1 node and >=1 model staged"; fail=1
46
+ # Expected node count is derived from the generated installer itself (one
47
+ # `clone` invocation per custom_nodes entry). A pack may legitimately declare
48
+ # zero custom nodes (all nodes native to core ComfyUI) — assert the installer
49
+ # staged exactly what it declares rather than a blanket >=1.
50
+ want_nodes=$(grep -cE '^clone ' "$sh" || true)
51
+ echo " nodes=$nodes/$want_nodes models=$models"
52
+ if [ "$nodes" -ne "$want_nodes" ] || [ "$models" -lt 1 ]; then
53
+ echo " [FAIL] expected $want_nodes node(s) and >=1 model staged"; fail=1
49
54
  fi
50
55
 
51
56
  echo "== $name: second run (idempotency) =="