> 技术文档 > 【深度学习】ComfyUI(基于节点/流程图的 Stable Diffusion WebUI)_webui 8188

【深度学习】ComfyUI(基于节点/流程图的 Stable Diffusion WebUI)_webui 8188

ComfyUI 是一个基于节点/流程图的 Stable Diffusion WebUI,它提供了更灵活、更强大的工作流构建能力,尤其适合高级用户、自动化任务和复杂图像生成流程。与 AUTOMATIC1111 的 WebUI 相比,它更底层、更模块化,学习曲线稍陡峭,但控制力更强且资源效率更高。

运行示例:
在这里插入图片描述

一、 安装 ComfyUI

前提条件

  1. Python (3.10 或 3.11 推荐): 确保已安装。可通过 python --versionpython3 --version 在终端/命令提示符检查。
  2. Git: 用于克隆仓库。
  3. NVIDIA GPU (推荐): 虽然 CPU 也能运行,但速度极慢。需要安装匹配的 NVIDIA 显卡驱动
  4. Stable Diffusion 模型文件 (.ckpt 或 .safetensors): 如 v1-5-pruned-emaonly.safetensors, sd_xl_base_1.0.safetensors 等。将其准备好放在一个你知道的位置(稍后需要复制到 ComfyUI 目录)。

安装方法 (Windows / Linux 类似)

方法 1: 使用独立安装包 (Windows 最简单)
  1. 访问 ComfyUI GitHub Releases 页面: https://github.com/comfyanonymous/ComfyUI/releases
  2. 找到最新的 ComfyUI_windows_portable_nvidia_cu121_or_cpu.7z 或类似名称的包 (注意 CUDA 版本,cu121 对应 CUDA 12.1,这是目前主流。如果你的显卡较老驱动不支持 CUDA 12.x,可能需要找旧版本或使用方法 2)。
  3. 下载该压缩包。
  4. 使用 7-Zip 解压到一个没有中文和特殊字符的路径 (例如 D:\\ComfyUI)。
  5. 放置模型文件
    • 将你的 Stable Diffusion 基础模型 (如 sd_xl_base_1.0.safetensors) 复制到 ComfyUI\\models\\checkpoints 目录下。
    • 可选:如果需要使用 VAE,将 VAE 文件 (如 sdxl_vae.safetensors) 复制到 ComfyUI\\models\\vae 目录下。
    • 可选:下载并放置 LoRA 模型到 ComfyUI\\models\\loras,嵌入/Textual Inversion 到 ComfyUI\\models\\embeddings,ControlNet 模型到 ComfyUI\\models\\controlnet
  6. 运行:
    • 双击 run_nvidia_gpu.bat (如果你有 NVIDIA GPU)。
    • 如果没有 NVIDIA GPU 或想使用 CPU,双击 run_cpu.bat (非常慢,不推荐)。
方法 2: 通过 Git Clone (适合开发者或需要最新功能)
  1. 打开终端 (Windows 用命令提示符或 PowerShell, Linux/macOS 用终端)。
  2. 导航到你想要安装 ComfyUI 的目录。
  3. 克隆仓库:
    git clone https://github.com/comfyanonymous/ComfyUI
  4. 进入克隆的目录:
    cd ComfyUI
  5. (强烈推荐) 创建并激活 Python 虚拟环境 (避免依赖冲突):
    python -m venv venv # Windows# 或python3 -m venv venv # Linux/macOSvenv\\Scripts\\activate # Windows# 或source venv/bin/activate # Linux/macOS
  6. 安装依赖:
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # 根据你的 CUDA 版本选择,cu121 是 CUDA 12.1pip install -r requirements.txt
  7. 放置模型文件: 同方法 1 第 5 步,将模型文件复制到 ComfyUI/models/ 下对应的子目录 (checkpoints, vae, loras, controlnet, embeddings)。
  8. 启动 ComfyUI:
    python main.py
    • 可选参数
      • --listen: 允许局域网内其他设备访问 (默认只监听 127.0.0.1)。
      • --port 8188: 指定端口 (默认是 8188)。
      • 例如:python main.py --listen --port 9000

成功启动后

  • 如果一切顺利,终端会显示类似 * Running on http://127.0.0.1:8188/ 的信息。
  • 打开你的 Web 浏览器,访问 http://127.0.0.1:8188 (或你指定的地址和端口)。

二、 使用 ComfyUI (基础入门)

ComfyUI 的核心概念是节点工作流。每个节点执行一个特定功能 (如加载模型、输入提示、采样、保存图像),节点之间通过连接线传递数据 (如潜在空间图像、条件信息)。

1. 界面概览

  • 画布 (Canvas): 主要区域,用于放置和连接节点。
  • 节点菜单: 右键单击画布空白处弹出,包含所有可用节点类别 (Loaders, Conditioning, Latent, Image, etc.)。
  • 节点属性: 点击一个节点,其参数会显示在右侧或下方。
  • 队列提示 (Queue Prompt): 点击此按钮执行当前工作流。
  • 工作流管理: 可以保存 (Save)、加载 (Load)、清除 (Clear) 整个工作流。
  • 历史记录 (View Queue History / Images): 查看之前生成的图片和工作流。
  • 管理器 (Manager): 管理模型、节点等。

2. 构建一个基础的文生图 (txt2img) 工作流(也可以从模板创建(工作流>模板))

  1. 加载检查点模型
    • 右键画布 -> Loaders -> CheckpointLoaderSimple
    • 在节点属性中选择你放置在 models/checkpoints 下的模型文件。
  2. 输入提示 (Prompt)
    • 右键画布 -> Conditioning -> CLIPTextEncode
    • 你需要创建两个 CLIPTextEncode 节点:
      • 一个用于正面提示词 (Positive)。在 text 输入框中输入你的描述。
      • 一个用于负面提示词 (Negative)。在 text 输入框中输入你不想要的内容。
    • 将这两个节点的 CLIP 输出连接到 CheckpointLoaderSimple 节点的 CLIP 输出。
  3. 设置采样器 (Sampler)
    • 右键画布 -> Sampling -> KSamplerKSamplerAdvanced (推荐 KSampler)。
    • 配置采样器参数:
      • Model: 连接到 CheckpointLoaderSimpleMODEL 输出。
      • Positive: 连接到正面 CLIPTextEncode 节点的 CONDITIONING 输出。
      • Negative: 连接到负面 CLIPTextEncode 节点的 CONDITIONING 输出。
      • Latent Image暂时不连 (下一步创建)。
      • Sampler / Scheduler: 选择你喜欢的采样器和调度器 (如 dpmpp_2m / karras)。
      • Steps: 采样步数 (如 20-30)。
      • CFG Scale: 提示词相关性 (如 7-8)。
      • Seed: 随机种子 (0 表示随机)。
  4. 创建初始潜在空间图像 (Latent Image)
    • 右键画布 -> Latent -> Empty Latent Image
    • 设置你想要的图像 WidthHeight (如 1024x1024 for SDXL)。
    • 将其 LATENT 输出连接到 KSampler 节点的 Latent Image 输入。
  5. 解码潜在图像为像素图像 (VAE Decode)
    • 右键画布 -> Latent -> VAEDecode
    • KSampler 节点的 LATENT 输出连接到 VAEDecodelatent_image 输入。
    • CheckpointLoaderSimple 节点的 VAE 输出连接到 VAEDecodevae 输入。
  6. 保存或预览图像 (Save Image / Preview Image)
    • 保存: 右键画布 -> Image -> Save Image。将 VAEDecode 节点的 IMAGE 输出连接到 Save Image 节点的 images 输入。可以设置保存文件名前缀 (filename_prefix)。
    • 预览: 右键画布 -> Image -> Preview Image。将 VAEDecode 节点的 IMAGE 输出连接到 Preview Image 节点的 images 输入。这会在界面上显示生成的图片,但不保存到硬盘。
  7. 执行工作流
    • 检查所有连接是否正确。
    • 点击 Queue Prompt 按钮。

3. 关键操作

  • 添加节点: 右键画布空白处 -> 选择节点类别 -> 选择具体节点。
  • 连接节点: 点击一个节点的输出“点”(小圆圈),拖拽到另一个节点的输入“点”。
  • 断开连接: 点击已连接的线,然后按 Delete 键,或直接将线拖离输入/输出点。
  • 移动节点: 点击并拖动节点。
  • 复制/粘贴节点Ctrl+C / Ctrl+V (Windows/Linux), Cmd+C / Cmd+V (Mac)。也可以框选多个节点一起复制。
  • 删除节点: 选中节点,按 Delete 键。
  • 加载示例工作流: 官方仓库 (ComfyUI/examples) 或网上社区分享了很多 .json.png 工作流文件。通常通过 Load 按钮加载 .json,或者直接将 .png 图片拖入 ComfyUI 画布(如果图片内嵌了工作流信息)。
  • 安装自定义节点: ComfyUI 有丰富的社区扩展。通常通过 ComfyUI Manager(一个流行的管理插件)安装,或者手动将节点代码放到 ComfyUI/custom_nodes/ 目录下,然后重启 ComfyUI。

三、 进阶与技巧

  1. 图生图 (img2img)
    • 使用 LoadImage 节点加载图片。
    • 使用 VAEEncode 节点将像素图片编码为潜在空间表示(连接到 KSamplerLatent Image 输入)。
    • KSampler 中设置较低的 denoise 值 (如 0.4-0.8) 来控制原图保留程度。
  2. 使用 LoRA
    • 添加 LoraLoader 节点。
    • 连接到 CheckpointLoaderSimpleMODELCLIP 输出。
    • 选择你的 LoRA 文件 (放在 models/loras) 并设置强度 (strength_model, strength_clip)。
    • LoraLoader 输出的 MODELCLIP 连接到后续节点 (如 CLIPTextEncodeKSampler)。
  3. 使用 ControlNet
    • 使用 ControlNetLoader 加载 ControlNet 模型 (放在 models/controlnet)。
    • 使用预处理节点 (如 Preprocessor for Canny, Preprocessor for Depth) 或 LoadImage 获取控制图。
    • 使用 ApplyControlNet 节点,将控制条件应用到 KSamplerPositiveNegative 条件输入上。
  4. 高清修复 (Hires Fix / Upscale)
    • 有多种方法:
      • 采样后放大: 在 VAEDecode 后接 Upscale Model (如 ESRGAN) 或 ImageScale (简单放大)。
      • 潜在空间放大: 使用 LatentUpscale 节点在采样后、第二次采样前放大潜在图像,然后接第二个 KSampler (通常降低步数和去噪强度)。这是更接近 AUTOMATIC1111 的 Hires.fix 的方法。
      • 专用高清修复节点: 一些自定义节点 (如 UltimateSDUpscale) 提供更复杂的高清修复流程。
  5. 批处理: 在 Empty Latent Image 节点设置 Batch Size > 1,或者在提示词中使用逗号分隔的列表配合特定节点。
  6. 使用 ComfyUI Manager强烈推荐安装!它极大简化了自定义节点、模型的管理和更新。安装方法通常在 Manager 的 GitHub 页面说明。

四、 常见问题

  1. 启动报错 (ModuleNotFoundError): 缺少 Python 依赖。激活虚拟环境后,在 ComfyUI 目录下运行 pip install -r requirements.txt
  2. 启动报错 (CUDA out of memory): 显存不足。
    • 尝试减小 Width x Height
    • 尝试减小 Batch Size
    • KSampler 中勾选 Add noise (对于某些 img2img 工作流可能不需要)。
    • 使用 --lowvram--medvram 启动参数 (在 main.py 命令后添加,如 python main.py --medvram)。
    • 关闭其他占用显存的程序。
    • 考虑升级显卡硬件。
  3. 模型加载失败/找不到: 确认模型文件 (.ckpt 或 .safetensors) 已正确放置在 models/checkpoints 目录下,并且在 CheckpointLoaderSimple 节点中选择了正确的文件名。
  4. 生成的图像全黑/全灰/乱码
    • 检查工作流连接是否正确,特别是 MODEL, CLIP, VAE, CONDITIONING, LATENT 这些关键连接线。
    • 确认使用了匹配的模型和 VAE (尤其是 SDXL 模型需要 SDXL VAE)。
    • 尝试不同的 Sampler / Scheduler 组合。
    • 检查提示词是否有效。
    • 尝试不同的 Seed
  5. 如何更新 ComfyUI
    • 安装包用户: 重新下载最新安装包,解压覆盖(注意备份你的 models 文件夹和自定义工作流)。
    • Git Clone 用户: 在 ComfyUI 目录下执行:
      git pullpip install -r requirements.txt --upgrade
  6. 界面卡顿/反应慢: 复杂工作流可能导致浏览器负担重。尝试关闭不用的浏览器标签页或使用更轻量的浏览器。

五、 学习资源

  • 官方 GitHub 仓库 & Wiki: https://github.com/comfyanonymous/ComfyUI (必看!有基础示例和讨论)
  • ComfyUI Reddit: https://www.reddit.com/r/comfyui/ (社区交流,分享工作流)
  • Civitai: https://civitai.com/ (搜索 “ComfyUI”,有很多分享的工作流 .json.png 文件以及配套模型)。
  • ComfyUI Workflow Examples: https://comfyanonymous.github.io/ComfyUI_examples/ (官方基础示例)