runcomfy_run_only.json 2.3 KB

1234567
  1. {
  2. "description": "RunComfy 任务执行工具:接收 workflow_api.json 和输入文件,在已启动的 ComfyUI 服务器上运行并下载结果",
  3. "task_spec": "脚本位置:tests/run_comfy/run_workflow_only.py\n\n## 功能\n在已就绪的 RunComfy 机器上提交 ComfyUI 工作流。上传指定的输入文件(到 input 目录及相应子目录),提交 prompt,通过 WebSocket 监听状态,并在完成后下载结果图片。\n\n## 环境变量\n- RUNCOMFY_USER_ID:RunComfy 用户 ID\n- API_TOKEN:RunComfy API Token\n\n## 命令行参数\n- --server-id:(必填) 已启动的机器 ID\n- --workflow:(必填) workflow_api.json 路径\n- --input-dir:(选填) 输入文件目录,默认 input/\n- --output-dir:(选填) 结果下载目录,默认 output/\n- --skip-upload:(选填) 跳过文件上传,直接执行\n\n## HTTP 接口需求(用于注册到 Router)\n如果作为服务接口,实现 `POST /run`:\n### 输入 JSON\n- server_id: str (必填,运行目标机器)\n- workflow_api: dict (必填,解析好的 workflow_api.json 字典)\n- input_files: list[dict] (可选,包含 {filename, type, base64_data},其中 type 为 images/loras/checkpoints 等)\n\n### 输出 JSON\n- prompt_id: str\n- images: list[str] (结果图片的 Base64 数据或服务器 URL 列表)\n- status: str (\"Success\" 或错误信息)\n- server_id: str (透传回显)\n\n## 核心逻辑参考\n1. 通过 `GET /users/{USER_ID}/servers/{server_id}` 验证机器状态(需为 Ready),并获取 `main_service_url`。\n2. 如果有文件,调用 `POST {main_service_url}/upload/image`。支持 `type=input`,通过 `subfolder` 区分 `loras`, `checkpoints`。\n3. 调用 `POST {main_service_url}/prompt` 提交 `{\"prompt\": workflow_api, \"client_id\": client_id}`。\n4. 连接 `wss://{main_service_url_host}/ws?clientId={client_id}` 监听进度(忽略 https 的 wss 转换问题)。\n5. 当收到 `type=executing` 且 `data.node === null` 时表示完成。\n6. 调用 `GET {main_service_url}/history/{prompt_id}` 获取输出文件名,再从 `/view?filename=x&subfolder=y&type=z` 下载图片并转 Base64返回。\n7. 无论是成功还是报错,**绝不自动关闭机器**(留给 stop_comfy_env 处理)。",
  4. "reference_files": [
  5. "tests/run_comfy/run_workflow.py"
  6. ]
  7. }