开发与 API

路由

路由 服务器定义了一系列 get 和 post 方法, 这些方法可以通过在 server.py 中搜索 @routes 找到。当你在网页客户端提交工作流时, 它会被发送到 /prompt 端点,该端点会验证提示并将其添加到执行队列中, 返回 prompt id 和 number (队列中的位置),如果验证失败则返回 error 和 node errors 。

路由

服务器定义了一系列 getpost 方法, 这些方法可以通过在 server.py 中搜索 @routes 找到。当你在网页客户端提交工作流时, 它会被发送到 /prompt 端点,该端点会验证提示并将其添加到执行队列中, 返回 prompt_idnumber(队列中的位置),如果验证失败则返回 errornode_errors。 提示队列定义在 execution.py 中,该文件还定义了 PromptExecutor 类。

内置路由

server.py 定义了以下路由:

核心 API 路由

路径 get/post/ws 用途
/ get 加载 Comfy 网页
/ws websocket 用于与服务器进行实时通信的 WebSocket 端点
/embeddings get 获取可用的嵌入模型名称列表
/extensions get 获取注册了 WEB_DIRECTORY 的扩展列表
/features get 获取服务器功能和能力
/models get 获取可用模型类型列表
/models/{folder} get 获取特定文件夹中的模型
/workflow_templates get 获取自定义节点模块及其关联模板工作流的映射
/upload/image post 上传图片
/upload/mask post 上传蒙版
/view get 查看图片。更多选项请参见 server.py 中的 @routes.get("/view")
/view_metadata/{folder_name} get 获取模型的元数据
/system_stats get 获取系统信息(Python 版本、设备、显存等)
/prompt get 获取当前队列状态和执行信息
/prompt post 提交提示到队列
/object_info get 获取所有节点类型的详细信息
/object_info/{node_class} get 获取特定节点类型的详细信息
/history get 获取队列历史记录
/history/{prompt_id} get 获取特定提示的队列历史记录
/history post 清除历史记录或删除历史记录项
/queue get 获取执行队列的当前状态
/queue post 管理队列操作(清除待处理/运行中的任务)
/interrupt post 停止当前工作流执行
/free post 通过卸载指定模型释放内存
/userdata get 列出指定目录中的用户数据文件
/v2/userdata get 增强版本,以结构化格式列出文件和目录
/userdata/{file} get 获取特定的用户数据文件
/userdata/{file} post 上传或更新用户数据文件
/userdata/{file} delete 删除特定的用户数据文件
/userdata/{file}/move/{dest} post 移动或重命名用户数据文件
/users get 获取用户信息
/users post 创建新用户(仅限多用户模式)

WebSocket 通信

/ws 端点提供客户端与服务器之间的实时双向通信。用于:

  • 接收执行进度更新
  • 实时获取节点执行状态
  • 接收错误消息和调试信息
  • 队列状态变化时的实时更新

WebSocket 连接发送不同类型的 JSON 消息,例如:

  • status - 整体系统状态更新
  • execution_start - 当提示执行开始时
  • execution_cached - 当使用缓存结果时
  • executing - 节点执行期间的更新
  • progress - 长时间运行操作的进度更新
  • executed - 当节点完成执行时

自定义路由

如果你想在执行过程中从客户端向服务器发送消息,你需要在服务器中添加一个自定义路由。 对于复杂的情况,你需要深入研究 aiohttp 框架文档,但大多数情况可以按以下方式处理:

Python
from server import PromptServer
from aiohttp import web
routes = PromptServer.instance.routes
@routes.post('/my_new_path')
async def my_function(request):
    the_data = await request.post()
    # the_data now holds a dictionary of the values sent
    MyClass.handle_my_message(the_data)
    return web.json_response({})

客户端可以通过发送 FormData 对象来使用这个新路由,代码如下所示, 这将导致上面代码中的 the_data 包含 messagenode_id 键:

Javascript
import { api } from "../../scripts/api.js";
function send_message(node_id, message) {
    const body = new FormData();
    body.append('message',message);
    body.append('node_id', node_id);
    api.fetchApi("/my_new_path", { method: "POST", body, });
}

官方原文

本页来自 Comfy-Org 官方中文文档的固定版本,并转换为 xueai 静态页面。内容以官方持续更新的页面为准。

内容授权与修改

官方文档采用 GPL-3.0。本站保留许可证、固定提交号和修改说明,不代表 ComfyUI 或 Comfy-Org 对本站背书。

GPL-3.0来源和修改说明