comfyui-skill-cli 0.1.0__tar.gz
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.
- comfyui_skill_cli-0.1.0/LICENSE +21 -0
- comfyui_skill_cli-0.1.0/PKG-INFO +139 -0
- comfyui_skill_cli-0.1.0/README.md +111 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/PKG-INFO +139 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/SOURCES.txt +21 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/dependency_links.txt +1 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/entry_points.txt +2 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/requires.txt +3 -0
- comfyui_skill_cli-0.1.0/comfyui_skill_cli.egg-info/top_level.txt +1 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/__init__.py +0 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/__main__.py +9 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/client.py +139 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/commands/__init__.py +0 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/commands/deps.py +232 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/commands/run.py +273 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/commands/server.py +57 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/commands/skill.py +54 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/config.py +36 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/main.py +50 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/output.py +85 -0
- comfyui_skill_cli-0.1.0/comfyui_skills_cli/storage.py +104 -0
- comfyui_skill_cli-0.1.0/pyproject.toml +40 -0
- comfyui_skill_cli-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 HuangYuChuh
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: comfyui-skill-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: ComfyUI Skill CLI — Agent-friendly workflow management
|
|
5
|
+
Author: HuangYuChuh
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI
|
|
8
|
+
Project-URL: Repository, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI
|
|
9
|
+
Project-URL: Issues, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI/issues
|
|
10
|
+
Keywords: comfyui,cli,agent,skill,workflow,ai,image-generation
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
20
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: typer>=0.9
|
|
25
|
+
Requires-Dist: rich>=13.0
|
|
26
|
+
Requires-Dist: requests>=2.28
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# ComfyUI Skill CLI
|
|
30
|
+
|
|
31
|
+
Agent-friendly command-line tool for managing and executing [ComfyUI](https://github.com/comfyanonymous/ComfyUI) workflow skills.
|
|
32
|
+
|
|
33
|
+
## What is this?
|
|
34
|
+
|
|
35
|
+
ComfyUI Skill CLI turns ComfyUI workflows into callable commands. Any AI agent that can run shell commands (Claude, Codex, OpenClaw, etc.) can use ComfyUI through this CLI.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# List available skills
|
|
39
|
+
comfyui-skill list --json
|
|
40
|
+
|
|
41
|
+
# Execute a workflow
|
|
42
|
+
comfyui-skill run local/txt2img --args '{"prompt": "a white cat", "seed": 42}' --json
|
|
43
|
+
|
|
44
|
+
# Check server health
|
|
45
|
+
comfyui-skill server status --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Every command supports `--json` for structured output. Pipe-friendly by default.
|
|
49
|
+
|
|
50
|
+
## Install
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pipx install comfyui-skill-cli
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
Run commands from within a [ComfyUI Skills](https://github.com/HuangYuChuh/ComfyUI_Skills_OpenClaw) project directory:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd /path/to/your-skills-project
|
|
62
|
+
comfyui-skill list
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The CLI reads `config.json` and `data/` from the current working directory.
|
|
66
|
+
|
|
67
|
+
### Commands
|
|
68
|
+
|
|
69
|
+
| Command | Description |
|
|
70
|
+
|---------|-------------|
|
|
71
|
+
| `comfyui-skill list` | List all available skills with parameters |
|
|
72
|
+
| `comfyui-skill info <id>` | Show skill details and parameter schema |
|
|
73
|
+
| `comfyui-skill run <id> --args '{...}'` | Execute a skill (blocking) |
|
|
74
|
+
| `comfyui-skill submit <id> --args '{...}'` | Submit a skill (non-blocking) |
|
|
75
|
+
| `comfyui-skill status <prompt-id>` | Check execution status |
|
|
76
|
+
| `comfyui-skill server list` | List configured servers |
|
|
77
|
+
| `comfyui-skill server status` | Check if ComfyUI server is online |
|
|
78
|
+
| `comfyui-skill deps check <id>` | Check missing dependencies |
|
|
79
|
+
| `comfyui-skill deps install <id>` | Install missing dependencies |
|
|
80
|
+
|
|
81
|
+
### Global Options
|
|
82
|
+
|
|
83
|
+
| Option | Description |
|
|
84
|
+
|--------|-------------|
|
|
85
|
+
| `--json, -j` | Force JSON output |
|
|
86
|
+
| `--server, -s` | Specify server ID |
|
|
87
|
+
| `--dir, -d` | Specify data directory (default: current directory) |
|
|
88
|
+
| `--verbose, -v` | Verbose output |
|
|
89
|
+
|
|
90
|
+
### Output Modes
|
|
91
|
+
|
|
92
|
+
- **TTY** → Rich tables and progress bars (human-friendly)
|
|
93
|
+
- **Pipe / `--json`** → Structured JSON (agent-friendly)
|
|
94
|
+
- **Errors** → Always stderr
|
|
95
|
+
|
|
96
|
+
### Skill ID Format
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
comfyui-skill run local/txt2img # server_id/workflow_id
|
|
100
|
+
comfyui-skill run txt2img # uses default server
|
|
101
|
+
comfyui-skill run txt2img -s my_server # explicit server
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## For AI Agents
|
|
105
|
+
|
|
106
|
+
This CLI is designed to be called from `SKILL.md` definitions:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## Available Commands
|
|
110
|
+
comfyui-skill list --json
|
|
111
|
+
comfyui-skill info <server_id>/<workflow_id> --json
|
|
112
|
+
comfyui-skill run <server_id>/<workflow_id> --args '{"prompt":"..."}' --json
|
|
113
|
+
|
|
114
|
+
## Typical Flow
|
|
115
|
+
1. `comfyui-skill server status --json` — verify server is online
|
|
116
|
+
2. `comfyui-skill list --json` — discover available skills
|
|
117
|
+
3. `comfyui-skill info <id> --json` — check required parameters
|
|
118
|
+
4. `comfyui-skill run <id> --args '{...}' --json` — execute
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Exit Codes
|
|
122
|
+
|
|
123
|
+
| Code | Meaning |
|
|
124
|
+
|------|---------|
|
|
125
|
+
| 0 | Success |
|
|
126
|
+
| 1 | General error |
|
|
127
|
+
| 2 | Invalid arguments |
|
|
128
|
+
| 3 | Server connection failed |
|
|
129
|
+
| 4 | Resource not found |
|
|
130
|
+
| 5 | Execution failed |
|
|
131
|
+
| 6 | Timeout |
|
|
132
|
+
|
|
133
|
+
## Compatibility
|
|
134
|
+
|
|
135
|
+
Built with [Typer](https://typer.tiangolo.com/), the same framework as [comfy-cli](https://github.com/Comfy-Org/comfy-cli). Designed to be integrated as a `comfy skills` subcommand in the future.
|
|
136
|
+
|
|
137
|
+
## License
|
|
138
|
+
|
|
139
|
+
MIT
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# ComfyUI Skill CLI
|
|
2
|
+
|
|
3
|
+
Agent-friendly command-line tool for managing and executing [ComfyUI](https://github.com/comfyanonymous/ComfyUI) workflow skills.
|
|
4
|
+
|
|
5
|
+
## What is this?
|
|
6
|
+
|
|
7
|
+
ComfyUI Skill CLI turns ComfyUI workflows into callable commands. Any AI agent that can run shell commands (Claude, Codex, OpenClaw, etc.) can use ComfyUI through this CLI.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# List available skills
|
|
11
|
+
comfyui-skill list --json
|
|
12
|
+
|
|
13
|
+
# Execute a workflow
|
|
14
|
+
comfyui-skill run local/txt2img --args '{"prompt": "a white cat", "seed": 42}' --json
|
|
15
|
+
|
|
16
|
+
# Check server health
|
|
17
|
+
comfyui-skill server status --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Every command supports `--json` for structured output. Pipe-friendly by default.
|
|
21
|
+
|
|
22
|
+
## Install
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pipx install comfyui-skill-cli
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
Run commands from within a [ComfyUI Skills](https://github.com/HuangYuChuh/ComfyUI_Skills_OpenClaw) project directory:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cd /path/to/your-skills-project
|
|
34
|
+
comfyui-skill list
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The CLI reads `config.json` and `data/` from the current working directory.
|
|
38
|
+
|
|
39
|
+
### Commands
|
|
40
|
+
|
|
41
|
+
| Command | Description |
|
|
42
|
+
|---------|-------------|
|
|
43
|
+
| `comfyui-skill list` | List all available skills with parameters |
|
|
44
|
+
| `comfyui-skill info <id>` | Show skill details and parameter schema |
|
|
45
|
+
| `comfyui-skill run <id> --args '{...}'` | Execute a skill (blocking) |
|
|
46
|
+
| `comfyui-skill submit <id> --args '{...}'` | Submit a skill (non-blocking) |
|
|
47
|
+
| `comfyui-skill status <prompt-id>` | Check execution status |
|
|
48
|
+
| `comfyui-skill server list` | List configured servers |
|
|
49
|
+
| `comfyui-skill server status` | Check if ComfyUI server is online |
|
|
50
|
+
| `comfyui-skill deps check <id>` | Check missing dependencies |
|
|
51
|
+
| `comfyui-skill deps install <id>` | Install missing dependencies |
|
|
52
|
+
|
|
53
|
+
### Global Options
|
|
54
|
+
|
|
55
|
+
| Option | Description |
|
|
56
|
+
|--------|-------------|
|
|
57
|
+
| `--json, -j` | Force JSON output |
|
|
58
|
+
| `--server, -s` | Specify server ID |
|
|
59
|
+
| `--dir, -d` | Specify data directory (default: current directory) |
|
|
60
|
+
| `--verbose, -v` | Verbose output |
|
|
61
|
+
|
|
62
|
+
### Output Modes
|
|
63
|
+
|
|
64
|
+
- **TTY** → Rich tables and progress bars (human-friendly)
|
|
65
|
+
- **Pipe / `--json`** → Structured JSON (agent-friendly)
|
|
66
|
+
- **Errors** → Always stderr
|
|
67
|
+
|
|
68
|
+
### Skill ID Format
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
comfyui-skill run local/txt2img # server_id/workflow_id
|
|
72
|
+
comfyui-skill run txt2img # uses default server
|
|
73
|
+
comfyui-skill run txt2img -s my_server # explicit server
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## For AI Agents
|
|
77
|
+
|
|
78
|
+
This CLI is designed to be called from `SKILL.md` definitions:
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
## Available Commands
|
|
82
|
+
comfyui-skill list --json
|
|
83
|
+
comfyui-skill info <server_id>/<workflow_id> --json
|
|
84
|
+
comfyui-skill run <server_id>/<workflow_id> --args '{"prompt":"..."}' --json
|
|
85
|
+
|
|
86
|
+
## Typical Flow
|
|
87
|
+
1. `comfyui-skill server status --json` — verify server is online
|
|
88
|
+
2. `comfyui-skill list --json` — discover available skills
|
|
89
|
+
3. `comfyui-skill info <id> --json` — check required parameters
|
|
90
|
+
4. `comfyui-skill run <id> --args '{...}' --json` — execute
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Exit Codes
|
|
94
|
+
|
|
95
|
+
| Code | Meaning |
|
|
96
|
+
|------|---------|
|
|
97
|
+
| 0 | Success |
|
|
98
|
+
| 1 | General error |
|
|
99
|
+
| 2 | Invalid arguments |
|
|
100
|
+
| 3 | Server connection failed |
|
|
101
|
+
| 4 | Resource not found |
|
|
102
|
+
| 5 | Execution failed |
|
|
103
|
+
| 6 | Timeout |
|
|
104
|
+
|
|
105
|
+
## Compatibility
|
|
106
|
+
|
|
107
|
+
Built with [Typer](https://typer.tiangolo.com/), the same framework as [comfy-cli](https://github.com/Comfy-Org/comfy-cli). Designed to be integrated as a `comfy skills` subcommand in the future.
|
|
108
|
+
|
|
109
|
+
## License
|
|
110
|
+
|
|
111
|
+
MIT
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: comfyui-skill-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: ComfyUI Skill CLI — Agent-friendly workflow management
|
|
5
|
+
Author: HuangYuChuh
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI
|
|
8
|
+
Project-URL: Repository, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI
|
|
9
|
+
Project-URL: Issues, https://github.com/HuangYuChuh/ComfyUI_Skill_CLI/issues
|
|
10
|
+
Keywords: comfyui,cli,agent,skill,workflow,ai,image-generation
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
20
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: typer>=0.9
|
|
25
|
+
Requires-Dist: rich>=13.0
|
|
26
|
+
Requires-Dist: requests>=2.28
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# ComfyUI Skill CLI
|
|
30
|
+
|
|
31
|
+
Agent-friendly command-line tool for managing and executing [ComfyUI](https://github.com/comfyanonymous/ComfyUI) workflow skills.
|
|
32
|
+
|
|
33
|
+
## What is this?
|
|
34
|
+
|
|
35
|
+
ComfyUI Skill CLI turns ComfyUI workflows into callable commands. Any AI agent that can run shell commands (Claude, Codex, OpenClaw, etc.) can use ComfyUI through this CLI.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# List available skills
|
|
39
|
+
comfyui-skill list --json
|
|
40
|
+
|
|
41
|
+
# Execute a workflow
|
|
42
|
+
comfyui-skill run local/txt2img --args '{"prompt": "a white cat", "seed": 42}' --json
|
|
43
|
+
|
|
44
|
+
# Check server health
|
|
45
|
+
comfyui-skill server status --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Every command supports `--json` for structured output. Pipe-friendly by default.
|
|
49
|
+
|
|
50
|
+
## Install
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pipx install comfyui-skill-cli
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
|
|
58
|
+
Run commands from within a [ComfyUI Skills](https://github.com/HuangYuChuh/ComfyUI_Skills_OpenClaw) project directory:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd /path/to/your-skills-project
|
|
62
|
+
comfyui-skill list
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The CLI reads `config.json` and `data/` from the current working directory.
|
|
66
|
+
|
|
67
|
+
### Commands
|
|
68
|
+
|
|
69
|
+
| Command | Description |
|
|
70
|
+
|---------|-------------|
|
|
71
|
+
| `comfyui-skill list` | List all available skills with parameters |
|
|
72
|
+
| `comfyui-skill info <id>` | Show skill details and parameter schema |
|
|
73
|
+
| `comfyui-skill run <id> --args '{...}'` | Execute a skill (blocking) |
|
|
74
|
+
| `comfyui-skill submit <id> --args '{...}'` | Submit a skill (non-blocking) |
|
|
75
|
+
| `comfyui-skill status <prompt-id>` | Check execution status |
|
|
76
|
+
| `comfyui-skill server list` | List configured servers |
|
|
77
|
+
| `comfyui-skill server status` | Check if ComfyUI server is online |
|
|
78
|
+
| `comfyui-skill deps check <id>` | Check missing dependencies |
|
|
79
|
+
| `comfyui-skill deps install <id>` | Install missing dependencies |
|
|
80
|
+
|
|
81
|
+
### Global Options
|
|
82
|
+
|
|
83
|
+
| Option | Description |
|
|
84
|
+
|--------|-------------|
|
|
85
|
+
| `--json, -j` | Force JSON output |
|
|
86
|
+
| `--server, -s` | Specify server ID |
|
|
87
|
+
| `--dir, -d` | Specify data directory (default: current directory) |
|
|
88
|
+
| `--verbose, -v` | Verbose output |
|
|
89
|
+
|
|
90
|
+
### Output Modes
|
|
91
|
+
|
|
92
|
+
- **TTY** → Rich tables and progress bars (human-friendly)
|
|
93
|
+
- **Pipe / `--json`** → Structured JSON (agent-friendly)
|
|
94
|
+
- **Errors** → Always stderr
|
|
95
|
+
|
|
96
|
+
### Skill ID Format
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
comfyui-skill run local/txt2img # server_id/workflow_id
|
|
100
|
+
comfyui-skill run txt2img # uses default server
|
|
101
|
+
comfyui-skill run txt2img -s my_server # explicit server
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## For AI Agents
|
|
105
|
+
|
|
106
|
+
This CLI is designed to be called from `SKILL.md` definitions:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## Available Commands
|
|
110
|
+
comfyui-skill list --json
|
|
111
|
+
comfyui-skill info <server_id>/<workflow_id> --json
|
|
112
|
+
comfyui-skill run <server_id>/<workflow_id> --args '{"prompt":"..."}' --json
|
|
113
|
+
|
|
114
|
+
## Typical Flow
|
|
115
|
+
1. `comfyui-skill server status --json` — verify server is online
|
|
116
|
+
2. `comfyui-skill list --json` — discover available skills
|
|
117
|
+
3. `comfyui-skill info <id> --json` — check required parameters
|
|
118
|
+
4. `comfyui-skill run <id> --args '{...}' --json` — execute
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Exit Codes
|
|
122
|
+
|
|
123
|
+
| Code | Meaning |
|
|
124
|
+
|------|---------|
|
|
125
|
+
| 0 | Success |
|
|
126
|
+
| 1 | General error |
|
|
127
|
+
| 2 | Invalid arguments |
|
|
128
|
+
| 3 | Server connection failed |
|
|
129
|
+
| 4 | Resource not found |
|
|
130
|
+
| 5 | Execution failed |
|
|
131
|
+
| 6 | Timeout |
|
|
132
|
+
|
|
133
|
+
## Compatibility
|
|
134
|
+
|
|
135
|
+
Built with [Typer](https://typer.tiangolo.com/), the same framework as [comfy-cli](https://github.com/Comfy-Org/comfy-cli). Designed to be integrated as a `comfy skills` subcommand in the future.
|
|
136
|
+
|
|
137
|
+
## License
|
|
138
|
+
|
|
139
|
+
MIT
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
comfyui_skill_cli.egg-info/PKG-INFO
|
|
5
|
+
comfyui_skill_cli.egg-info/SOURCES.txt
|
|
6
|
+
comfyui_skill_cli.egg-info/dependency_links.txt
|
|
7
|
+
comfyui_skill_cli.egg-info/entry_points.txt
|
|
8
|
+
comfyui_skill_cli.egg-info/requires.txt
|
|
9
|
+
comfyui_skill_cli.egg-info/top_level.txt
|
|
10
|
+
comfyui_skills_cli/__init__.py
|
|
11
|
+
comfyui_skills_cli/__main__.py
|
|
12
|
+
comfyui_skills_cli/client.py
|
|
13
|
+
comfyui_skills_cli/config.py
|
|
14
|
+
comfyui_skills_cli/main.py
|
|
15
|
+
comfyui_skills_cli/output.py
|
|
16
|
+
comfyui_skills_cli/storage.py
|
|
17
|
+
comfyui_skills_cli/commands/__init__.py
|
|
18
|
+
comfyui_skills_cli/commands/deps.py
|
|
19
|
+
comfyui_skills_cli/commands/run.py
|
|
20
|
+
comfyui_skills_cli/commands/server.py
|
|
21
|
+
comfyui_skills_cli/commands/skill.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
comfyui_skills_cli
|
|
File without changes
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"""ComfyUI HTTP client — all server communication goes through here."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import time
|
|
7
|
+
import uuid
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ComfyUIClient:
|
|
14
|
+
def __init__(self, server_url: str, auth: str = "", comfy_api_key: str = "", timeout: float = 30.0):
|
|
15
|
+
self.server_url = server_url.rstrip("/")
|
|
16
|
+
self.auth = auth
|
|
17
|
+
self.comfy_api_key = comfy_api_key
|
|
18
|
+
self.timeout = timeout
|
|
19
|
+
|
|
20
|
+
def _headers(self) -> dict[str, str]:
|
|
21
|
+
headers: dict[str, str] = {}
|
|
22
|
+
if self.auth:
|
|
23
|
+
headers["Authorization"] = f"Bearer {self.auth}"
|
|
24
|
+
return headers
|
|
25
|
+
|
|
26
|
+
def _get(self, path: str, **kwargs: Any) -> requests.Response:
|
|
27
|
+
return requests.get(
|
|
28
|
+
f"{self.server_url}{path}",
|
|
29
|
+
headers=self._headers(),
|
|
30
|
+
timeout=self.timeout,
|
|
31
|
+
**kwargs,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
def _post(self, path: str, json_data: Any = None, **kwargs: Any) -> requests.Response:
|
|
35
|
+
return requests.post(
|
|
36
|
+
f"{self.server_url}{path}",
|
|
37
|
+
headers=self._headers(),
|
|
38
|
+
json=json_data,
|
|
39
|
+
timeout=self.timeout,
|
|
40
|
+
**kwargs,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# -- Health --
|
|
44
|
+
|
|
45
|
+
def check_health(self) -> dict[str, Any]:
|
|
46
|
+
try:
|
|
47
|
+
resp = self._get("/system_stats")
|
|
48
|
+
resp.raise_for_status()
|
|
49
|
+
return {"status": "online", "data": resp.json()}
|
|
50
|
+
except (requests.RequestException, ValueError) as exc:
|
|
51
|
+
return {"status": "offline", "error": str(exc)}
|
|
52
|
+
|
|
53
|
+
# -- Prompt execution --
|
|
54
|
+
|
|
55
|
+
def queue_prompt(self, workflow: dict[str, Any]) -> dict[str, Any]:
|
|
56
|
+
payload: dict[str, Any] = {
|
|
57
|
+
"prompt": workflow,
|
|
58
|
+
"client_id": str(uuid.uuid4()),
|
|
59
|
+
}
|
|
60
|
+
if self.comfy_api_key:
|
|
61
|
+
payload["extra_data"] = {"api_key_comfy_org": self.comfy_api_key}
|
|
62
|
+
resp = self._post("/prompt", json_data=payload)
|
|
63
|
+
resp.raise_for_status()
|
|
64
|
+
return resp.json()
|
|
65
|
+
|
|
66
|
+
def get_history(self, prompt_id: str) -> dict[str, Any] | None:
|
|
67
|
+
resp = self._get(f"/history/{prompt_id}")
|
|
68
|
+
if resp.status_code != 200:
|
|
69
|
+
return None
|
|
70
|
+
data = resp.json()
|
|
71
|
+
return data.get(prompt_id)
|
|
72
|
+
|
|
73
|
+
def get_queue(self) -> dict[str, Any]:
|
|
74
|
+
resp = self._get("/queue")
|
|
75
|
+
resp.raise_for_status()
|
|
76
|
+
return resp.json()
|
|
77
|
+
|
|
78
|
+
def download_output(self, filename: str, subfolder: str = "", output_type: str = "output") -> bytes:
|
|
79
|
+
resp = self._get("/view", params={
|
|
80
|
+
"filename": filename,
|
|
81
|
+
"subfolder": subfolder,
|
|
82
|
+
"type": output_type,
|
|
83
|
+
})
|
|
84
|
+
resp.raise_for_status()
|
|
85
|
+
return resp.content
|
|
86
|
+
|
|
87
|
+
# -- Node info --
|
|
88
|
+
|
|
89
|
+
def get_object_info(self) -> dict[str, Any]:
|
|
90
|
+
resp = self._get("/object_info")
|
|
91
|
+
resp.raise_for_status()
|
|
92
|
+
return resp.json()
|
|
93
|
+
|
|
94
|
+
def get_models(self, folder: str) -> list[str]:
|
|
95
|
+
resp = self._get(f"/models/{folder}")
|
|
96
|
+
resp.raise_for_status()
|
|
97
|
+
return resp.json()
|
|
98
|
+
|
|
99
|
+
# -- Manager API (ComfyUI-Manager plugin) --
|
|
100
|
+
|
|
101
|
+
def manager_start_queue(self) -> bool:
|
|
102
|
+
try:
|
|
103
|
+
resp = self._get("/manager/queue/start", timeout=10)
|
|
104
|
+
return resp.status_code < 500
|
|
105
|
+
except requests.RequestException:
|
|
106
|
+
return False
|
|
107
|
+
|
|
108
|
+
def manager_install_node(self, repo_url: str, pkg_name: str) -> dict[str, Any]:
|
|
109
|
+
resp = self._post("/manager/queue/install", json_data={
|
|
110
|
+
"id": pkg_name,
|
|
111
|
+
"url": repo_url,
|
|
112
|
+
"install_type": "git-clone",
|
|
113
|
+
})
|
|
114
|
+
if resp.status_code == 404:
|
|
115
|
+
return {"success": False, "error": "ComfyUI Manager not installed"}
|
|
116
|
+
if resp.status_code >= 400:
|
|
117
|
+
return {"success": False, "error": f"Manager API error: {resp.status_code}"}
|
|
118
|
+
return {"success": True}
|
|
119
|
+
|
|
120
|
+
def manager_queue_status(self) -> dict[str, Any] | None:
|
|
121
|
+
try:
|
|
122
|
+
resp = self._get("/manager/queue/status", timeout=10)
|
|
123
|
+
if resp.status_code != 200:
|
|
124
|
+
return None
|
|
125
|
+
return resp.json()
|
|
126
|
+
except (requests.RequestException, ValueError):
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
def manager_wait_for_queue(self, max_polls: int = 60, interval: float = 3.0) -> bool:
|
|
130
|
+
for _ in range(max_polls):
|
|
131
|
+
time.sleep(interval)
|
|
132
|
+
status = self.manager_queue_status()
|
|
133
|
+
if status is None:
|
|
134
|
+
continue
|
|
135
|
+
total = status.get("total", 0)
|
|
136
|
+
done = status.get("done", 0)
|
|
137
|
+
if total > 0 and done >= total:
|
|
138
|
+
return True
|
|
139
|
+
return False
|
|
File without changes
|