跳到主要内容

ComfyUI

注意

本教程来自社区贡献,并非 Open WebUI 官方支持内容。它仅作为演示,说明如何按你的具体场景自定义 Open WebUI。欢迎贡献更多内容,可查看 contributing 教程。

ComfyUI 是一个强大且模块化的 Stable Diffusion 节点式图形界面,为用户提供了对图像生成流程的高度控制。了解更多信息或下载安装,请访问其 GitHub page

若要运行 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 启动(见上文)

  2. 检查防火墙: 如果宿主机启用了防火墙(如 UFW),请确认已放行 8188 端口(sudo ufw allow 8188/tcp

  3. Docker 运行命令(Linux 原生 Docker):
    对于未使用 Docker Desktop 的 Linux 用户,运行 Open WebUI 容器时需要显式映射 host gateway:

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

创建图像(Image Generation)

  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 字段旁的 refresh icon(🔄)验证连接;成功后应出现提示
    • 如果你的 ComfyUI 实例需要 API key,请在 ComfyUI API Key 字段中填写

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

  3. 上传你的 ComfyUI Workflow:

    • 首先,你需要从 ComfyUI 导出正确格式的 workflow。在 ComfyUI 界面左上角点击 ComfyUI logo,再点击 Settings,搜索并启用 "Dev Mode" 选项,其说明通常为 "Enable dev mode options (API save, etc.)"

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

    • 仍在 ComfyUI 中时,加载你想使用的图像生成 workflow,然后点击 ComfyUI logo,在 File 子菜单中选择 "Export (API)"。系统会提示你为文件命名,请使用一个方便识别的名称并下载

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

    • 返回 Open WebUI,在 ComfyUI Workflow 区域点击 Upload,然后选择刚刚下载的 JSON workflow 文件

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

  4. 映射 Workflow Nodes: 导入 workflow 后,你必须将 workflow 中的 node ID 映射到 Open WebUI 对应字段。每个参数都有两个输入框:

    • Key(左侧字段):workflow 中的输入参数名(例如 textckpt_nameseed
    • Node Ids(右侧字段):包含该输入的 node ID,多个 ID 用逗号分隔

    UI 中会显示 6 个可配置的图像生成参数:

    ParameterDefault KeyRequiredDescription
    Prompt*textYes正向提示词文本
    Modelckpt_nameNoCheckpoint 模型名
    WidthwidthNo输出图像宽度
    HeightheightNo输出图像高度
    StepsstepsNo采样步数
    SeedseedNo用于复现的随机种子

    注意: 必填参数带星号(*)。严格来说,只有 prompt 的 node ID 是必须填写的。

    你可以在 ComfyUI 中点击某个 node,并查看其详细信息来找到对应的 node ID。

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

    信息

    你可能需要在 Open WebUI 的 ComfyUI Workflow Nodes 区域中调整某个 Key,以匹配你的 workflow node。比如,默认的 seed key 可能要根据 workflow 结构改成 noise_seed

    提示

    某些 workflow(例如使用 Flux 模型的 workflow)可能需要在单个字段中填写多个 node ID。若某个 node 输入框需要多个 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. 配置图像编辑:

    • 编辑图像 部分,将 图像编辑引擎 设为 ComfyUI
    • 模型:选择用于编辑任务的模型
    • 图像尺寸:定义输出图像的分辨率
    • ComfyUI 基础 URLAPI 密钥:这两个字段与图像生成设置共用
    • ComfyUI Workflow:单独上传一个专为图像编辑设计的 workflow 文件,操作流程与图像生成相同
    • 映射 Workflow Nodes:图像编辑有 5 个可配置参数,其默认值与图像生成不同:
    ParameterDefault KeyRequiredDescription
    Image*imageYes待编辑的输入图像
    Prompt*promptYes编辑提示词文本
    Modelunet_nameNoDiffusion 模型名
    WidthwidthNo输出图像宽度
    HeightheightNo输出图像高度

    注意: 与图像生成不同,图像编辑不支持 negative prompt、steps、seed 或 batch size 参数。

    Open WebUI 图像设置页面中为图像编辑选择 ComfyUI 的截图

在对话中使用 ComfyUI 编辑图像的截图

深入了解:将 ComfyUI Nodes 映射到 Open WebUI

理解 node ID 映射,往往是将 ComfyUI 与 Open WebUI 这类外部服务集成时最容易卡住的一步。通过 API 集成 ComfyUI,本质上就是把 Open WebUI 的通用控制项(如 “Model”、“Width”、“Prompt”)映射到静态 ComfyUI workflow JSON 中的特定 node 输入。

将 Workflow Nodes 映射到 Open WebUI

Open WebUI 的 ComfyUI Workflow Nodes 区域允许你把通用控制项映射到静态 ComfyUI workflow JSON 中的特定 node 输入。每一行有两个字段:

FieldDescriptionExample
Key(左侧)node 的 inputs 块中的输入参数名textckpt_nameseed
Node Ids(右侧)目标 node ID,可为逗号分隔61, 2, 3

在 ComfyUI 中识别 Node ID 和 Input Key

在配置 Open WebUI 之前,你必须先用文本编辑器直接检查导出的 workflow JSON 文件。Node ID 是 ComfyUI 在 JSON 结构中标识某个 node 的唯一编号;JSON 对象的顶层 key 通常就是这些 node ID。

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

识别 Input Key(参数名)

Key 就是该 node JSON 结构里你要控制的确切字段名(例如 seedwidthckpt_name)。

  1. 查看 JSON:打开你的 API workflow JSON(如 workflow_api.json
  2. 找到 Node ID:定位到对应 node 的那一段(例如 "37"
  3. 识别 Key:在 "inputs" 块中找到你要控制的变量

示例:CheckpointLoaderSimple Node(ID 37)

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

示例:KSampler Node(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.

按任务类型区分的默认 Key 值

图像生成:

  • 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 的 Seed

假设你想控制 KSampler node 的 seed,它的 node ID 是 3。那么在 Open WebUI 设置中的 Seed 区域应填写:

KeyNode Ids
seed3

处理多个 Node ID

如果多个 node 需要使用相同值(例如多个 sampler 共享同一个 seed),请填写逗号分隔的多个 ID:

KeyNode Ids
seed3, 15, 22

处理复杂 / 多模态 Nodes(Qwen 示例)

对于某些特殊 node,Key 可能不只是简单文本字段。

ParameterKeyNode IdsNote
Prompttextprompt76取决于 node 类型(CLIPTextEncode 或 TextEncodeQwen)
Modelckpt_name37用于 CheckpointLoaderSimple
Modelunet_namevaries用于某些 workflow 中的 UNETLoader
Image Inputimage78该 key 会把文件名传递给 LoadImage node

排查不匹配错误

如果 ComfyUI 卡住或抛出校验错误,请结合日志和 JSON 结构排查:

Error TypeCause & DebuggingSolution
Value not in list: ckpt_name: 'xyz.safetensors'你映射了正确的 node ID(如 37),但传入值(如 xyz.safetensors)对该 node 类型来说不是合法模型名(例如把 VAE 模型错误传给了 checkpoint loader)修正 Open WebUI 中图像生成或编辑使用的模型名,确保它与 ComfyUI node 所期望的模型类型一致
Missing input <key>你的 workflow 需要某个输入(如 cfgsampler_name),但 Open WebUI 没有发送该值,因为该字段未映射要么在 workflow JSON 中硬编码默认值,要么把对应输入 key 映射到正确的 node ID

只要精确匹配 Node ID 与具体 Key,Open WebUI 就能在提交 prompt 给 ComfyUI 前,正确覆盖 workflow 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
提示词prompt(取决于你的 workflow)
模型ckpt_name(checkpoint loader node 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
图像image(load image node ID)
提示词prompt(text encoder node ID)
模型unet_name(UNET loader node 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 协同工作,你需要在 ComfyUI Base URL 末尾追加 ComfyBackendDirect。此外,还建议为 SwarmUI 启用局域网访问。完成这些调整后,SwarmUI 在 Open WebUI 中的设置方式,与前文所述的 ComfyUI 图像生成步骤基本一致。

启用局域网访问安装 SwarmUI。

SwarmUI API 地址

你在 ComfyUI 基础 URL 中填写的地址通常如下:

http://<your_swarmui_address>:7801/ComfyBackendDirect

本内容仅供参考,不构成任何保证、担保或合同承诺。Open WebUI 按“现状”提供。请参阅您的许可协议 以了解适用条款。