@optima-chat/comfy-cli 0.4.2 → 0.5.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/.claude/settings.local.json +39 -0
- package/.claude/skills/comfy-cli/SKILL.md +441 -0
- package/README.md +41 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +108 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"WebFetch(domain:github.com)",
|
|
5
|
+
"WebFetch(domain:raw.githubusercontent.com)",
|
|
6
|
+
"Bash(mkdir:*)",
|
|
7
|
+
"Bash(git init:*)",
|
|
8
|
+
"Bash(gh repo create:*)",
|
|
9
|
+
"Bash(git push:*)",
|
|
10
|
+
"Bash(git add:*)",
|
|
11
|
+
"Bash(git commit:*)",
|
|
12
|
+
"Bash(gh api:*)",
|
|
13
|
+
"Bash(npm install)",
|
|
14
|
+
"Bash(npm run build:*)",
|
|
15
|
+
"Bash(npm publish:*)",
|
|
16
|
+
"Bash(npm install:*)",
|
|
17
|
+
"Bash(find:*)",
|
|
18
|
+
"Bash(for:*)",
|
|
19
|
+
"Bash(do)",
|
|
20
|
+
"Bash(done)",
|
|
21
|
+
"Bash(comfy:*)",
|
|
22
|
+
"Bash(cat:*)",
|
|
23
|
+
"Read(//tmp/**)",
|
|
24
|
+
"Bash(curl -o /tmp/banner-cartoon.png \"http://dev.optima.chat:8188/view?filename=comfy-cli_00016_.png&type=output\")",
|
|
25
|
+
"Bash(npm:*)",
|
|
26
|
+
"Bash(gh secret set:*)",
|
|
27
|
+
"Bash(gh run list:*)",
|
|
28
|
+
"Bash(git tag:*)",
|
|
29
|
+
"Bash(gh release view:*)",
|
|
30
|
+
"Bash(node:*)",
|
|
31
|
+
"Bash(gh issue view:*)",
|
|
32
|
+
"Bash(python3:*)",
|
|
33
|
+
"Bash(git reset:*)",
|
|
34
|
+
"Bash(git checkout:*)"
|
|
35
|
+
],
|
|
36
|
+
"deny": [],
|
|
37
|
+
"ask": []
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: comfy-cli
|
|
3
|
+
description: "ComfyUI CLI tool for AI agents. ALWAYS use when user wants to: generate images (生成图片/画图/图像/生成画), edit images (编辑图片/修改图片/图生图/改图), create videos (生成视频/图生视频/制作视频), manage ComfyUI workflows (工作流/ComfyUI). Uses 'comfy generate', 'comfy edit', 'comfy video' commands."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ComfyUI CLI - AI 图像与视频生成工具
|
|
7
|
+
|
|
8
|
+
## 何时使用此 Skill
|
|
9
|
+
|
|
10
|
+
在以下情况使用此 Skill:
|
|
11
|
+
- 用户想要从文本提示词生成图像(文生图)
|
|
12
|
+
- 用户想要编辑或转换现有图像(图生图)
|
|
13
|
+
- 用户想要从图像创建视频(图生视频)
|
|
14
|
+
- 用户询问 ComfyUI 工作流、队列状态或模型
|
|
15
|
+
- 用户提到:生成图片、画图、图像处理、视频生成、ComfyUI
|
|
16
|
+
|
|
17
|
+
## 可用命令
|
|
18
|
+
|
|
19
|
+
### 1. 生成图像:`comfy generate`
|
|
20
|
+
|
|
21
|
+
使用 Stable Diffusion / FLUX 模型从文本提示词生成图像。
|
|
22
|
+
|
|
23
|
+
**语法:**
|
|
24
|
+
```bash
|
|
25
|
+
comfy generate "提示词" [选项]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**参数:**
|
|
29
|
+
- `提示词`: 要生成图像的文本描述
|
|
30
|
+
- `--width <数字>`: 图像宽度(默认:1024)
|
|
31
|
+
- `--height <数字>`: 图像高度(默认:1024)
|
|
32
|
+
- `--no-wait`: 提交后立即返回,不等待完成
|
|
33
|
+
- `--pretty`: 人类可读的表格格式输出(默认:JSON)
|
|
34
|
+
|
|
35
|
+
**返回:**
|
|
36
|
+
- 包含 `prompt_id`、`status`、`outputs`(图像文件路径)的 JSON
|
|
37
|
+
- 默认行为:等待完成并显示实时进度
|
|
38
|
+
|
|
39
|
+
**使用场景:**
|
|
40
|
+
- 用户要求生成/创建图像
|
|
41
|
+
- 用户提供图像描述
|
|
42
|
+
- 文本生成图像
|
|
43
|
+
|
|
44
|
+
### 2. 编辑图像:`comfy edit`
|
|
45
|
+
|
|
46
|
+
使用文本提示词编辑或转换现有图像(图生图)。
|
|
47
|
+
|
|
48
|
+
**语法:**
|
|
49
|
+
```bash
|
|
50
|
+
comfy edit <图像路径> "提示词" [选项]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**参数:**
|
|
54
|
+
- `图像路径`: 输入图像文件的路径
|
|
55
|
+
- `提示词`: 转换描述(例如:"动漫风格"、"添加更多细节")
|
|
56
|
+
- `--no-wait`: 提交后立即返回,不等待完成
|
|
57
|
+
- `--pretty`: 人类可读的表格格式输出(默认:JSON)
|
|
58
|
+
|
|
59
|
+
**返回:**
|
|
60
|
+
- 包含 `prompt_id`、`status`、`outputs`(编辑后图像文件路径)的 JSON
|
|
61
|
+
- 默认行为:等待完成并显示实时进度
|
|
62
|
+
|
|
63
|
+
**使用场景:**
|
|
64
|
+
- 用户想要修改/编辑现有图像
|
|
65
|
+
- 用户想要应用风格转换
|
|
66
|
+
- 图像到图像的转换
|
|
67
|
+
|
|
68
|
+
### 3. 创建视频:`comfy video`
|
|
69
|
+
|
|
70
|
+
使用 I2V(图像到视频)模型从图像生成视频。
|
|
71
|
+
|
|
72
|
+
**语法:**
|
|
73
|
+
```bash
|
|
74
|
+
comfy video <图像路径> [选项]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**参数:**
|
|
78
|
+
- `图像路径`: 输入图像文件的路径
|
|
79
|
+
- `-p, --prompt <文本>`: 运动描述提示词(可选)
|
|
80
|
+
- `-n, --negative <文本>`: 负面提示词(可选)
|
|
81
|
+
- `--width <数字>`: 视频宽度(默认:512)
|
|
82
|
+
- `--height <数字>`: 视频高度(默认:512)
|
|
83
|
+
- `--no-wait`: 提交后立即返回,不等待完成
|
|
84
|
+
- `--pretty`: 人类可读的表格格式输出(默认:JSON)
|
|
85
|
+
|
|
86
|
+
**返回:**
|
|
87
|
+
- 包含 `prompt_id`、`status`、`outputs`(视频文件路径)的 JSON
|
|
88
|
+
- 默认行为:等待完成并显示实时进度
|
|
89
|
+
|
|
90
|
+
**使用场景:**
|
|
91
|
+
- 用户想要为静态图像添加动画
|
|
92
|
+
- 用户想要从图像创建视频
|
|
93
|
+
- 图像到视频的生成
|
|
94
|
+
|
|
95
|
+
### 4. 下载结果:`comfy download`
|
|
96
|
+
|
|
97
|
+
将生成的图像/视频下载到本地目录。
|
|
98
|
+
|
|
99
|
+
**语法:**
|
|
100
|
+
```bash
|
|
101
|
+
comfy download <PROMPT_ID> [选项]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**参数:**
|
|
105
|
+
- `PROMPT_ID`: 从 generate/edit/video 命令返回的提示词 ID
|
|
106
|
+
- `-o, --output <目录>`: 输出目录(默认:./comfy-output)
|
|
107
|
+
- `--pretty`: 人类可读的输出
|
|
108
|
+
|
|
109
|
+
**返回:**
|
|
110
|
+
- 包含已下载文件路径的 JSON
|
|
111
|
+
|
|
112
|
+
### 5. 工作流管理
|
|
113
|
+
|
|
114
|
+
**列出工作流历史:**
|
|
115
|
+
```bash
|
|
116
|
+
comfy workflow list [--limit 10] [--pretty]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**获取工作流结果:**
|
|
120
|
+
```bash
|
|
121
|
+
comfy workflow get <PROMPT_ID> [--pretty]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**提交自定义工作流:**
|
|
125
|
+
```bash
|
|
126
|
+
comfy workflow submit <工作流文件> [--pretty]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 6. 队列管理
|
|
130
|
+
|
|
131
|
+
**检查队列状态:**
|
|
132
|
+
```bash
|
|
133
|
+
comfy queue status [--pretty]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**清空队列:**
|
|
137
|
+
```bash
|
|
138
|
+
comfy queue clear --confirm [--pretty]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**删除队列项:**
|
|
142
|
+
```bash
|
|
143
|
+
comfy queue delete <项目ID> [--pretty]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**中断当前执行:**
|
|
147
|
+
```bash
|
|
148
|
+
comfy interrupt [--pretty]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 7. 模型管理
|
|
152
|
+
|
|
153
|
+
**列出可用模型:**
|
|
154
|
+
```bash
|
|
155
|
+
comfy model list [--type checkpoints|loras|vae|...] [--pretty]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**模型类型:**
|
|
159
|
+
- `checkpoints`: Stable Diffusion / FLUX 检查点模型
|
|
160
|
+
- `loras`: LoRA 模型
|
|
161
|
+
- `vae`: VAE 模型
|
|
162
|
+
- `controlnet`: ControlNet 模型
|
|
163
|
+
- `upscale_models`: 放大模型
|
|
164
|
+
|
|
165
|
+
### 8. 系统信息
|
|
166
|
+
|
|
167
|
+
**获取系统状态:**
|
|
168
|
+
```bash
|
|
169
|
+
comfy system stats [--pretty]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
返回:GPU/CPU 使用率、内存、设备信息
|
|
173
|
+
|
|
174
|
+
### 9. 配置
|
|
175
|
+
|
|
176
|
+
**设置 ComfyUI 服务器地址(首次使用必需):**
|
|
177
|
+
```bash
|
|
178
|
+
comfy config set server http://localhost:8188
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**查看当前配置:**
|
|
182
|
+
```bash
|
|
183
|
+
comfy config list [--pretty]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**其他配置选项:**
|
|
187
|
+
```bash
|
|
188
|
+
comfy config set timeout 30000
|
|
189
|
+
comfy config set outputDir ./my-outputs
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## 输出格式
|
|
193
|
+
|
|
194
|
+
所有命令默认输出 **JSON 格式**(AI 友好,减少 50%+ token):
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"success": true,
|
|
199
|
+
"data": {
|
|
200
|
+
"prompt_id": "abc123",
|
|
201
|
+
"status": "completed",
|
|
202
|
+
"outputs": ["./comfy-output/image_001.png"]
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
使用 `--pretty` 标志获取带颜色的人类可读表格格式。
|
|
208
|
+
|
|
209
|
+
## 工作流示例
|
|
210
|
+
|
|
211
|
+
### 示例 1:快速生成图像
|
|
212
|
+
**用户**:"帮我生成一张猫的图片"
|
|
213
|
+
|
|
214
|
+
**助手**:
|
|
215
|
+
```bash
|
|
216
|
+
comfy generate "a cute cat"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**结果**:返回包含 `prompt_id` 和 `outputs`(包含图像文件路径)的 JSON。默认行为等待完成并通过 WebSocket 显示实时进度。
|
|
220
|
+
|
|
221
|
+
### 示例 2:高分辨率图像
|
|
222
|
+
**用户**:"生成一张 1920x1080 的风景画"
|
|
223
|
+
|
|
224
|
+
**助手**:
|
|
225
|
+
```bash
|
|
226
|
+
comfy generate "beautiful landscape with mountains and lake" --width 1920 --height 1080
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### 示例 3:图像风格转换
|
|
230
|
+
**用户**:"把这张图片改成动漫风格"
|
|
231
|
+
|
|
232
|
+
**助手**(假设用户上传了 `photo.jpg`):
|
|
233
|
+
```bash
|
|
234
|
+
comfy edit photo.jpg "anime style"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 示例 4:添加细节的图像编辑
|
|
238
|
+
**用户**:"给这张照片添加更多细节,提高质量"
|
|
239
|
+
|
|
240
|
+
**助手**:
|
|
241
|
+
```bash
|
|
242
|
+
comfy edit photo.jpg "add more details, enhance quality, 4k resolution"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 示例 5:视频创建
|
|
246
|
+
**用户**:"用这张人物图片生成一个视频"
|
|
247
|
+
|
|
248
|
+
**助手**:
|
|
249
|
+
```bash
|
|
250
|
+
comfy video portrait.png --prompt "smooth motion, natural movement"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### 示例 6:非阻塞生成
|
|
254
|
+
**用户**:"生成一张图片,不用等完成"
|
|
255
|
+
|
|
256
|
+
**助手**:
|
|
257
|
+
```bash
|
|
258
|
+
comfy generate "sunset over ocean" --no-wait
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
立即返回 `prompt_id`。稍后检查状态:
|
|
262
|
+
```bash
|
|
263
|
+
comfy workflow get <prompt_id>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 示例 7:批量图像生成
|
|
267
|
+
**用户**:"帮我生成 3 张不同的猫的图片"
|
|
268
|
+
|
|
269
|
+
**助手**:
|
|
270
|
+
```bash
|
|
271
|
+
comfy generate "a cute cat sitting" --no-wait
|
|
272
|
+
comfy generate "a cat playing with toys" --no-wait
|
|
273
|
+
comfy generate "a cat sleeping on a couch" --no-wait
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
然后检查队列状态:
|
|
277
|
+
```bash
|
|
278
|
+
comfy queue status
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### 示例 8:检查模型后生成
|
|
282
|
+
**用户**:"检查一下有哪些可用的模型,然后生成图片"
|
|
283
|
+
|
|
284
|
+
**助手**:
|
|
285
|
+
```bash
|
|
286
|
+
# 首先检查可用模型
|
|
287
|
+
comfy model list --type checkpoints
|
|
288
|
+
|
|
289
|
+
# 然后使用适当的提示词生成
|
|
290
|
+
comfy generate "a beautiful portrait"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 示例 9:完整工作流
|
|
294
|
+
**用户**:"生成一张图片,编辑它,然后生成视频"
|
|
295
|
+
|
|
296
|
+
**助手**:
|
|
297
|
+
```bash
|
|
298
|
+
# 1. 生成基础图像
|
|
299
|
+
comfy generate "a portrait of a woman"
|
|
300
|
+
# 输出:./comfy-output/image_001.png
|
|
301
|
+
|
|
302
|
+
# 2. 编辑图像
|
|
303
|
+
comfy edit ./comfy-output/image_001.png "add cinematic lighting"
|
|
304
|
+
# 输出:./comfy-output/image_002.png
|
|
305
|
+
|
|
306
|
+
# 3. 从编辑后的图像创建视频
|
|
307
|
+
comfy video ./comfy-output/image_002.png --prompt "slow motion, cinematic"
|
|
308
|
+
# 输出:./comfy-output/video_001.mp4
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## 最佳实践
|
|
312
|
+
|
|
313
|
+
### 1. 输出格式选择
|
|
314
|
+
- **默认(JSON)**:最适合 AI 代理、编程解析,减少 token
|
|
315
|
+
- **Pretty 模式**:最适合人工检查、调试、视觉反馈
|
|
316
|
+
- 当用户明确要求查看格式化输出时使用 `--pretty`
|
|
317
|
+
|
|
318
|
+
### 2. 等待策略
|
|
319
|
+
- **默认(wait)**:推荐用于交互式工作流,显示实时进度
|
|
320
|
+
- **--no-wait**:用于提交多个任务、批处理或耗时操作
|
|
321
|
+
- 使用 `--no-wait` 后,用 `comfy workflow get <prompt_id>` 检查完成状态
|
|
322
|
+
|
|
323
|
+
### 3. 错误处理
|
|
324
|
+
- 始终检查 JSON 响应中的 `success` 字段
|
|
325
|
+
- 如果发生错误,检查:
|
|
326
|
+
1. ComfyUI 服务器是否运行:`comfy system stats`
|
|
327
|
+
2. 服务器地址是否正确:`comfy config list`
|
|
328
|
+
3. 队列是否卡住:`comfy queue status`
|
|
329
|
+
|
|
330
|
+
### 4. 性能优化
|
|
331
|
+
- 使用适当的图像尺寸(SD 用 1024x1024,视频用 512x512)
|
|
332
|
+
- 批量操作时考虑使用 `--no-wait`
|
|
333
|
+
- 大型生成前检查系统资源:`comfy system stats`
|
|
334
|
+
|
|
335
|
+
### 5. 首次设置
|
|
336
|
+
首次使用前务必配置服务器地址:
|
|
337
|
+
```bash
|
|
338
|
+
comfy config set server http://localhost:8188
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## 常用模式
|
|
342
|
+
|
|
343
|
+
### 模式 1:生成并下载
|
|
344
|
+
```bash
|
|
345
|
+
# 生成图像
|
|
346
|
+
comfy generate "a cat" --no-wait
|
|
347
|
+
# 返回:{ "prompt_id": "abc123" }
|
|
348
|
+
|
|
349
|
+
# 稍后下载结果
|
|
350
|
+
comfy download abc123
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 模式 2:迭代编辑
|
|
354
|
+
```bash
|
|
355
|
+
# 从基础图像开始
|
|
356
|
+
comfy generate "a portrait"
|
|
357
|
+
|
|
358
|
+
# 编辑步骤 1
|
|
359
|
+
comfy edit output_001.png "add dramatic lighting"
|
|
360
|
+
|
|
361
|
+
# 编辑步骤 2
|
|
362
|
+
comfy edit output_002.png "increase contrast"
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### 模式 3:队列管理
|
|
366
|
+
```bash
|
|
367
|
+
# 提交多个任务
|
|
368
|
+
comfy generate "cat" --no-wait
|
|
369
|
+
comfy generate "dog" --no-wait
|
|
370
|
+
comfy generate "bird" --no-wait
|
|
371
|
+
|
|
372
|
+
# 检查队列
|
|
373
|
+
comfy queue status
|
|
374
|
+
|
|
375
|
+
# 如需要,清空队列
|
|
376
|
+
comfy queue clear --confirm
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## 提示
|
|
380
|
+
|
|
381
|
+
**服务器连接:**
|
|
382
|
+
- 默认服务器:`http://localhost:8188`
|
|
383
|
+
- 远程服务器:`comfy config set server http://remote-ip:8188`
|
|
384
|
+
- 检查连接:`comfy system stats`
|
|
385
|
+
|
|
386
|
+
**模型选择:**
|
|
387
|
+
- ComfyUI 自动使用默认检查点模型
|
|
388
|
+
- 检查可用模型:`comfy model list --type checkpoints`
|
|
389
|
+
- 自定义工作流:`comfy workflow submit custom.json`
|
|
390
|
+
|
|
391
|
+
**输出文件:**
|
|
392
|
+
- 默认输出目录:`./comfy-output/`
|
|
393
|
+
- 修改:`comfy config set outputDir ./my-outputs`
|
|
394
|
+
- 下载的文件保留原始 ComfyUI 文件名
|
|
395
|
+
|
|
396
|
+
**实时进度:**
|
|
397
|
+
- 默认等待模式通过 WebSocket 显示进度
|
|
398
|
+
- 进度包括:节点执行、当前步骤、百分比
|
|
399
|
+
- 使用 `--no-wait` 跳过进度监控
|
|
400
|
+
|
|
401
|
+
**中断:**
|
|
402
|
+
- 停止当前生成:`comfy interrupt`
|
|
403
|
+
- 清空待处理任务:`comfy queue clear --confirm`
|
|
404
|
+
|
|
405
|
+
**JSON 解析:**
|
|
406
|
+
- 所有 JSON 响应遵循一致的结构
|
|
407
|
+
- 首先检查 `success` 字段
|
|
408
|
+
- 通过 `data` 字段访问数据
|
|
409
|
+
- 错误包含带详细信息的 `error` 字段
|
|
410
|
+
|
|
411
|
+
## 配置
|
|
412
|
+
|
|
413
|
+
配置文件位置:`~/.comfy-cli/config.json`
|
|
414
|
+
|
|
415
|
+
**可用设置:**
|
|
416
|
+
- `server`: ComfyUI 服务器地址(必需)
|
|
417
|
+
- `timeout`: 请求超时时间(毫秒,默认:30000)
|
|
418
|
+
- `autoConnect`: 自动连接到 WebSocket(默认:true)
|
|
419
|
+
- `outputDir`: 默认输出目录(默认:`./comfy-output`)
|
|
420
|
+
|
|
421
|
+
## 故障排除
|
|
422
|
+
|
|
423
|
+
**"Connection refused" 错误:**
|
|
424
|
+
- 确保 ComfyUI 正在运行:在浏览器检查 http://localhost:8188
|
|
425
|
+
- 验证服务器地址:`comfy config list`
|
|
426
|
+
- 测试连接:`comfy system stats`
|
|
427
|
+
|
|
428
|
+
**"Workflow failed" 错误:**
|
|
429
|
+
- 检查 JSON 响应中的错误详情
|
|
430
|
+
- 验证模型文件可用:`comfy model list`
|
|
431
|
+
- 检查 ComfyUI 控制台日志
|
|
432
|
+
|
|
433
|
+
**生成缓慢:**
|
|
434
|
+
- 检查 GPU 可用性:`comfy system stats`
|
|
435
|
+
- 降低图像分辨率
|
|
436
|
+
- 检查队列:`comfy queue status`
|
|
437
|
+
|
|
438
|
+
**输出文件丢失:**
|
|
439
|
+
- 检查输出目录:`comfy config list`
|
|
440
|
+
- 验证生成已完成:`comfy workflow get <prompt_id>`
|
|
441
|
+
- 使用 `comfy download <prompt_id>` 重新下载
|
package/README.md
CHANGED
|
@@ -39,6 +39,41 @@ comfy queue status
|
|
|
39
39
|
comfy model list --type checkpoints
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
## Claude Code 集成
|
|
43
|
+
|
|
44
|
+
ComfyUI CLI 支持 Claude Code Skills 自动发现,让 Claude 能够直接通过自然语言调用命令。
|
|
45
|
+
|
|
46
|
+
### 初始化 Skill
|
|
47
|
+
|
|
48
|
+
在你的项目中运行:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
comfy init
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
这会在项目中创建 `.claude/skills/comfy-cli/` 目录和 Skill 配置文件。
|
|
55
|
+
|
|
56
|
+
### 使用示例
|
|
57
|
+
|
|
58
|
+
打开 Claude Code 后,直接对话:
|
|
59
|
+
|
|
60
|
+
- **"帮我生成一张猫的图片"** → Claude 自动调用 `comfy generate "a cat"`
|
|
61
|
+
- **"把这张图片改成动漫风格"** → Claude 调用 `comfy edit <file> "anime style"`
|
|
62
|
+
- **"用这张图片生成视频"** → Claude 调用 `comfy video <file>`
|
|
63
|
+
|
|
64
|
+
### Skill 管理
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# 查看已安装的 Skill
|
|
68
|
+
ls .claude/skills/
|
|
69
|
+
|
|
70
|
+
# 重新初始化(覆盖)
|
|
71
|
+
comfy init --force
|
|
72
|
+
|
|
73
|
+
# 删除 Skill
|
|
74
|
+
rm -rf .claude/skills/comfy-cli/
|
|
75
|
+
```
|
|
76
|
+
|
|
42
77
|
## 输出格式
|
|
43
78
|
|
|
44
79
|
默认输出 **JSON 格式**(AI 友好),支持两种模式:
|
|
@@ -209,6 +244,12 @@ comfy config reset --confirm
|
|
|
209
244
|
|
|
210
245
|
## 在 Claude Code 中使用
|
|
211
246
|
|
|
247
|
+
### 方式一:使用 Skills(推荐)
|
|
248
|
+
|
|
249
|
+
在项目中运行 `comfy init` 创建 Skill 配置,Claude 会自动发现并使用。详见 [Claude Code 集成](#claude-code-集成) 章节。
|
|
250
|
+
|
|
251
|
+
### 方式二:全局配置
|
|
252
|
+
|
|
212
253
|
在你的 `~/.claude/CLAUDE.md` 中添加:
|
|
213
254
|
|
|
214
255
|
```markdown
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA8FnD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { mkdir, writeFile, access, readFile } from 'fs/promises';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
5
|
+
import { success, info } from '../utils/logger.js';
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
/**
|
|
8
|
+
* Load skill templates from package files
|
|
9
|
+
*/
|
|
10
|
+
async function loadSkillTemplates() {
|
|
11
|
+
try {
|
|
12
|
+
const skillTemplateDir = join(__dirname, '../../.claude/skills/comfy-cli');
|
|
13
|
+
const skillContent = await readFile(join(skillTemplateDir, 'SKILL.md'), 'utf-8');
|
|
14
|
+
return {
|
|
15
|
+
'comfy-cli.md': skillContent,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
throw new Error(`Failed to load skill templates: ${error instanceof Error ? error.message : String(error)}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function registerInitCommand(program) {
|
|
23
|
+
program
|
|
24
|
+
.command('init')
|
|
25
|
+
.description('Initialize Claude Code Skills in current directory')
|
|
26
|
+
.option('-f, --force', 'Overwrite existing skills', false)
|
|
27
|
+
.action(async (options) => {
|
|
28
|
+
const pretty = isPrettyMode(options);
|
|
29
|
+
try {
|
|
30
|
+
const skillsDir = join(process.cwd(), '.claude', 'skills');
|
|
31
|
+
// Check if .claude/skills already exists
|
|
32
|
+
let exists = false;
|
|
33
|
+
try {
|
|
34
|
+
await access(skillsDir);
|
|
35
|
+
exists = true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Directory doesn't exist, which is fine
|
|
39
|
+
}
|
|
40
|
+
if (exists && !options.force) {
|
|
41
|
+
if (pretty) {
|
|
42
|
+
info('✅ Claude Code Skills already configured in this directory.');
|
|
43
|
+
info(`\n📁 Skills directory: ${skillsDir}`);
|
|
44
|
+
info('\n💡 Use --force to overwrite existing skills.');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
outputSuccess({
|
|
48
|
+
message: 'Skills already configured',
|
|
49
|
+
skills_directory: skillsDir,
|
|
50
|
+
hint: 'Use --force to overwrite',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Create .claude/skills directory
|
|
56
|
+
await mkdir(skillsDir, { recursive: true });
|
|
57
|
+
// Load skill templates from package files
|
|
58
|
+
const skillTemplates = await loadSkillTemplates();
|
|
59
|
+
// Write skills files
|
|
60
|
+
const createdSkills = [];
|
|
61
|
+
for (const [skillName, content] of Object.entries(skillTemplates)) {
|
|
62
|
+
// Create skill directory (e.g., .claude/skills/comfy-cli/)
|
|
63
|
+
const skillDirName = skillName.replace('.md', '');
|
|
64
|
+
const skillDirPath = join(skillsDir, skillDirName);
|
|
65
|
+
await mkdir(skillDirPath, { recursive: true });
|
|
66
|
+
// Create SKILL.md file inside the directory
|
|
67
|
+
const skillFilePath = join(skillDirPath, 'SKILL.md');
|
|
68
|
+
await writeFile(skillFilePath, content);
|
|
69
|
+
createdSkills.push(skillDirName);
|
|
70
|
+
}
|
|
71
|
+
// Success message
|
|
72
|
+
if (pretty) {
|
|
73
|
+
success('✅ ComfyUI CLI Skills initialized successfully!\n');
|
|
74
|
+
info(`📁 Skills directory: ${skillsDir}`);
|
|
75
|
+
info('📦 Created skills:');
|
|
76
|
+
createdSkills.forEach((skill) => {
|
|
77
|
+
info(` - ${skill}/`);
|
|
78
|
+
});
|
|
79
|
+
info('\n🎯 Next steps:');
|
|
80
|
+
info(' 1. Open this project in Claude Code');
|
|
81
|
+
info(' 2. Claude will automatically discover the ComfyUI CLI skill');
|
|
82
|
+
info(' 3. Ask Claude questions like:');
|
|
83
|
+
info(' • "帮我生成一张猫的图片"');
|
|
84
|
+
info(' • "把这张图片改成动漫风格"');
|
|
85
|
+
info(' • "用这张图片生成一个视频"');
|
|
86
|
+
info('\n💡 Claude will use ComfyUI CLI automatically!');
|
|
87
|
+
info('\n📚 Learn more: https://github.com/Optima-Chat/comfy-cli');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
outputSuccess({
|
|
91
|
+
message: 'Skills initialized successfully',
|
|
92
|
+
skills_directory: skillsDir,
|
|
93
|
+
created_skills: createdSkills,
|
|
94
|
+
next_steps: [
|
|
95
|
+
'Open this project in Claude Code',
|
|
96
|
+
'Claude will auto-discover ComfyUI CLI skill',
|
|
97
|
+
'Ask Claude to generate/edit images or create videos',
|
|
98
|
+
],
|
|
99
|
+
docs: 'https://github.com/Optima-Chat/comfy-cli',
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
outputError('INIT_FAILED', `Initialization failed: ${error instanceof Error ? error.message : String(error)}`, options);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { registerNodeCommand } from './commands/node.js';
|
|
|
15
15
|
import { registerSystemCommand } from './commands/system.js';
|
|
16
16
|
import { registerConfigCommand } from './commands/config.js';
|
|
17
17
|
import { registerInterruptCommand } from './commands/interrupt.js';
|
|
18
|
+
import { registerInitCommand } from './commands/init.js';
|
|
18
19
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
20
|
const __dirname = dirname(__filename);
|
|
20
21
|
const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
|
|
@@ -68,5 +69,6 @@ registerNodeCommand(program);
|
|
|
68
69
|
registerSystemCommand(program);
|
|
69
70
|
registerConfigCommand(program);
|
|
70
71
|
registerInterruptCommand(program);
|
|
72
|
+
registerInitCommand(program);
|
|
71
73
|
program.parse();
|
|
72
74
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,6BAA6B;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;KACD,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBvB,CAAC,CAAC;AAEH,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@optima-chat/comfy-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "A CLI tool for ComfyUI designed for LLM interactions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"files": [
|
|
39
39
|
"dist",
|
|
40
|
+
".claude",
|
|
40
41
|
"workflows"
|
|
41
42
|
],
|
|
42
43
|
"publishConfig": {
|