引言
ComfyUI是一个基于Stable Diffusion和其他AI模型的图形化界面,允许用户通过节点式工作流创建复杂的图像和视频生成任务。工作流通常以JSON格式保存,包含各个节点及其连接的详细信息。用户提供了一个名为“2Video文生视频-API.json”的JSON文件,定义了一个视频生成工作流,包括文本编码、模型加载、视频帧生成、解码、上采样和最终视频组装等步骤。本报告旨在生成Python代码,解析此JSON文件并触发ComfyUI工作流的“Queue”按钮行为,即执行工作流。

方法与实现
为了实现这一目标,我们需要使用ComfyUI的API,具体是通过HTTP请求向服务器发送工作流JSON。以下是详细的实现步骤和相关技术细节。
工作流JSON的解析
提供的JSON文件是一个描述视频生成管道的结构化数据。根据附件的摘要,它包含多个节点,例如:
- 文本编码节点(如加载T5文本编码器“umt5-xxl-enc-bf16.safetensors”)。
- 模型加载节点(如视频生成模型“Wan2_1-T2V-14B_fp8_e4m3fn.safetensors”和VAE解码模型)。
- 采样和生成节点(如使用15步CFG缩放6的采样器生成视频帧)。
- 视频处理节点(如使用RIFE插值模型增强帧率和RealESRGAN上采样模型提升分辨率)。
- 最终输出节点(如将处理后的帧组装为30帧/秒的MP4视频)。
这些节点通过输入输出连接形成一个完整的管道,适合从文本描述生成高质量视频。
在Python中,我们可以使用json.load()函数从文件中读取这个JSON,得到一个Python字典。例如:
import json
with open('2Video文生视频-API.json', 'r', encoding='utf-8') as f:
workflow_json = json.load(f)
ComfyUI API的调用
ComfyUI提供了一个RESTful API,允许通过HTTP请求控制工作流执行。关键端点是“/prompt”,用于将工作流放入队列执行。根据相关文档(例如Hosting a ComfyUI Workflow via API),我们需要发送一个POST请求,包含以下参数:
- prompt:整个工作流JSON。
- client_id:一个标识客户端的唯一字符串,通常使用UUID生成。
- server_address:ComfyUI服务器的地址,默认为“localhost:8188”。
以下是实现代码:python
import json
import urllib.request
import uuid
def queue_workflow(workflow_json, client_id, server_address):
payload = {
"prompt": workflow_json,
"client_id": client_id
}
headers = {'Content-Type': 'application/json'}
data = json.dumps(payload).encode('utf-8')
url = f"http://{server_address}/prompt"
req = urllib.request.Request(url, data=data, headers=headers)
with urllib.request.urlopen(req) as response:
response_data = response.read().decode('utf-8')
return json.loads(response_data)
# 主函数
def main():
# 读取工作流JSON
with open('2Video文生视频-API.json', 'r', encoding='utf-8') as f:
workflow_json = json.load(f)
# 生成客户端ID
client_id = uuid.uuid4().hex
# 设置服务器地址
server_address = "localhost:8188"
# 触发工作流
response = queue_workflow(workflow_json, client_id, server_address)
print("API响应:", response)
if name == "__main__":
main()
API响应的处理
执行后,API通常返回一个JSON响应,包含prompt_id和状态信息(如“QUEUED”)。这个prompt_id可以用于后续查询工作流执行状态(通过“/history/{prompt_id}”端点),但对于本问题,触发执行已足够。
注意事项
- 服务器启动:确保ComfyUI已启动并启用了API功能(通常通过命令行参数–api启动)。
- JSON格式:提供的JSON应为ComfyUI工作流格式。如果是“API格式”,可以直接使用;如果是普通保存格式,可能需要额外处理(但从附件描述来看,它似乎已经是正确的格式)。
- 错误处理:实际应用中应添加错误处理,例如网络错误或JSON解析错误,但此处为简化未包含。
- 服务器地址:如果ComfyUI运行在其他位置(如远程服务器),需相应调整server_address。
技术细节
代码中的 url = f”http://{server_address}/prompt” 确实是用于调用 ComfyUI 的 API。
详细解释
ComfyUI 提供了一个内置的 RESTful API,允许用户通过 HTTP 请求与服务器交互,从而实现工作流的自动化执行、管理和状态查询等功能。在你的代码中,url = f”http://{server_address}/prompt” 是构造了一个指向 ComfyUI API 的“/prompt”端点的 URL,用于提交工作流并触发其执行,相当于在界面上点击“Queue”按钮。
具体机制
- 服务器地址 (server_address):
- 默认情况下,server_address 被设置为 “localhost:8188″,这是 ComfyUI 在本地运行时的默认地址和端口(8188 是 ComfyUI 的默认端口)。
- 如果 ComfyUI 运行在远程服务器上,你需要将 server_address 修改为实际的 IP 地址或域名,例如 “192.168.1.100:8188” 或 “example.com:8188″。
- 端点 “/prompt”:
- “/prompt” 是 ComfyUI API 的一个关键端点,专门用于接收工作流(prompt)并将其放入执行队列。
- 当你向这个端点发送一个 POST 请求时,ComfyUI 服务器会解析请求中的 JSON 数据(包含工作流内容和客户端 ID),然后开始处理工作流,生成相应的输出(如图像或视频)。
- HTTP 请求:
- 在代码中,urllib.request.Request 创建了一个 POST 请求,包含:
- URL:http://{server_address}/prompt(例如 http://localhost:8188/prompt)。
- 数据:payload(包含 “prompt” 和 “client_id” 的 JSON 数据)。
- 头部:{‘Content-Type’: ‘application/json’},表明发送的数据是 JSON 格式。
- urllib.request.urlopen(req) 执行请求并返回服务器的响应。
- 在代码中,urllib.request.Request 创建了一个 POST 请求,包含:
- 功能等价:
- 这个 API 调用等同于在 ComfyUI 的图形界面中加载工作流 JSON 文件并点击“Queue”按钮。不同之处在于,API 方式允许自动化和远程操作,而无需手动交互。
响应示例
服务器通常会返回一个 JSON 格式的响应,表明工作流是否成功加入队列。例如:json
{
"prompt_id": "abc123-def456-ghi789",
"number": 1,
"node_errors": []
}
- prompt_id:一个唯一的标识符,用于跟踪该工作流的执行状态。
- node_errors:如果工作流中有配置错误,这里会列出相关信息。
前提条件
为了让这个调用生效,需要确保:
- ComfyUI 服务器已启动:通过命令行运行 python main.py(或类似命令)启动 ComfyUI,且默认监听在 localhost:8188。
- API 功能启用:通常无需额外配置,ComfyUI 默认支持 API,但某些版本可能需要通过 –api 参数显式启用。
- 网络可达:如果不是本地运行,需确保服务器地址可访问,且防火墙未阻止端口。
验证方法,你可以手动测试这个 API,例如使用 curl 或 Postman:
curl -X POST http://localhost:8188/prompt -H "Content-Type: application/json" -d '{"prompt": {...}, "client_id": "test123"}'
如果返回类似上述的 JSON 响应,说明 API 调用成功。
结论
通过上述Python代码,可以成功解析“2Video文生视频-API.json”文件,并通过ComfyUI的API触发工作流的执行,模拟点击“Queue”按钮的行为。确保ComfyUI服务器已正确启动并配置API功能,代码即可正常运行。
关键引用
- Hosting a ComfyUI Workflow via API
- Run ComfyUI with an API – ComfyICU API
- Start by running the ComfyUI examples – Replicate docs
- ComfyUI Workflows
- Deploying custom ComfyUI workflows as APIs | Baseten Blog
- How to serve your ComfyUI model behind an API endpoint | Baseten Blog
RA/SD 衍生者AI训练营。发布者:稻草人,转载请注明出处:https://www.shxcj.com/ai%e6%95%99%e4%bd%a0%e5%81%9a%e8%a7%86%e9%a2%91-2-python%e4%b8%ad%e8%b0%83%e7%94%a8comfyui%e7%9a%84api/