{
  "description": "RunComfy ComfyUI 工作流运行工具：启动云端机器、上传文件、提交 workflow、监听进度、下载结果",
  "task_spec": "脚本位置：tests/run_comfy/run_workflow.py\n\n## 功能\n通过 RunComfy Server API + ComfyUI Backend API，在云端机器上运行 ComfyUI workflow，全流程自动化。\n\n## 环境变量（.env 文件）\n- RUNCOMFY_USER_ID：RunComfy 用户 ID\n- API_TOKEN：RunComfy API Token\n\n## 用法\n```bash\n# 启动新机器并运行\npython run_workflow.py workflow_api.json\n\n# 指定 version（含预装模型的版本）\npython run_workflow.py workflow_api.json --version-id <version_id>\n\n# 复用已有机器（跳过启动）\npython run_workflow.py workflow_api.json --server-id <server_id>\n\n# 跳过文件上传（文件已在机器上）\npython run_workflow.py workflow_api.json --server-id <server_id> --skip-upload\n\n# 完成后保持机器运行\npython run_workflow.py workflow_api.json --keep-alive\n```\n\n## 参数\n| 参数 | 默认值 | 说明 |\n|------|--------|------|\n| workflow | 必填 | workflow_api.json 文件路径 |\n| --input-dir | input/ | 本地输入文件目录 |\n| --output-dir | output/ | 结果下载目录 |\n| --version-id | 90f77137-... | RunComfy workflow version ID |\n| --server-type | medium | 机器规格：medium/large/extra-large/2x-large/2xl-turbo |\n| --duration | 3600 | 预估运行时长（秒） |\n| --server-id | 无 | 复用已有机器 ID，跳过启动步骤 |\n| --skip-upload | false | 跳过文件上传，直接提交 workflow |\n| --keep-alive | false | 完成后不自动关机 |\n\n## input 目录结构\n```\ninput/\n├── images/          → 上传到 ComfyUI input/（LoadImage 节点用）\n├── loras/           → 上传到 ComfyUI input/loras/\n├── checkpoints/     → 上传到 ComfyUI input/checkpoints/\n├── vae/             → 上传到 ComfyUI input/vae/\n├── controlnet/      → 上传到 ComfyUI input/controlnet/\n└── (根目录文件)      → 上传到 ComfyUI input/\n```\n\n## 运行流程\n1. 检查 workflow 所需文件是否齐全（调用 check_workflow.py）\n2. 启动机器（或复用 --server-id 指定的机器）\n3. 等待机器状态变为 Ready，获取 main_service_url\n4. 上传 input 目录所有文件（除非 --skip-upload）\n5. 提交 workflow 到 ComfyUI /prompt 接口\n6. 通过 WebSocket 监听执行进度\n7. 从 /history/{prompt_id} 下载所有输出图片到 output 目录\n8. 关机（除非 --keep-alive）\n\n## 注意事项\n- 出错时机器不会自动关闭，需手动处理（避免意外扣费）\n- 出错时会打印 server_id，可用 --server-id 复用该机器重试\n- LoRA 等模型文件建议通过 RunComfy 控制台预装到 version 中，而非通过 API 上传\n- 依赖：requests、websocket-client、python-dotenv\n\n## API 端点\n- RunComfy Server API：https://beta-api.runcomfy.net/prod/api\n- 启动机器：POST /users/{user_id}/servers\n- 查询状态：GET /users/{user_id}/servers/{server_id}（字段 current_status）\n- 关闭机器：DELETE /users/{user_id}/servers/{server_id}",
  "reference_files": [
    "tests/run_comfy/run_workflow.py",
    "tests/run_comfy/check_workflow.py"
  ]
}
