Skip to content
Back to skills

Server Api

ASecurity

"Launch ComfyUI safely and automate it through HTTP and websocket

  • 247 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 8, 2026
developmentpythonrustnodeapifrontendbackendsecurity

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill server-api --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Server Api?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Server Api
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-server-api/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-server-api)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: server-api
description: "Launch ComfyUI safely and automate it through HTTP and websocket
  APIs, including queueing prompt JSON, monitoring progress, collecting outputs,
  configuring server flags, and handling user/model/asset route surfaces."
disable-model-invocation: true
metadata:
  disco-role: operating
license: GPL 3.0
---

# ComfyUI Server and API

Use this sub-skill when an agent needs to start ComfyUI, configure server-facing CLI flags, call REST endpoints, queue an API workflow, monitor websocket progress, download output images, or troubleshoot server/API access.

Route graph construction, node input semantics, validation failures, and API-workflow JSON structure to `../workflow-execution/`. Route model folders, `extra_model_paths.yaml`, backend/VRAM choices, and checkpoint placement to `../models-config/`. Route custom node class authoring and node metadata implementation to `../custom-nodes/`.

## Fast Path

1. Start ComfyUI with explicit network/security choices:
   - Local-only default: `python main.py --listen 127.0.0.1 --port 8188`
   - LAN/API host: add a specific `--listen` address and review CORS/TLS before exposing it.
   - Multi-user storage: add `--multi-user` and use user-scoped endpoints carefully.
2. Export the graph from the UI with `File -> Export (API)`; do not POST the normal UI workflow JSON unless it has been converted to API prompt JSON.
3. Validate the JSON shape before sending it: root object maps node ids to objects with `class_type` and `inputs`.
4. Queue with `POST /prompt` using `{ "prompt": { ... }, "client_id": "..." }`. Let the server mint `prompt_id`, or provide a canonical lowercase hyphenated UUID.
5. Monitor progress with `GET /ws?clientId=<client_id>` and wait for a text message of type `executing` whose `data.prompt_id` matches and whose `data.node` is `null`.
6. Fetch outputs with `GET /history/{prompt_id}`, then download files through `GET /view?filename=...&subfolder=...&type=output`.

## Bundled Helpers

- `scripts/comfy_api_client.py` validates an exported API workflow, queues it through `/prompt`, optionally waits for `/history/{prompt_id}`, and downloads output media through `/view`.
- `scripts/comfy_websocket_monitor.py` queues an API workflow, monitors `/ws`, ignores binary preview frames by default, waits for the target `prompt_id`, and can download final output files.

Both scripts use only Python standard-library modules by default. Run `python <script> --help` for arguments. They never embed model paths or credentials; pass secrets through environment variables only when needed.

## Common Endpoint Flow

```text
POST /prompt
  body: {"prompt": <api-workflow>, "client_id": "<uuid-or-client-string>"}
  response: {"prompt_id": "<uuid>", "number": <queue-number>, "node_errors": {...}}

GET /history/<prompt_id>
  response: {"<prompt_id>": {"outputs": {"<node_id>": {"images": [...]}}}}

GET /view?filename=<name>&subfolder=<subfolder>&type=output
  response: file bytes
```

For API nodes that call Comfy’s hosted API, put the key in request `extra_data`, never in the workflow JSON or script source:

```json
{
  "prompt": {"...": "..."},
  "client_id": "automation-client",
  "extra_data": {"api_key_comfy_org": "${COMFY_API_KEY}"}
}
```

`api_key_comfy_org` is sensitive queue metadata; avoid logging it and do not store it in reusable examples.

## References

- `references/cli-reference.md` covers launch flags for listen/port, TLS, CORS, user directories, frontend, manager/API-node controls, assets, compression, logging, and backend caveats.
- `references/api-reference.md` summarizes core REST routes, payloads, job endpoints, app/user/model/assets surfaces, and `/api` prefix behavior.
- `references/api-workflows.md` explains queue/history/view automation, websocket message semantics, binary previews, and bundled script usage.
- `references/troubleshooting.md` maps common failures to checks and fixes.

## Safety Defaults

- Keep `--listen 127.0.0.1` unless a remote client genuinely needs access.
- Prefer TLS termination by a trusted local reverse proxy; if using ComfyUI TLS flags, provide both `--tls-keyfile` and `--tls-certfile`.
- Do not use `--enable-cors-header *` on a host reachable by untrusted browsers unless that is an intentional integration choice.
- Use `--disable-api-nodes` when external hosted-provider API nodes and frontend internet communication should be blocked.
- Use `--disable-all-custom-nodes` or `--whitelist-custom-nodes` while diagnosing untrusted or broken custom-node startup code.
- Treat `/internal/*` as frontend/internal only; do not build stable automations on it.

Files in this skill

  • SKILL.md4.5 KB
  • references/api-reference.md8 KB
  • references/api-workflows.md5.6 KB
  • references/cli-reference.md6.5 KB
  • references/troubleshooting.md7.2 KB
  • scripts/comfy_api_client.py11.1 KB
  • scripts/comfy_websocket_monitor.py15.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.