跳到主要内容

ComfyUI

警告

本教程由社区贡献,不受 Open WebUI 团队支持。它仅作为如何针对您特定使用场景自定义 Open WebUI 的演示。想要贡献?请查看贡献教程。

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

要在运行 ComfyUI 的同时使其对 Open WebUI 可用,您必须启动它时加上 --listen 参数以绑定到 0.0.0.0。这允许它接受来自您网络上其他计算机的连接。

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

Screenshot of the ComfyUI server startup command with the --listen flag highlighted.

将 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。

图像提示词生成

此功能使用语言模型,根据您的初始输入自动生成更详细、更具创意的提示词,从而获得更好的图像生成效果。

Image Prompt Generation(图像提示词生成)开关位于 Admin Panel > Settings > Images(管理员面板 > 设置 > 图像)的 “Image Generation”(图像生成)部分下,在选择图像生成引擎之前

要自定义生成提示词时所使用的提示词模板,请前往 Admin Panel > Settings > Interface > Tasks(管理员面板 > 设置 > 界面 > 任务)。

Screenshot showing the Image Prompt Generation toggle location in Images settings

创建图像(图像生成)

  1. 导航至图像设置: 在 Open WebUI 中,前往 Admin Panel > Settings > Images(管理员面板 > 设置 > 图像)。

  2. 启用并配置 ComfyUI:

    • 确保页面顶部的 Image Generation(图像生成)开关已启用。
    • Create Image(创建图像)部分下,将 Image Generation Engine(图像生成引擎)设置为 ComfyUI
    • Model(模型):选择用于生成图像的基础模型。
    • Image Size(图像尺寸):定义生成图像的分辨率(例如 512x512, 1024x1024)。
    • Steps(步数):采样步数;较高的值可以提高图像质量,但需要更长的处理时间。
    • ComfyUI Base URL 字段中,输入您正在运行的 ComfyUI 实例地址(例如 http://host.docker.internal:8188/)。
    • 点击 URL 字段旁边的刷新图标(🔄)以验证连接。此时应该会出现成功消息。
    • 如果您的 ComfyUI 实例需要 API 密钥,请在 ComfyUI API Key 字段中输入它。

    Screenshot of the Open WebUI Images settings page with ComfyUI selected for image generation.

  3. 上传您的 ComfyUI 工作流:

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

    Screenshot of the ComfyUI settings with the &quot;Dev Mode&quot; toggle highlighted.

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

    Screenshot of the &quot;Save (API Format)&quot; button in the ComfyUI interface.

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

    Screenshot of the ComfyUI Workflow section in Open WebUI, showing the upload button.

  4. 映射工作流节点: 导入工作流后,您必须将工作流中的节点 ID 映射到 Open WebUI 中对应的字段。每个参数有两个字段:

    • Key (左侧字段): 工作流中的输入参数名称(例如 text, ckpt_name, seed
    • Node Ids (右侧字段): 包含此输入的节点 ID(多个 ID 用逗号分隔)

    UI 显示了六个用于图像生成的可配置参数:

    参数默认键名 (Key)是否必填描述
    Prompt*text正向提示词文本
    Modelckpt_nameCheckpoint 模型名称
    Widthwidth输出图像宽度
    Heightheight输出图像高度
    Stepssteps采样步数
    Seedseed用于复现的随机种子

    注意: 必填参数标有星号 (*)。只有 prompt(提示词)节点 ID 是严格必填的。

    您可以通过在 ComfyUI 中点击某个节点并查看其属性详情来找到该节点的 ID。

    Screenshot of the ComfyUI Workflow Nodes section in Open WebUI, showing the mapping fields.

    信息

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

    提示

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

  5. 保存配置:

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

Screenshot of an image being generated in the chat using ComfyUI.

编辑图像

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

  1. 导航至图像设置: 在 Open WebUI 中,前往 Admin Panel > Settings > Images(管理员面板 > 设置 > 图像)。

  2. 配置图像编辑:

    • Edit Image(编辑图像)部分下,将 Image Edit Engine(图像编辑引擎)设置为 ComfyUI
    • Model(模型):选择用于编辑任务的模型。
    • Image Size(图像尺寸):指定输出图像所需的 resolution。
    • ComfyUI Base URLAPI Key:这些字段与图像生成设置共享。
    • ComfyUI Workflow:上传专为图像编辑任务设计的独立工作流文件。过程与图像生成相同。
    • 映射工作流节点:图像编辑有五个可配置参数,其默认值与生成有所不同:
    参数默认键名 (Key)是否必填描述
    Image*image待编辑的输入图像
    Prompt*prompt编辑提示词文本
    Modelunet_name扩散模型名称
    Widthwidth输出图像宽度
    Heightheight输出图像高度

    注意: 与图像生成不同,编辑不支持负向提示词、步数、种子或批次大小(batch size)参数。

    Screenshot of the Open WebUI Images settings page with ComfyUI selected for image editing.

Screenshot of an image being edited in the chat using ComfyUI.

深入剖析:将 ComfyUI 节点映射到 Open WebUI

理解节点 ID 映射通常是将 ComfyUI 与外部服务(如 Open WebUI)集成时遇到的最大障碍。通过 API 集成 ComfyUI 需要将 Open WebUI 的通用控件(例如 “Model”、“Width”、“Prompt”)映射到静态 ComfyUI 工作流 JSON 内部的特定节点输入。

将工作流节点映射到 Open WebUI

Open WebUI 的 ComfyUI Workflow Nodes 部分允许您将通用控件映射到静态 ComfyUI 工作流 JSON 中的特定节点输入。每一行有两个字段:

字段描述示例
Key (左侧)节点 inputs 块中的输入参数名称text, ckpt_name, seed
Node Ids (右侧)要映射的目标节点 ID,多个用逗号分隔61, 2, 3

在 ComfyUI 中识别节点 ID 与输入键

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

Screenshot of the ComfyUI interface with a node selected, highlighting the node ID in the properties panel.

识别输入键 (参数名称)

Key 是该节点的 JSON 结构内部您需要控制的精确变量名称(例如 seed, width, ckpt_name)。

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

示例:CheckpointLoaderSimple 节点 (ID 37)

"37": {
  "inputs": {
      "ckpt_name": "qwen_image_fp8_e4m3fn.safetensors"
  },
  "class_type": "CheckpointLoaderSimple",
  "_meta": {
    "title": "Load Checkpoint"
  }
},

示例:KSampler 节点 (ID 3)

"3": {
  "inputs": {
      "seed": 42,
      "steps": 20,
      "cfg": 8.0,
      "sampler_name": "euler",
      "scheduler": "normal",
      "denoise": 1.0
  },
  "class_type": "KSampler",
  "_meta": {
    "title": "KSampler"
  }
},

Screenshot of the ComfyUI interface with the KSampler node selected, highlighting the node ID and the &#39;seed&#39; and &#39;steps&#39; input fields.

按任务类型划分的默认键值

图像生成:

  • Prompt (提示词): text
  • Model (模型): ckpt_name
  • Width (宽度): width
  • Height (高度): height
  • Steps (步数): steps
  • Seed (种子): seed

图像编辑:

  • Image (图像): image
  • Prompt (提示词): prompt
  • Model (模型): unet_name
  • Width (宽度): width
  • Height (高度): height

示例:映射 KSampler 种子

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

键名 (Key)节点 ID (Node Ids)
seed3

处理多个节点 ID

如果多个节点需要相同的值(例如,种子应用到多个采样器),请提供以逗号分隔的 ID:

键名 (Key)节点 ID (Node Ids)
seed3, 15, 22

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

对于专业化节点,Key 可能不是简单的 text(文本)。

参数键名 (Key)节点 ID (Node Ids)备注
Prompttextprompt76取决于节点类型 (CLIPTextEncode 还是 TextEncodeQwen)
Modelckpt_name37用于 CheckpointLoaderSimple
Modelunet_name视工作流而定在某些工作流中用于 UNETLoader
Image Inputimage78该键将文件名传递给 LoadImage 节点

排除不匹配错误

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

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

通过细致地匹配节点 ID 和特定 Key,您可以确保 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 生成的工作流节点映射

参数键名 (Key)节点 ID (Node Ids)
Promptprompt(取决于您的工作流)
Modelckpt_name(checkpoint 加载器节点 ID)

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

Qwen 编辑的工作流节点映射

参数键名 (Key)节点 ID (Node Ids)
Imageimage(加载图像节点 ID)
Promptprompt(文本编码器节点 ID)
Modelunet_name(UNET 加载器节点 ID)

示例设置: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 配合工作,您必须将 ComfyBackendDirect 附加到 ComfyUI Base URL 后面。此外,您需要配置 SwarmUI 启用局域网(LAN)访问。完成上述调整后,设置 SwarmUI 与 Open WebUI 协同工作的步骤将与上文所述的 ComfyUI 图像生成步骤完全相同。 Install SwarmUI with LAN Access

SwarmUI API URL

您将输入的作为 ComfyUI Base URL 的地址将类似于:http://<your_swarmui_address>:7801/ComfyBackendDirect

This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.