慧星云提供了 ComfyUI 在线工作流服务,旨在让开发者能更轻松地在云端编辑和调试运行,并可以在业务中通过 API 调用该工作流。本文将为您介绍如何使用在线工作流服务。
计费方式
目前在线工作流服务采用按任务运行时长计费的模式。具体计费规则如下:
- 每秒钟消耗0.2个算力点,向上取整。
- 每次任务最低消耗2个算力点。
例如,17 秒的任务将消耗 4 个算力点。8 秒的任务将消耗 2 个算力点。
您可以通过「算力中心」-「我的算力」-「算力点明细」查看详细的算力点消耗记录。
此外,在线工作流部分权益与算力套餐相关。
- 部署工作流 API :标准版、专业版支持,免费版不支持。
- 工作流允许保存数量:免费版2个、标准版5个、专业版10个。
操作指南
新建工作流
进入编辑器页面,系统自动弹出创建工作流的选项。您可以选择创建从本地上传工作流、新建空白工作流,或者选择「为你推荐」预设工作流模板快速创建。

编辑工作流
无论是新建或者打开已保存的工作流,都将进入工作流编辑页面。

整个工作流画板与原ComfyUI功能类似,画板上方为菜单栏:
- 左侧:「新建」、「我的工作流」、「生图记录」、「Node Library」、「节点组」等功能
- 中间:显示当前工作流的名称,双击可编辑;名称下方显示工作流的保存状态,支持自动保存

- 右侧:包括保存、上传、下载、中英文切换、部署API、撤销恢复、清空等功能
- 画板所支持的原ComfyUI快捷键可点击右下角查看,如图所示

管理工作流
点击菜单栏左侧「我的工作流」可查看所有保存的工作流。列表中包含工作流快照、名称、节点数和更新时间。
您可以对工作流进行以下操作:
- 编辑工作流:将工作流在画板内打开进行编辑
- 克隆:将工作流克隆生成一份新的工作流
- 删除:删除该工作流,不可恢复需谨慎操作
运行工作流
点击菜单栏左侧的「运行工作流」可运行当前工作流生图。同一时间最多只允许存在一个进行中的任务。

生图会生成对应的生成任务,可在「生成记录」弹窗内查看任务进行状态。

- 排队中:任务在队列中 等待
- 等待中:任务开始执行,可查看执行进度
- 生图成功:图片加载展示出来即表示任务成功
- 生图失败:任务执行失败未能生出图片,算力点会退还账号
生图任务结束后,可查看本次任务所消耗的算力点、任务ID、任务过期删除时间。

同时也支持预览生成任务时的工作流。在弹窗内预览支持拖拽查看工作流,允许将工作流再次导入编辑器进行编辑。

- 导入当前窗口:如果当前编辑器内有内容将被覆盖
- 新窗口打开 :自动新建一个工作流,并将工作流导入
图片操作


- 查看:放大查看,支持图片放大缩小
- 分享:可以将图片和生成图片的工作流一起分享到社区发布
- 删除:删除图片,支持批量操作
- 下载:下载png格式的图片,支持批量操作
部署工作流API
发布工作流
点击菜单栏右侧「部署」可部署当前工作流,使其可通过API调用。

在弹窗内选择工作流入参设置,即选择API服务对外暴露的参数。未选择的参数将使用工作流设置的默认值。设置入参的参数,若在API调用时未传入值,也默认使用工作流中设置的值。

选择的参数支持编辑参数别名,也可以点击删除取消选择该参数。

部署完成后,您可以查看最近一次部署工作流的时间,并在需要时重新导入工作流进行编辑。

点击「最近部署」则可以查看上一次部署的工作流详情。支持将工作流重新导入画板继续编辑。

API 调用
点击「API调用」,可查看允许工作流接口的请求地址,如图所示框起来的为发布的工作流的ID,即后续接口调用时需要用到app_id。


参数详情为发布工作流时选择的参数和别名。说明的内容为“节点名称-工作流中的节点编号-节点内的参数名称”。
密钥管理
密钥(Token)是调用工作流接口的身份验证凭证。您需要创建并管理这些密钥:点击「密钥管理」先进行安全验证。

点击「创建 API Key」生成 Token,填入密钥的唯一名称并点击“创建”。

可在密钥列表内查看到刚刚创建的密钥,默认状态为“启用”,以及创建时间、最近调用事件,可对密钥进行【复制密钥】【禁用】操作。

将密钥禁用后,可将密钥删除或重新启用。

调用日志
点击「调用日志」,可查看工作流API服务的使用情况。支持通过Token名称、任务状态、任务调用时间进行筛选查询。
- Token名称:请求时所使用的密钥
- ID:工作流生图任务的ID
- 状态:生图任务的状态
- 调用事件:发起生图任务的请求时间
- 运行时间:从生图任务开始执行到结束所用的耗时
- 算力点:本次生图任务所消耗的算力点,失败的任务不扣算力点
API 文档
鉴权
在进行接口请求时,所有请求需通过Token进行身份验证。在HTTP请求头中加入
Authorization字段,其值设为Token字符串。Authorization: "<token>"上传图片
图片上传有效期为 24 小时。
请求
POST /comfyui/upload/image请求格式
| 参数名称 | 参数类型 | 必填 | 字段类型 | 描述 |
| file | formData | 是 | file | 本地文件地址 |
请求示例
curl 'https://api-v1.huixingyun.com/comfyui/upload/image' \
-H 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7' \
--form 'file=@"/Users/admin/Downloads/05bed5e2be7d1c6596b1a151c3c99bd7.jpg"'响应格式
| 参数 | 字段类型 | 说明 |
| code | integer | 错误码,成功为 0 |
| message | string | Code 描述 |
| data | object | 数据 json |
| data.path | string | 图片上传地址 |
响应示例
{
"code": 0,
"message": "success",
"data": {
"path": "comfyui/app/img/c9482a0dfdcd2646e57592895f617860/05bed5e2be7d1c6596b1a151c3c99bd7.jpg"
}
}提交任务
请求
POST /comfyui/task/:app_id请求格式
| 参数名称 | 参数类型 | 必填 | 类型 | 描述 |
| @.<上传参数字段> | body | 否 | string | DataUrl 格式见 [rfc2397]见发布工作流时指定的入参字段 |
| <入参字段> | body | 否 | string/number | 见发布工作流时指定的入参字段 |
| app_id | path | 是 | string | 发布的应用编号 |
请求示例1
允许传指定参数
image,可以将上传的图片 path 传入curl -X "POST" "https://api-v1.huixingyun.com/comfyui/task/92spw3za2mzupfj9kq54jadxdf3nle7f" \
-H 'Content-Type: application/json' \
-H 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7' \
-d $'{
"image": "comfyui/app/img/c9482a0dfdcd2646e57592895f617860/05bed5e2be7d1c6596b1a151c3c99bd7.jpg"
}'请求示例2
允许传指定参数 @.
image,可以传入文件 DataUrl ,文件将自动上传。文件大小不得超过 10 MBcurl -X "POST" "https://api-v1.huixingyun.com/comfyui/task/92spw3za2mzupfj9kq54jadxdf3nle7f" \
-H 'Content-Type: application/json' \
-H 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7' \
-d $'{
"@": { "image": "data:image/png;base64,iVBORw0KGgoAAAANS..."}
}'响应格式
| 参数 | 字段类型 | 说明 |
| code | integer | 错误码,成功为 0 |
| message | string | Code 描述 |
| data | object | 数据 json |
| data.request_id | string | 唯一请求 ID,用于查询应用任务状态 |
响应示例
{
"code": 0,
"message": "success",
"data": {
"request_id": "4b17b5d5-8fa6-44f1-aa1f-4b3d655693e2",
"node_errors": []
}
}取消任务
请求
POST /comfyui/cancel/:request_id请求格式
| 参数名称 | 参数类型 | 必填 | 字段类型 | 描述 |
| request_id | path | true | string | 见「提交任务」响应字段 request_id |
请求示例
curl 'https://api-v1.huixingyun.com/comfyui/cancel/4b17b5d5-8fa6-44f1-aa1f-4b3d655693e2' \
-H 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7'响应格式
| 参数 | 字段类型 | 说明 |
| code | integer | 错误码,成功为 0 |
| message | string | Code 描述 |
| data | object | 数据 json |
| data.result | boolean | cancel 成功 / 失败 |
响应示例
{
"code": 0,
"message": "success",
"data": {
"result": false
}
}查询接口
请求
POST /comfyui/task_infoJSON 请求参数| 参数名称 | 参数类型 | 必填 | 字段类型 | 描述 |
| request_ids | body | 是 | []string | 任务 ID 列表 |
请求示例
curl 'https://api-v1.huixingyun.com/comfyui/task_info' \
--header 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7' \
--header 'Content-Type: application/json' \
--data '{
"request_ids": [
"7538b527-b4f4-4766-845c-82db7f47608c", "non-existent number"
]
}'响应格式
| 参数 | 字段类型 | 说明 |
| code | integer | 错误码,成功为 0 |
| message | string | Code 描述 |
| data | object | 数据 json |
| data.task_infos | array | 根据请求的 request_ids 获取数据列表 |
| data.task_infos[0].request_id | string | 请求 ID |
| data.task_infos[0].files | object | 对标到 Node ID 的输出图片列表,Key 是 Node ID,Value 是图片获取列表 |
| data.task_infos[0].all_files | string[] | 所有输出图片列表 |
| data.task_infos[0].create_at | string | 创建时间 |
| data.task_infos[0].app_key_name | string | 应用名 |
| data.task_infos[0].status | string | SETUP 初始化配置INIT 排队中INFERENCING 执行中DONE 执行成功ERROR 执行失败STOP 取消任务 |
| data.task_infos[0].start_at | string | 执行任务开始时间,任务状态为 DONE 时存在 |
| data.task_infos[0].end_at | string | 执行任务结束时间,任务状态为 DONE 时存在 |
| data.task_infos[0].percentage | integer | 执行百分比 |
| data.task_infos[0].position | integer | 队列位置 |
| data.task_infos[0].queue_length | integer | 队列长度 |
| data.task_infos[0].point | integer | 算力点扣点,任务状态为 DONE 时存在 |
| data.task_infos[0].running_time | integer | end_at - start_at,任务状态为 DONE 时存在 |
| data.task_infos[0].custom_outputs | object | 自定义输出节点 |
| data.task_infos[0].custom_outputs[<入参字段>] | string | 输出节点值 |
| data.task_infos[1] | null | 不存在或不属于当前 AppKey 提交的任务,直接返回 null |
响应示例
{
"code": 0,
"message": "success",
"data": {
"task_infos": [
{
"request_id": "65598d9c-ea8d-4a1d-8d85-b890c1cb3167",
"files": {
"5": [
"https://api-v1.huixingyun.com/comfyui/download/65598d9c-ea8d-4a1d-8d85-b890c1cb3167/20daa5cc-358f-41e3-b985-ee38c18d481d_1.png"
]
},
"all_files": [
"https://api-v1.huixingyun.com/comfyui/download/65598d9c-ea8d-4a1d-8d85-b890c1cb3167/20daa5cc-358f-41e3-b985-ee38c18d481d_1.png"
],
"create_at": "2024-11-21T07:44:04.000Z",
"app_key_name": "test",
"status": "DONE",
"start_at": "2024-11-21T07:44:06.000Z",
"end_at": "2024-11-21T07:44:33.000Z",
"percentage": 100,
"position": 0,
"queue_length": 0,
"point": 6,
"running_time": 27,
"node_errors": {},
"custom_outputs": {
"output_5": "https://api-v1.huixingyun.com/comfyui/download/65598d9c-ea8d-4a1d-8d85-b890c1cb3167/20daa5cc-358f-41e3-b985-ee38c18d481d_1.png"
}
},
{
"request_id": "1cc21404-088c-4017-b907-9501fc41f632",
"files": {
"5": [
"https://api-v1.huixingyun.com/comfyui/download/1cc21404-088c-4017-b907-9501fc41f632/2c8292ae-75e5-4468-837b-7448f21a3d3d_1.png"
]
},
"all_files": [
"https://api-v1.huixingyun.com/comfyui/download/1cc21404-088c-4017-b907-9501fc41f632/2c8292ae-75e5-4468-837b-7448f21a3d3d_1.png"
],
"create_at": "2024-11-22T02:29:01.000Z",
"app_key_name": "test",
"status": "DONE",
"start_at": "2024-11-22T02:29:05.000Z",
"end_at": "2024-11-22T02:29:33.000Z",
"percentage": 100,
"position": 0,
"queue_length": 0,
"point": 6,
"running_time": 28,
"node_errors": {}
},
null
]
}
}生成的图片查询接口
URL 地址见「查询接口」响应中的 all_files 地址。
请求示例
curl -O 'https://api-v1.huixingyun.com/comfyui/download/1cc21404-088c-4017-b907-9501fc41f632/2c8292ae-75e5-4468-837b-7448f21a3d3d_1.png' \
-H 'Authorization: app-7dnnrpiz1g6psh**********4cksfcw7'错误码
HTTP 状态码均为 200,响应如下:
{
"code": 4000001,
"message": "bad request"
}| code | message | 描述 |
| 1000001 | insufficient computility point | 算力点不足 |
| 4000001 | bad request | 请求参数错误 |
| 4000002 | file not exists | 上传图片未传入文件 |
| 4010001 | authorization failed | 鉴权失败 |
| 4010002 | authorization forbidden | 鉴权未开启 |
| 4010003 | token required | 未提供 Token |
| 4040001 | app not found | 应用不存在 |
| 4040002 | app not belong to you | 应用与鉴权不一致 |
| 4090001 | Membership Requirements | 需要会员权限 |
| 4290001 | Too many prompt tasks | 正在执行的任务过多 |
| 5000001 | System Error | 系统错误 |