Skip to main content

ComfyUI

注意

本教程为社区贡献,不属于 Open WebUI 官方团队的支持范围。它仅作为如何根据特定用例自定义 Open WebUI 的演示。想要贡献?请查看贡献教程。

ComfyUI 是一个功能强大且模块化的基于节点的 Stable Diffusion GUI。它让用户对图像生成过程拥有高度的控制权。了解更多信息或从其 GitHub 页面 下载。

要运行 ComfyUI 并使其可供 Open WebUI 访问,您必须使用 --listen 标志启动它以绑定到 0.0.0.0。这允许它接受来自网络上其他计算机的连接。

一旦运行,ComfyUI 界面将可通过 http://<您的_comfyui_ip>:8188 访问。

ComfyUI 服务器启动命令截图,突出了 --listen 标志。

将 ComfyUI 连接到 Open WebUI

由于 Open WebUI 通常在 Docker 内部运行,您必须确保容器可以通过 host.docker.internal 访问基于主机的 ComfyUI 应用程序。

  1. 主机绑定检查:确保 ComfyUI 运行时带有 --listen 0.0.0.0 标志(步骤 5)。

  2. 防火墙检查:如果主机防火墙 (UFW) 已激活,请确保允许 8188 端口 (sudo ufw allow 8188/tcp)。

  3. Docker 运行命令(Linux 原生 Docker): 对于不运行 Docker Desktop 的 Linux 用户,在运行 Open WebUI 容器时,必须显式映射主机网关。

docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-e COMFYUI_BASE_URL=http://host.docker.internal:8188/ \
-e ENABLE_IMAGE_GENERATION=True \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main

安装并运行 ComfyUI 后,您可以从管理员设置将其连接到 Open WebUI。

创建图像(图像生成)

  1. 导航到图像设置:在 Open WebUI 中,转到 管理员面板 > 设置 > 图像

  2. 启用并配置 ComfyUI

    • 确保页面顶部的 图像生成 开关已启用。
    • 创建图像 部分,将 图像生成引擎 设置为 ComfyUI
    • 模型:选择用于生成图像的基础模型。
    • 图像尺寸:定义生成图像的分辨率(例如 512x512、1024x1024)。
    • 步数 (Steps):采样步数;较高的值可以提高图像质量,但处理时间更长。
    • 图像提示词生成:启用后,此功能将使用语言模型根据您的初始输入自动生成更详细、更有创意的提示词,从而获得更好的图像结果。
    • ComfyUI 基础 URL 字段中,输入正在运行的 ComfyUI 实例的地址(例如 http://host.docker.internal:8188/)。
    • 点击 URL 字段旁边的 刷新图标 (🔄) 以验证连接。应出现成功消息。
    • 如果您的 ComfyUI 实例需要 API 密钥,请在 ComfyUI API 密钥 字段中输入。

    Open WebUI 图像设置页面截图,选择了 ComfyUI 进行图像生成。

  3. 上传您的 ComfyUI 工作流

    • 首先,您需要从 ComfyUI 导出正确格式的工作流。在 ComfyUI 界面中,点击左上角的 ComfyUI 标志,然后点击 Settings。然后搜索并启用 "Dev Mode" 选项,其描述为 "Enable dev mode options (API save, etc.)"

    ComfyUI 设置截图,突出了 &quot;Dev Mode&quot; 开关。

    • 仍在 ComfyUI 中,加载您想要使用的 图像生成 工作流,然后点击点击 ComfyUI 标志后在 File 子菜单中找到的 "Export (API)" 按钮。这将提示您命名文件。起一个好记的名字并下载。

    ComfyUI 界面中 &quot;Save (API Format)&quot; 按钮的截图。

    • 回到 Open WebUI,在 ComfyUI 工作流 部分,点击 上传。选择您刚刚下载的 JSON 工作流文件。

    Open WebUI 中 ComfyUI 工作流部分的截图,显示了上传按钮。

  4. 映射工作流节点

    • 导入工作流后,您必须将工作流中的节点 ID 映射到 Open WebUI 中相应的字段(例如 提示词 (Prompt)模型 (Model)种子 (Seed))。这告诉 Open WebUI 控制 ComfyUI 工作流中的哪些输入。
    • 您可以通过在 ComfyUI 中点击节点并查看其详细信息来找到节点 ID。

    Open WebUI 中 ComfyUI 工作流节点部分的截图,显示了映射字段。

    提示

    您可能需要调整 Open WebUI 的 ComfyUI 工作流节点 部分中的 输入键 (Input Key) 以匹配工作流中的节点。例如,根据您的工作流结构,默认的 seed 键可能需要更改为 noise_seed

    建议

    某些工作流(例如使用任何 Flux 模型的工作流)可能会使用多个节点 ID,这些 ID 需要填入 Open WebUI 的节点条目字段中。如果一个节点条目字段需要多个 ID,则节点 ID 应以逗号分隔(例如 11, 2)。

  5. 保存配置

    • 点击页面底部的 保存 按钮以完成配置。现在您可以在 Open WebUI 中使用 ComfyUI 进行图像生成了。

聊天中使用 ComfyUI 生成图像的截图。

编辑图像

Open WebUI 还支持通过 ComfyUI 进行图像编辑,允许您修改现有图像。

  1. 导航到图像设置:在 Open WebUI 中,转到 管理员面板 > 设置 > 图像

  2. 配置图像编辑

    • 编辑图像 部分,将 图像编辑引擎 设置为 ComfyUI
    • 模型:选择用于编辑任务的模型。
    • 图像尺寸:指定输出图像的所需分辨率。
    • ComfyUI 基础 URLAPI 密钥:这些字段与图像生成设置共享。
    • ComfyUI 工作流:上传专门为图像编辑任务设计的独立工作流文件。过程与图像生成相同。
    • 映射工作流节点:与图像生成一样,您必须将编辑工作流中的节点 ID 映射到 Open WebUI 中的相应字段。编辑工作流的常见字段包括 图像 (Image)提示词 (Prompt)模型 (Model)

    Open WebUI 图像设置页面截图,选择了 ComfyUI 进行图像编辑。

聊天中使用 ComfyUI 编辑图像的截图。

深入探索:将 ComfyUI 节点映射到 Open WebUI

理解节点 ID 映射通常是将 ComfyUI 与 Open WebUI 等外部服务集成的最大障碍。通过 API 集成 ComfyUI 需要将 Open WebUI 的通用控制(例如“模型”、“宽度”、“提示词”)映射到静态 ComfyUI 工作流 JSON 中的特定节点输入。

1. 在 ComfyUI 中识别节点 ID 和输入键

在配置 Open WebUI 之前,您必须直接在文本编辑器中检查导出的工作流 JSON 文件。节点 ID 是 ComfyUI 用来在 JSON 结构中识别节点的唯一数字。JSON 对象中的顶级键就是节点 ID。

ComfyUI 界面截图,选择了一个节点,并在属性面板中突出了节点 ID。

识别输入键 (参数名称)

输入键是该节点 JSON 结构中您需要更改的确切参数名称(例如 seedwidthunet_name)。

  1. 检查 JSON:查看您的 API 工作流 JSON (workflow_api.json)。
  2. 找到节点 ID:找到对应节点 ID 的部分(例如 "37")。
  3. 识别键:在 "inputs" 块中,找到您想要控制的变量。

示例:unet_name 节点 (ID 37)

"37": {
"inputs": {
"unet_name": "qwen_image_fp8_e4m3fn.safetensors",
"weight_dtype": "default"
},
"class_type": "UNETLoader",
"_meta": {
"title": "Load Diffusion Model"
}
},

ComfyUI 界面截图,选择了 UNETLoader 节点,突出了节点 ID 以及 &#39;seed&#39; 和 &#39;steps&#39; 输入字段。

在这个例子中,输入键是 seedsteps

2. 在 Open WebUI 中进行映射

在 Open WebUI 设置的 ComfyUI 工作流节点 下,您将看到一个硬编码参数列表(例如 提示词模型种子)。对于每个参数,您必须提供工作流中的两条信息:

  • 输入键 (左侧字段):工作流 JSON 中节点 inputs 块中的特定参数名称(例如 textunet_nameseed)。
  • 节点 ID (右侧字段):您想要控制的节点的对应 ID(例如 6393)。

这告诉 Open WebUI 找到具有给定 ID 的节点并修改指定输入键的值。

示例:映射 KSampler 种子 (Seed)

假设您想控制 KSampler 节点中的 seed,该节点的 ID 为 3。在 Open WebUI 设置的 种子 部分:

Open WebUI 参数输入键 (左侧字段)节点 ID (右侧字段)
种子seed3

3. 处理复杂/多模态节点 (以 Qwen 为例)

对于专用节点,输入键可能不是简单的文本。

参数输入键 (左侧字段)节点 ID (右侧字段)备注
提示词prompt76键仍然是 prompt,但它指向专门的 TextEncodeQwenImageEdit 节点 (76)。
模型unet_name37您必须使用确切的输入键 unet_name 来控制 UNETLoader 中的模型文件名。
图像输入image78键是 image。这将源图像的文件名传递给 LoadImage 节点。

4. 故障排除:不匹配错误

如果 ComfyUI 停滞或给出验证错误,请查阅日志和 JSON 结构:

错误类型原因与调试解决方案
Value not in list: unet_name: 'xyz.safetensors'您映射了正确的节点 ID (例如 37),但传递的值 (例如 xyz.safetensors) 对于该节点类型不是有效的模型名称 (例如,错误地将 VAE 模型发送到了 UNET 加载器)。修正 Open WebUI 中为图像生成或编辑设置的模型名称,确保模型名称与 ComfyUI 节点预期的模型类型匹配。
Missing input <key>您的工作流需要一个输入 (例如 cfgsampler_name),但 Open WebUI 没有发送值,因为该字段未被映射。要么在工作流 JSON 中硬编码该值,要么将所需的输入键映射到正确的节点 ID。

通过仔细匹配节点 ID 和特定的输入键,您可以确保 Open WebUI 在将提示词提交给 ComfyUI 之前,正确覆盖工作流 JSON 中的默认值。

示例设置:Qwen 图像生成与编辑

本部分提供了关于设置 Qwen 模型进行图像生成和编辑的补充指南。

Qwen 图像生成

模型下载

模型存储位置

📂 ComfyUI/
├── 📂 models/
│ ├── 📂 diffusion_models/
│ │ └── qwen_image_fp8_e4m3fn.safetensors
│ ├── 📂 vae/
│ │ └── qwen_image_vae.safetensors
│ └── 📂 text_encoders/
│ └── qwen_2.5_vl_7b_fp8_scaled.safetensors

Qwen 图像编辑

模型下载

模型存储位置

📂 ComfyUI/
├── 📂 models/
│ ├── 📂 diffusion_models/
│ │ └── qwen_image_edit_fp8_e4m3fn.safetensors
│ ├── 📂 vae/
│ │ └── qwen_image_vae.safetensors
│ └── 📂 text_encoders/
│ └── qwen_2.5_vl_7b_fp8_scaled.safetensors

示例设置:FLUX.1 图像生成

本部分提供了关于设置 FLUX.1 模型进行图像生成的补充指南。

FLUX.1 Dev

模型下载

模型存储位置

📂 ComfyUI/
├── 📂 models/
│ ├── 📂 diffusion_models/
│ │ └── flux1-dev.safetensors
│ ├── 📂 vae/
│ │ └── ae.safetensors
│ └── 📂 text_encoders/
│ ├── clip_l.safetensors
│ └── t5xxl_fp16.safetensors

FLUX.1 Schnell

模型下载

模型存储位置

📂 ComfyUI/
├── 📂 models/
│ ├── 📂 diffusion_models/
│ │ └── flux1-schnell.safetensors
│ ├── 📂 vae/
│ │ └── ae.safetensors
│ └── 📂 text_encoders/
│ ├── clip_l.safetensors
│ └── t5xxl_fp8_e4m3fn.safetensors

使用 SwarmUI 进行配置

SwarmUI 使用 ComfyUI 作为其后端。为了让 Open WebUI 与 SwarmUI 配合工作,您必须在 ComfyUI 基础 URL 后面追加 ComfyBackendDirect。此外,您还需要为 SwarmUI 设置局域网 (LAN) 访问。完成上述调整后,设置 SwarmUI 与 Open WebUI 配合工作的步骤将与上面概述的 ComfyUI 图像生成步骤相同。 设置具有局域网访问权限的 SwarmUI

SwarmUI API URL

您将作为 ComfyUI 基础 URL 输入的地址如下所示:http://<您的_swarmui_地址>:7801/ComfyBackendDirect