@optima-chat/comfy-cli 0.4.2 → 0.5.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/.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 Image & Video Generation
|
|
7
|
+
|
|
8
|
+
## When to Use This Skill
|
|
9
|
+
|
|
10
|
+
Use this skill when:
|
|
11
|
+
- User wants to generate images from text prompts (文生图)
|
|
12
|
+
- User wants to edit or transform existing images (图生图)
|
|
13
|
+
- User wants to create videos from images (图生视频)
|
|
14
|
+
- User asks about ComfyUI workflows, queue status, or models
|
|
15
|
+
- User mentions: 生成图片、画图、图像处理、视频生成、ComfyUI
|
|
16
|
+
|
|
17
|
+
## Available Commands
|
|
18
|
+
|
|
19
|
+
### 1. Generate Images: `comfy generate`
|
|
20
|
+
|
|
21
|
+
Generate images from text prompts using Stable Diffusion / FLUX models.
|
|
22
|
+
|
|
23
|
+
**Syntax:**
|
|
24
|
+
```bash
|
|
25
|
+
comfy generate "PROMPT" [OPTIONS]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Parameters:**
|
|
29
|
+
- `PROMPT`: Text description of the image to generate
|
|
30
|
+
- `--width <number>`: Image width (default: 1024)
|
|
31
|
+
- `--height <number>`: Image height (default: 1024)
|
|
32
|
+
- `--no-wait`: Submit and return immediately without waiting for completion
|
|
33
|
+
- `--pretty`: Human-readable table format output (default: JSON)
|
|
34
|
+
|
|
35
|
+
**Returns:**
|
|
36
|
+
- JSON with `prompt_id`, `status`, `outputs` (image file paths)
|
|
37
|
+
- Default behavior: waits for completion and shows real-time progress
|
|
38
|
+
|
|
39
|
+
**When to use:**
|
|
40
|
+
- User asks to generate/create images from text
|
|
41
|
+
- User provides image description
|
|
42
|
+
- Text-to-image generation
|
|
43
|
+
|
|
44
|
+
### 2. Edit Images: `comfy edit`
|
|
45
|
+
|
|
46
|
+
Edit or transform existing images with text prompts (Image-to-Image).
|
|
47
|
+
|
|
48
|
+
**Syntax:**
|
|
49
|
+
```bash
|
|
50
|
+
comfy edit <IMAGE_PATH> "PROMPT" [OPTIONS]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Parameters:**
|
|
54
|
+
- `IMAGE_PATH`: Path to input image file
|
|
55
|
+
- `PROMPT`: Transformation description (e.g., "anime style", "add more details")
|
|
56
|
+
- `--no-wait`: Submit and return immediately without waiting for completion
|
|
57
|
+
- `--pretty`: Human-readable table format output (default: JSON)
|
|
58
|
+
|
|
59
|
+
**Returns:**
|
|
60
|
+
- JSON with `prompt_id`, `status`, `outputs` (edited image file paths)
|
|
61
|
+
- Default behavior: waits for completion and shows real-time progress
|
|
62
|
+
|
|
63
|
+
**When to use:**
|
|
64
|
+
- User wants to modify/edit an existing image
|
|
65
|
+
- User wants to apply style transfer
|
|
66
|
+
- Image-to-image transformation
|
|
67
|
+
|
|
68
|
+
### 3. Create Videos: `comfy video`
|
|
69
|
+
|
|
70
|
+
Generate videos from images using I2V (Image-to-Video) models.
|
|
71
|
+
|
|
72
|
+
**Syntax:**
|
|
73
|
+
```bash
|
|
74
|
+
comfy video <IMAGE_PATH> [OPTIONS]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Parameters:**
|
|
78
|
+
- `IMAGE_PATH`: Path to input image file
|
|
79
|
+
- `-p, --prompt <text>`: Motion description prompt (optional)
|
|
80
|
+
- `-n, --negative <text>`: Negative prompt (optional)
|
|
81
|
+
- `--width <number>`: Video width (default: 512)
|
|
82
|
+
- `--height <number>`: Video height (default: 512)
|
|
83
|
+
- `--no-wait`: Submit and return immediately without waiting for completion
|
|
84
|
+
- `--pretty`: Human-readable table format output (default: JSON)
|
|
85
|
+
|
|
86
|
+
**Returns:**
|
|
87
|
+
- JSON with `prompt_id`, `status`, `outputs` (video file paths)
|
|
88
|
+
- Default behavior: waits for completion and shows real-time progress
|
|
89
|
+
|
|
90
|
+
**When to use:**
|
|
91
|
+
- User wants to animate a static image
|
|
92
|
+
- User wants to create video from image
|
|
93
|
+
- Image-to-video generation
|
|
94
|
+
|
|
95
|
+
### 4. Download Results: `comfy download`
|
|
96
|
+
|
|
97
|
+
Download generated images/videos to local directory.
|
|
98
|
+
|
|
99
|
+
**Syntax:**
|
|
100
|
+
```bash
|
|
101
|
+
comfy download <PROMPT_ID> [OPTIONS]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Parameters:**
|
|
105
|
+
- `PROMPT_ID`: The prompt ID returned from generate/edit/video commands
|
|
106
|
+
- `-o, --output <dir>`: Output directory (default: ./comfy-output)
|
|
107
|
+
- `--pretty`: Human-readable output
|
|
108
|
+
|
|
109
|
+
**Returns:**
|
|
110
|
+
- JSON with downloaded file paths
|
|
111
|
+
|
|
112
|
+
### 5. Workflow Management
|
|
113
|
+
|
|
114
|
+
**List workflow history:**
|
|
115
|
+
```bash
|
|
116
|
+
comfy workflow list [--limit 10] [--pretty]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Get workflow result:**
|
|
120
|
+
```bash
|
|
121
|
+
comfy workflow get <PROMPT_ID> [--pretty]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Submit custom workflow:**
|
|
125
|
+
```bash
|
|
126
|
+
comfy workflow submit <WORKFLOW_FILE> [--pretty]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 6. Queue Management
|
|
130
|
+
|
|
131
|
+
**Check queue status:**
|
|
132
|
+
```bash
|
|
133
|
+
comfy queue status [--pretty]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Clear queue:**
|
|
137
|
+
```bash
|
|
138
|
+
comfy queue clear --confirm [--pretty]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Delete queue item:**
|
|
142
|
+
```bash
|
|
143
|
+
comfy queue delete <ITEM_ID> [--pretty]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Interrupt current execution:**
|
|
147
|
+
```bash
|
|
148
|
+
comfy interrupt [--pretty]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 7. Model Management
|
|
152
|
+
|
|
153
|
+
**List available models:**
|
|
154
|
+
```bash
|
|
155
|
+
comfy model list [--type checkpoints|loras|vae|...] [--pretty]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Model types:**
|
|
159
|
+
- `checkpoints`: Stable Diffusion / FLUX checkpoint models
|
|
160
|
+
- `loras`: LoRA models
|
|
161
|
+
- `vae`: VAE models
|
|
162
|
+
- `controlnet`: ControlNet models
|
|
163
|
+
- `upscale_models`: Upscaler models
|
|
164
|
+
|
|
165
|
+
### 8. System Information
|
|
166
|
+
|
|
167
|
+
**Get system stats:**
|
|
168
|
+
```bash
|
|
169
|
+
comfy system stats [--pretty]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Returns: GPU/CPU usage, memory, device info
|
|
173
|
+
|
|
174
|
+
### 9. Configuration
|
|
175
|
+
|
|
176
|
+
**Set ComfyUI server address (required for first use):**
|
|
177
|
+
```bash
|
|
178
|
+
comfy config set server http://localhost:8188
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**View current config:**
|
|
182
|
+
```bash
|
|
183
|
+
comfy config list [--pretty]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Other config options:**
|
|
187
|
+
```bash
|
|
188
|
+
comfy config set timeout 30000
|
|
189
|
+
comfy config set outputDir ./my-outputs
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Output Format
|
|
193
|
+
|
|
194
|
+
All commands default to **JSON output** (AI-friendly, reduces 50%+ tokens):
|
|
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
|
+
Use `--pretty` flag for human-readable table format with colors.
|
|
208
|
+
|
|
209
|
+
## Workflow Examples
|
|
210
|
+
|
|
211
|
+
### Example 1: Quick Image Generation
|
|
212
|
+
**User**: "帮我生成一张猫的图片"
|
|
213
|
+
|
|
214
|
+
**Assistant**:
|
|
215
|
+
```bash
|
|
216
|
+
comfy generate "a cute cat"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Result**: Returns JSON with `prompt_id` and `outputs` containing image file paths. Default behavior waits for completion and shows real-time progress via WebSocket.
|
|
220
|
+
|
|
221
|
+
### Example 2: High-Resolution Image
|
|
222
|
+
**User**: "生成一张 1920x1080 的风景画"
|
|
223
|
+
|
|
224
|
+
**Assistant**:
|
|
225
|
+
```bash
|
|
226
|
+
comfy generate "beautiful landscape with mountains and lake" --width 1920 --height 1080
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Example 3: Image Style Transfer
|
|
230
|
+
**User**: "把这张图片改成动漫风格"
|
|
231
|
+
|
|
232
|
+
**Assistant** (assuming user uploaded `photo.jpg`):
|
|
233
|
+
```bash
|
|
234
|
+
comfy edit photo.jpg "anime style"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Example 4: Image Editing with Details
|
|
238
|
+
**User**: "给这张照片添加更多细节,提高质量"
|
|
239
|
+
|
|
240
|
+
**Assistant**:
|
|
241
|
+
```bash
|
|
242
|
+
comfy edit photo.jpg "add more details, enhance quality, 4k resolution"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Example 5: Video Creation
|
|
246
|
+
**User**: "用这张人物图片生成一个视频"
|
|
247
|
+
|
|
248
|
+
**Assistant**:
|
|
249
|
+
```bash
|
|
250
|
+
comfy video portrait.png --prompt "smooth motion, natural movement"
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Example 6: Non-blocking Generation
|
|
254
|
+
**User**: "生成一张图片,不用等完成"
|
|
255
|
+
|
|
256
|
+
**Assistant**:
|
|
257
|
+
```bash
|
|
258
|
+
comfy generate "sunset over ocean" --no-wait
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Returns immediately with `prompt_id`. Check status later with:
|
|
262
|
+
```bash
|
|
263
|
+
comfy workflow get <prompt_id>
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Example 7: Batch Image Generation
|
|
267
|
+
**User**: "帮我生成 3 张不同的猫的图片"
|
|
268
|
+
|
|
269
|
+
**Assistant**:
|
|
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
|
+
Then check queue status:
|
|
277
|
+
```bash
|
|
278
|
+
comfy queue status
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Example 8: Workflow with Model Check
|
|
282
|
+
**User**: "检查一下有哪些可用的模型,然后生成图片"
|
|
283
|
+
|
|
284
|
+
**Assistant**:
|
|
285
|
+
```bash
|
|
286
|
+
# First check available models
|
|
287
|
+
comfy model list --type checkpoints
|
|
288
|
+
|
|
289
|
+
# Then generate with appropriate prompt
|
|
290
|
+
comfy generate "a beautiful portrait"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Example 9: Complete Workflow
|
|
294
|
+
**User**: "生成一张图片,编辑它,然后生成视频"
|
|
295
|
+
|
|
296
|
+
**Assistant**:
|
|
297
|
+
```bash
|
|
298
|
+
# 1. Generate base image
|
|
299
|
+
comfy generate "a portrait of a woman"
|
|
300
|
+
# Output: ./comfy-output/image_001.png
|
|
301
|
+
|
|
302
|
+
# 2. Edit the image
|
|
303
|
+
comfy edit ./comfy-output/image_001.png "add cinematic lighting"
|
|
304
|
+
# Output: ./comfy-output/image_002.png
|
|
305
|
+
|
|
306
|
+
# 3. Create video from edited image
|
|
307
|
+
comfy video ./comfy-output/image_002.png --prompt "slow motion, cinematic"
|
|
308
|
+
# Output: ./comfy-output/video_001.mp4
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## Best Practices
|
|
312
|
+
|
|
313
|
+
### 1. Output Format Selection
|
|
314
|
+
- **Default (JSON)**: Best for AI agents, programmatic parsing, reduces tokens
|
|
315
|
+
- **Pretty mode**: Best for human inspection, debugging, visual feedback
|
|
316
|
+
- Use `--pretty` when user explicitly wants to see formatted output
|
|
317
|
+
|
|
318
|
+
### 2. Wait Strategy
|
|
319
|
+
- **Default (wait)**: Recommended for interactive workflows, shows real-time progress
|
|
320
|
+
- **--no-wait**: Use when submitting multiple jobs, batch processing, or time-consuming operations
|
|
321
|
+
- After `--no-wait`, use `comfy workflow get <prompt_id>` to check completion
|
|
322
|
+
|
|
323
|
+
### 3. Error Handling
|
|
324
|
+
- Always check `success` field in JSON response
|
|
325
|
+
- If error occurs, check:
|
|
326
|
+
1. ComfyUI server is running: `comfy system stats`
|
|
327
|
+
2. Server address is correct: `comfy config list`
|
|
328
|
+
3. Queue is not stuck: `comfy queue status`
|
|
329
|
+
|
|
330
|
+
### 4. Performance Optimization
|
|
331
|
+
- Use appropriate image sizes (1024x1024 for SD, 512x512 for videos)
|
|
332
|
+
- Consider `--no-wait` for batch operations
|
|
333
|
+
- Check system resources before large generations: `comfy system stats`
|
|
334
|
+
|
|
335
|
+
### 5. First-time Setup
|
|
336
|
+
Always configure server address before first use:
|
|
337
|
+
```bash
|
|
338
|
+
comfy config set server http://localhost:8188
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
## Common Patterns
|
|
342
|
+
|
|
343
|
+
### Pattern 1: Generate and Download
|
|
344
|
+
```bash
|
|
345
|
+
# Generate image
|
|
346
|
+
comfy generate "a cat" --no-wait
|
|
347
|
+
# Returns: { "prompt_id": "abc123" }
|
|
348
|
+
|
|
349
|
+
# Download result later
|
|
350
|
+
comfy download abc123
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Pattern 2: Iterative Editing
|
|
354
|
+
```bash
|
|
355
|
+
# Start with base image
|
|
356
|
+
comfy generate "a portrait"
|
|
357
|
+
|
|
358
|
+
# Edit step 1
|
|
359
|
+
comfy edit output_001.png "add dramatic lighting"
|
|
360
|
+
|
|
361
|
+
# Edit step 2
|
|
362
|
+
comfy edit output_002.png "increase contrast"
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Pattern 3: Queue Management
|
|
366
|
+
```bash
|
|
367
|
+
# Submit multiple jobs
|
|
368
|
+
comfy generate "cat" --no-wait
|
|
369
|
+
comfy generate "dog" --no-wait
|
|
370
|
+
comfy generate "bird" --no-wait
|
|
371
|
+
|
|
372
|
+
# Check queue
|
|
373
|
+
comfy queue status
|
|
374
|
+
|
|
375
|
+
# If needed, clear queue
|
|
376
|
+
comfy queue clear --confirm
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
## Tips
|
|
380
|
+
|
|
381
|
+
**Server Connection:**
|
|
382
|
+
- Default server: `http://localhost:8188`
|
|
383
|
+
- For remote servers: `comfy config set server http://remote-ip:8188`
|
|
384
|
+
- Check connection: `comfy system stats`
|
|
385
|
+
|
|
386
|
+
**Model Selection:**
|
|
387
|
+
- ComfyUI automatically uses default checkpoint model
|
|
388
|
+
- Check available models: `comfy model list --type checkpoints`
|
|
389
|
+
- For custom workflows, use: `comfy workflow submit custom.json`
|
|
390
|
+
|
|
391
|
+
**Output Files:**
|
|
392
|
+
- Default output directory: `./comfy-output/`
|
|
393
|
+
- Change with: `comfy config set outputDir ./my-outputs`
|
|
394
|
+
- Downloaded files retain original ComfyUI filenames
|
|
395
|
+
|
|
396
|
+
**Real-time Progress:**
|
|
397
|
+
- Default wait mode shows progress via WebSocket
|
|
398
|
+
- Progress includes: node execution, current step, percentage
|
|
399
|
+
- Use `--no-wait` to skip progress monitoring
|
|
400
|
+
|
|
401
|
+
**Interruption:**
|
|
402
|
+
- Stop current generation: `comfy interrupt`
|
|
403
|
+
- Clear pending jobs: `comfy queue clear --confirm`
|
|
404
|
+
|
|
405
|
+
**JSON Parsing:**
|
|
406
|
+
- All JSON responses follow consistent structure
|
|
407
|
+
- Check `success` field first
|
|
408
|
+
- Access data via `data` field
|
|
409
|
+
- Errors include `error` field with details
|
|
410
|
+
|
|
411
|
+
## Configuration
|
|
412
|
+
|
|
413
|
+
Config file location: `~/.comfy-cli/config.json`
|
|
414
|
+
|
|
415
|
+
**Available settings:**
|
|
416
|
+
- `server`: ComfyUI server address (required)
|
|
417
|
+
- `timeout`: Request timeout in milliseconds (default: 30000)
|
|
418
|
+
- `autoConnect`: Auto-connect to WebSocket (default: true)
|
|
419
|
+
- `outputDir`: Default output directory (default: `./comfy-output`)
|
|
420
|
+
|
|
421
|
+
## Troubleshooting
|
|
422
|
+
|
|
423
|
+
**"Connection refused" error:**
|
|
424
|
+
- Ensure ComfyUI is running: Check browser at http://localhost:8188
|
|
425
|
+
- Verify server address: `comfy config list`
|
|
426
|
+
- Test connection: `comfy system stats`
|
|
427
|
+
|
|
428
|
+
**"Workflow failed" error:**
|
|
429
|
+
- Check error details in JSON response
|
|
430
|
+
- Verify model files are available: `comfy model list`
|
|
431
|
+
- Check ComfyUI console logs
|
|
432
|
+
|
|
433
|
+
**Slow generation:**
|
|
434
|
+
- Check GPU availability: `comfy system stats`
|
|
435
|
+
- Reduce image resolution
|
|
436
|
+
- Check queue: `comfy queue status`
|
|
437
|
+
|
|
438
|
+
**Missing output files:**
|
|
439
|
+
- Check output directory: `comfy config list`
|
|
440
|
+
- Verify generation completed: `comfy workflow get <prompt_id>`
|
|
441
|
+
- Use `comfy download <prompt_id>` to re-download
|
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.0",
|
|
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": {
|