ComfyUI:将工作流部署为 API¶
ComfyUI 是一个强大的工具,用于设计高级扩散工作流。它提供了丰富的资源集合,包括共享工作流和自定义节点,帮助创意工作者和开发者无需处理复杂的代码即可生成内容。然而,将这些工作流部署和提供为可扩展的 API 端点可能复杂且不直观。
为了解决部署挑战,BentoML 团队开发了comfy-pack,这是一个全面的工具包,可将 ComfyUI 工作流转换为生产级 API。具体来说,comfy-pack 使您能够
为工作流输入和输出定义标准化 API 模式
将工作流作为可通过标准 API 客户端访问的 HTTP 端点提供
将工作流部署到 BentoCloud,享受企业级功能,如快速自动扩展和内置可观测性
将完整工作空间打包为便携式工件,以实现一致的重现
安装¶
您可以使用ComfyUI Manager 或 Git 安装 comfy-pack。
打开 ComfyUI Manager。
搜索
comfy-pack
并点击安装。点击重启并刷新您的 ComfyUI 界面以应用更改。
将仓库克隆到您的 ComfyUI 自定义节点目录中
cd ComfyUI/custom_nodes
git clone https://github.com/bentoml/comfy-pack.git
指定输入和输出节点¶
将 ComfyUI 工作流作为 API 提供时,一个关键挑战是为工作流输入和输出建立标准化模式。comfy-pack 通过提供专用接口节点来解决这个问题,这些节点可以与现有工作流无缝集成,而不会影响其核心功能。
右键单击包含要暴露的小部件的节点。
选择“转换为输入小部件”,然后选择小部件名称。
添加 comfy-pack 输入节点
在空白处右键单击。
导航到“添加节点”>“ComfyPack”>“input”,然后选择所需的输入节点类型
图像输入:接受图像类型输入,类似于官方的
LoadImage
节点。字符串输入:接受字符串类型输入(例如,提示词)。
整数输入:接受整数类型输入(例如,尺寸、种子)。
文件输入:接受文件类型输入。
任意输入:接受组合类型和其他输入(例如,自定义节点)。
将 comfy-pack 输入节点连接到您之前转换的小部件。
添加 comfy-pack 输出节点
在空白处右键单击。
导航到“添加节点”>“ComfyPack”>“output”,然后选择所需的输出节点类型
文件输出:将文件路径作为字符串输出,并将文件保存到指定位置。
图像输出:输出图像,类似于官方的
SaveImage
节点。
将工作流的输出连接到 comfy-pack 输出节点。
运行工作流以确保其按预期工作。
将工作流作为 API 提供¶
您可以将 ComfyUI 工作流暴露为可从任何客户端调用的 HTTP API。
在屏幕顶部的工具栏上,点击“提供服务”(Serve)。
设置所需端口(默认:
3000
)。点击“启动”(Start)启动服务器。API 将在
http://127.0.0.1:<port>
可用。服务器暴露了
/generate
端点。您可以使用它提交包含通过 comfy-pack 节点配置的参数(例如,prompt
、width
、height
、seed
)的请求。例如curl -X 'POST' \ 'http://127.0.0.1:3000/generate' \ -H 'accept: application/octet-stream' \ -H 'Content-Type: application/json' \ --output output.png \ -d '{ "prompt": "rocks in a bottle", "width": 512, "height": 512, "seed": 1 }'
comfy-pack 使用 BentoML 作为其服务框架,允许您使用BentoML Python 客户端进行交互
import bentoml with bentoml.SyncHTTPClient("http://127.0.0.1:3000") as client: result = client.generate( prompt="rocks in a bottle", width=512, height=512, seed=1 )
重要提示
API 调用中的参数名称必须与您的 comfy-pack 节点名称匹配。
部署到 BentoCloud¶
您可以将您的 ComfyUI 工作流部署到 BentoCloud,以获得更好的管理和可扩展性。
打包和恢复工作空间¶
您可以将 ComfyUI 工作空间打包成一个便携式工件,确保它可以轻松传输并在其他地方以一致的行为解包。
创建包¶
在屏幕顶部的工具栏上,点击“打包”(Package)。
设置包的名称。
(可选)选择要包含的模型。请注意,只存储模型哈希值,而不是实际文件。这可以最大限度地减小包的大小,同时确保版本准确性。
点击“打包”(Pack)。您的浏览器将自动下载一个
.cpack.zip
文件。
恢复工作空间¶
安装 comfy-pack CLI
pip install comfy-pack
解包
.cpack.zip
文件comfy-pack unpack <workflow_name>.cpack.zip
解包时,comfy-pack 通过执行以下步骤来恢复原始 ComfyUI 工作空间
准备一个带有工作流中使用的精确软件包的 Python 虚拟环境。
克隆特定的 ComfyUI 版本和自定义节点,固定到工作流所需的精确版本。
从 Hugging Face 和 Civitai 等常用注册表搜索和下载模型。它使用符号链接实现高效的模型共享(即,模型只下载一次并在工作流之间重用),并通过哈希检查验证模型完整性。