Appearance
ComfyUI API开发文档
接口共通部分
Header参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Authorization | string | 是 | 访问令牌,格式:Bearer <Token> |
查询ComfyUI应用列表
请求地址
GET https://waas.aigate.cc/api/openapi/comfyui/comfyuiApp/list
返回响应
response (application/json)
├── code: integer # 业务状态码(0=成功,1=失败)
├── msg: string # 业务返回消息
├── errCode: string # 错误码(失败时返回)
└── data: array<object> # ComfyUI 应用列表
├── appId: integer # 应用 ID(int64)
├── appName: string # 应用名称
├── customerId: integer # 用户 ID(int64)
├── jsonDetail: object # ComfyUI API 详情
├── allowInput: object # 允许输入字段定义
├── allowInputAlias: object # 输入字段别名映射
├── allowInputType: object # 输入字段节点类型
├── intro: string # 应用介绍
├── createBy: string # 创建人
├── createTime: string # 创建时间
├── updateBy: string # 更新人
├── updateTime: string # 更新时间
├── bindInstanceIds: array<integer> # 绑定的实例 ID 列表
└── bindInstances: array<object> # 应用与实例绑定关系
├── relationId: integer # 关系主键 ID(int64)
├── customerId: integer # 用户 ID(int64)
├── appId: integer # 应用 ID(int64)
├── instanceId: integer # 实例 ID(int64)
├── areaId: integer # 区域 ID(int64)
├── instanceStatus: string # 实例状态
├── instanceStatusTime: string # 实例状态更新时间
├── createBy: string # 创建人
├── createTime: string # 创建时间
├── updateBy: string # 更新人
├── updateTime: string # 更新时间
└── tenantId: integer # 所属租户 ID(int64)返回示例:
json
{
"code": 0,
"msg": "",
"errCode": "",
"data": [
{
"appId": 0,
"appName": "",
"customerId": 0,
"jsonDetail": {},
"allowInput": {},
"allowInputAlias": {},
"allowInputType": {},
"intro": "",
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": "",
"bindInstanceIds": [
0
],
"bindInstances": [
{
"relationId": 0,
"customerId": 0,
"appId": 0,
"instanceId": 0,
"areaId": 0,
"instanceStatus": "",
"instanceStatusTime": "",
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": "",
"tenantId": 0
}
]
}
]
}代码示例:
bash
curl --location --request GET 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiApp/list' \
--header 'Authorization: Bearer 令牌Token'javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiApp/list',
'headers': {
'Authorization': 'Bearer 令牌Token'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});python
import http.client
conn = http.client.HTTPSConnection("waas.aigate.cc")
payload = ''
headers = {
'Authorization': 'Bearer 令牌Token'
}
conn.request("GET", "/api/openapi/comfyui/comfyuiApp/list", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://waas.aigate.cc/api/openapi/comfyui/comfyuiApp/list")
.get()
.addHeader("Authorization", "Bearer 令牌Token")
.build();
Response response = client.newCall(request).execute();php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiApp/list',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer 令牌Token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;http
GET /api/openapi/comfyui/comfyuiApp/list HTTP/1.1
Host: waas.aigate.cc
Authorization: Bearer 令牌Token查询ComfyUI应用绑定的实例列表
请求地址
GET https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list
Query参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| appId | query | integer | 是 | 应用ID(int64) |
返回响应
response (application/json)
├── code: integer # 业务状态码(0=成功,1=失败)
├── msg: string # 返回信息
├── errCode: string # 错误码
└── data: array<object> # ComfyUI 实例列表
├── customerId: integer # 用户 ID(int64)
├── appId: integer # 应用 ID(int64)
├── instanceId: integer # 实例 ID(int64)
├── areaId: integer # 区域 ID(int64)
├── instanceStatus: string # 实例状态
│ # 1=创建中
│ # 2=运行中
│ # 3=正在保存(运行状态下)
│ # 4=已释放
│ # 5=释放中
│ # 6=已暂停
│ # 7~25 / 26 / 40 / 44 / 50 / 1000:系统内部状态
├── instanceStatusTime: string # 实例状态更新时间
├── comfyuiHost: string # ComfyUI 地址
├── createBy: string # 创建人
├── createTime: string # 创建时间
├── updateBy: string # 更新人
├── updateTime: string # 更新时间
├── delFlag: string # 删除标识(1=删除)
└── tenantId: integer # 所属租户 ID(int64)返回示例:
json
{
"code": 0,
"msg": "",
"errCode": "",
"data": [
{
"customerId": 0,
"appId": 0,
"instanceId": 0,
"areaId": 0,
"instanceStatus": "",
"instanceStatusTime": "",
"comfyuiHost": "",
"createBy": "",
"createTime": "",
"updateBy": "",
"updateTime": "",
"delFlag": "",
"tenantId": 0
}
]
}代码示例:
bash
curl --location --request GET 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list?appId=0' \
--header 'Authorization: Bearer 令牌Token'javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list?appId=0',
'headers': {
'Authorization': 'Bearer 令牌Token'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});python
import requests
url = "https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list"
params = {"appId": 0}
headers = {
'Authorization': 'Bearer 令牌Token'
}
response = requests.get(url, headers=headers, params=params)
print(response.text)java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
HttpUrl url = HttpUrl.parse("https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list")
.newBuilder()
.addQueryParameter("appId", "0")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Authorization", "Bearer 令牌Token")
.build();
Response response = client.newCall(request).execute();php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiInstance/list?appId=0',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer 令牌Token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;http
GET /api/openapi/comfyui/comfyuiInstance/list?appId=0 HTTP/1.1
Host: waas.aigate.cc
Authorization: Bearer 令牌Token创建ComfyUI任务
请求地址
POST https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create
Body参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| appId | body | string | 是 | 应用 ID |
| instanceId | body | string | 是 | 实例 ID |
| allowInput | body | object | 是 | comfyui 工作流导出的参数 |
返回响应
response (application/json)
├── code: integer # 业务状态码(0=成功,1=失败)
├── msg: string # 返回信息
├── errCode: string # 错误码
├── data: object # 数据
│ └── key: object # key
└── ok: boolean # 是否成功返回示例:
json
{
"code": 0,
"msg": "",
"errCode": "",
"data": {
"": {}
},
"ok": false
}代码示例:
bash
curl --location --request POST 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create' \
--header 'Authorization: Bearer 令牌Token' \
--header 'Content-Type: application/json' \
--data-raw '{
"appId": "string",
"instanceId": "string",
"allowInput": {}
}'javascript
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create',
'headers': {
'Authorization': 'Bearer 令牌Token',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"appId": "string",
"instanceId": "string",
"allowInput": {}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});python
import requests
import json
url = "https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create"
payload = json.dumps({
"appId": "string",
"instanceId": "string",
"allowInput": {}
})
headers = {
'Authorization': 'Bearer 令牌Token',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"appId\": \"string\",\n \"instanceId\": \"string\",\n \"allowInput\": {}\n}");
Request request = new Request.Builder()
.url("https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create")
.method("POST", body)
.addHeader("Authorization", "Bearer 令牌Token")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/create',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"appId": "string",
"instanceId": "string",
"allowInput": {}
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer 令牌Token',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;http
POST /api/openapi/comfyui/comfyuiTask/create HTTP/1.1
Host: waas.aigate.cc
Authorization: Bearer 令牌Token
Content-Type: application/json
Content-Length: 75
{
"appId": "string",
"instanceId": "string",
"allowInput": {}
}查询ComfyUI任务状态
请求地址
GET https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status
Query参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| taskId | query | string | 是 | 任务ID |
返回响应
response (application/json)
├── code: integer # 业务状态码(0=成功,1=失败)
├── msg: string # 返回信息
├── errCode: string # 错误码
└── data: object # 数据(OpComfyuiTaskVO)
├── taskId: integer # 请求任务id
├── comfyuiPromptId: string # comfyui请求id
├── instanceId: integer # 实例ID
├── comfyuiHost: string # comfyui地址
├── allowInput: object # 允许输入字段
├── jsonDetailNew: object # 新ComfyUI API详情
├── status: integer # 状态(0-排队中,1-生成中,2-成功,3-取消,4-失败,5-超时)
├── startTime: string # 开始时间
├── endTime: string # 结束时间
├── executionDuration: integer # 执行耗时(秒)
└── files: array<object> # 结果文件列表
├── fileId: integer # 文件ID
├── areaId: integer # 区域ID
├── filePath: string # 文件Path
├── downloadUrl: string # 文件下载URL
├── fileName: string # 文件名称
└── fileType: string # 文件类型返回示例:
json
{
"code": 0,
"msg": "",
"errCode": "",
"data": {
"taskId": 0,
"comfyuiPromptId": "",
"instanceId": 0,
"comfyuiHost": "",
"allowInput": {},
"jsonDetailNew": {},
"status": 0,
"startTime": "",
"endTime": "",
"executionDuration": 0,
"files": [
{
"fileId": 0,
"areaId": 0,
"filePath": "",
"downloadUrl": "",
"fileName": "",
"fileType": ""
}
]
}
}代码示例:
bash
curl --location --request GET 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status?taskId=0' \
--header 'Authorization: Bearer 令牌Token'javascript
var request = require('request');
var options = {
'method': 'GET',
'url': 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status?taskId=0',
'headers': {
'Authorization': 'Bearer 令牌Token'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});python
import requests
url = "https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status"
params = {"taskId": 0}
headers = {
'Authorization': 'Bearer 令牌Token'
}
response = requests.get(url, headers=headers, params=params)
print(response.text)java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
HttpUrl url = HttpUrl.parse("https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status")
.newBuilder()
.addQueryParameter("taskId", "0")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Authorization", "Bearer 令牌Token")
.build();
Response response = client.newCall(request).execute();php
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://waas.aigate.cc/api/openapi/comfyui/comfyuiTask/status?taskId=0',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer 令牌Token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;http
GET /api/openapi/comfyui/comfyuiTask/status?taskId=0 HTTP/1.1
Host: waas.aigate.cc
Authorization: Bearer 令牌Token文件下载
在 ComfyUI 任务执行完成后,可通过以下步骤下载生成的结果文件:
- 查询任务状态
调用查询ComfyUI任务状态接口,确认任务已成功完成。当返回字段status = 2时,表示任务已成功,可进行文件下载。 - 获取并下载文件
在任务结果中,将包含一个或多个文件信息,每个文件提供对应的下载地址(downloadUrl)。请使用该 URL 下载所需文件。 注意事项 - 下载链接有效期 下载地址与 ComfyUI 实例绑定。若对应实例已关机或被释放,所有相关下载链接将立即失效,请及时下载所需文件。
- 网络与存储建议 受网络带宽限制,若需频繁调用或批量处理任务,建议在文件下载后尽快保存至个人持久化存储(例如:阿里云 OSS、本地服务器等),以避免因链接过期导致数据丢失。
文件上传
启动实例后,将用户本地文件上传到实例中指定目录,提供给ComfyUI组件调用。
请求地址
查询ComfyUI应用绑定的实例列表接口,获取指定实例的comfyuiHost做为请求地址。POST 请求地址 + /api/upload/image
Body参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| image | body | string(binary) | 是 | 上传的文件 (二进制格式) |
| type | body | string | 是 | 固定值: input |
返回示例:
json
{
"name": "示例文件.png",
"subfolder": "",
"type": "input"
}文件调用:
实例中上传文件目录:/root/comfyui/ComfyUI/input。
ComfyUI组件调用:如加载图像节点,传入上传文件的名称。
代码示例:
bash
curl --location --request POST 'https://请求地址/api/upload/image' \
--form 'image=@"/path/to/示例文件.png"' \
--form 'type="input"'javascript
const request = require('request');
const fs = require('fs');
// 读取要上传的文件
const fileStream = fs.createReadStream('/path/to/示例文件.png');
// 构建请求选项
const options = {
'method': 'POST',
'url': 'https://请求地址/api/upload/image',
// 使用 formData 进行文件上传
'formData': {
'image': {
'value': fileStream,
'options': {
'filename': '示例文件.png',
'contentType': null
}
},
'type': 'input'
}
};
// 发送请求
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});python
import requests
# 请求地址(从实例列表接口获取的 comfyuiHost)
url = "https://请求地址/api/upload/image"
# 构建表单数据:包含文件和类型参数
files = {
'image': open('/path/to/示例文件.png', 'rb')
}
data = {
'type': 'input'
}
# 发送 POST 请求上传文件
response = requests.post(url, headers=headers, files=files, data=data)
# 输出响应结果
print(response.text)
# 关闭文件句柄
files['image'].close()java
import okhttp3.*;
import java.io.File;
// 创建 OkHttpClient 实例
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
// 构建请求体,包含文件和表单字段
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("type", "input")
.addFormDataPart("image", "示例文件.png",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("/path/to/示例文件.png")))
.build();
// 构建请求对象
Request request = new Request.Builder()
.url("https://请求地址/api/upload/image")
.method("POST", body)
.build();
// 执行请求并获取响应
Response response = client.newCall(request).execute();php
<?php
// 初始化 cURL
$curl = curl_init();
// 构建文件路径
$filePath = '/path/to/示例文件.png';
// 设置 cURL 选项
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://请求地址/api/upload/image',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
// 使用 CURLFile 对象上传文件
CURLOPT_POSTFIELDS => array(
'image' => new CURLFile($filePath),
'type' => 'input'
),
));
// 执行请求并获取响应
$response = curl_exec($curl);
// 关闭 cURL 资源
curl_close($curl);
// 输出响应结果
echo $response;http
POST /api/upload/image HTTP/1.1
Host: 请求地址
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 345
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="type"
input
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image"; filename="示例文件.png"
Content-Type: image/png
[二进制文件数据]
------WebKitFormBoundary7MA4YWxkTrZu0gW--