03-界面与节点基础¶
🎯 学习目标¶
- 熟悉 ComfyUI 的界面布局和各区域功能
- 理解节点的基本概念(输入/输出、数据类型、连线规则)
- 掌握核心节点类型(加载器、编码器、采样器、图像节点)
- 完成第一个 txt2img 工作流搭建
- 掌握节点操作的常用快捷键
3.1 界面布局详解¶
3.1.1 整体布局¶
ComfyUI 的界面以节点编辑器(Canvas)为核心,辅以控制面板和状态栏:
┌────────────────────────────────────────────────────────────────┐
│ 菜单栏 (Menu Bar) │
│ [Queue Prompt] [Queue Size] [Extra Options] [Manager] │
├────────────────────────────────────────────────────────────────┤
│ │
│ │
│ 节 点 编 辑 器 (Node Canvas) │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Load │────▶│ Encode │────▶│ Sample │ │
│ │ Ckpt │ │ Text │ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ │
├────────────────────────────────────────────────────────────────┤
│ 状态栏 / 进度条 │
└────────────────────────────────────────────────────────────────┘
3.1.2 核心区域¶
① 节点编辑器(Canvas)
- 主工作区域,用于放置和连接节点
- 支持无限画布,可以平移(中键拖动 / 空格+左键拖动)和缩放(滚轮)
- 背景网格辅助对齐
② 菜单栏 / 工具栏
- Queue Prompt:将当前工作流加入执行队列
- Queue Size:设置批量生成的数量
- Extra Options:额外选项(如自动队列)
- Manager:打开 ComfyUI Manager(需安装)
③ 右键上下文菜单
在画布空白处右键可以: - 添加新节点(按类别浏览或搜索) - 粘贴节点 - 添加分组(Group)
④ 队列与历史面板
- 查看排队中和已完成的生成任务
- 可以查看历史记录并重新加载
⑤ 设置面板
通过菜单进入 Settings,可以调整: - 预览方式(auto/taesd/latent2rgb) - 颜色主题 - 自动保存设置 - 日志级别
3.2 节点基本概念¶
3.2.1 什么是节点¶
节点(Node) 是 ComfyUI 中最基本的功能单元。每个节点执行一个特定的操作,例如加载模型、编码文本、执行采样等。节点通过连线(Link/Wire)传递数据。
3.2.2 节点结构¶
每个节点由以下部分组成:
┌──────────────────────────────┐
│ 节点标题 (Title) │
├──────────────────────────────┤
│ │
│ ● 输入接口 (Input Slot) │ ← 接收上游数据
│ ● 输入接口 │
│ │
│ [参数/属性区域] │ ← 节点内部可调参数
│ [下拉选择/数值输入] │
│ │
│ 输出接口 (Output) ● │ → 传递数据给下游
│ 输出接口 ● │
│ │
└──────────────────────────────┘
3.2.3 数据类型与颜色¶
ComfyUI 中不同数据类型用不同颜色表示:
| 颜色 | 数据类型 | 说明 |
|---|---|---|
| 🟣 紫色 | MODEL | Stable Diffusion 模型 |
| 🟡 黄色 | CLIP | CLIP 文本编码器 |
| 🔴 红色 | VAE | VAE 编码/解码器 |
| 🟠 橙色 | CONDITIONING | 条件编码(提示词编码结果) |
| 🔵 蓝色 | LATENT | 潜空间图像数据 |
| 🟢 绿色 | IMAGE | 像素图像数据 |
| ⚪ 白色 | MASK | 遮罩数据 |
| 灰色 | INT/FLOAT/STRING | 基础数据类型 |
3.2.4 连线规则¶
- 同色连接:只有相同类型的接口可以连接(紫色→紫色,蓝色→蓝色)
- 一对多:一个输出可以连接到多个输入(数据分发)
- 多对一限制:一个输入通常只能接收一条连线
- 数据流向:数据从左到右流动(输出 → 输入)
- 类型转换:某些节点可以在类型之间转换(如 VAEDecode 将 LATENT → IMAGE)
💡 提示:尝试连接不兼容的类型时,连线会自动断开,这是正常的类型检查机制。
3.3 核心节点类型介绍¶
3.3.1 加载器节点(Loaders)¶
加载器节点用于将模型文件加载到内存中。
CheckpointLoaderSimple(Checkpoint 加载器)
最常用的模型加载节点,加载 SD Checkpoint 模型:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 参数 | ckpt_name | 下拉选择 | 选择 checkpoints/ 目录中的模型 |
| 输出 | MODEL | MODEL (紫色) | SD 模型 |
| 输出 | CLIP | CLIP (黄色) | 文本编码器 |
| 输出 | VAE | VAE (红色) | 变分自编码器 |
LoRALoader(LoRA 加载器)
加载 LoRA 模型并与 Checkpoint 模型合并:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | model | MODEL | 基础模型 |
| 输入 | clip | CLIP | 文本编码器 |
| 参数 | lora_name | 下拉选择 | 选择 LoRA 文件 |
| 参数 | strength_model | FLOAT | 模型权重强度 (0~2) |
| 参数 | strength_clip | FLOAT | CLIP 权重强度 (0~2) |
| 输出 | MODEL | MODEL | 融合后的模型 |
| 输出 | CLIP | CLIP | 融合后的编码器 |
VAELoader(VAE 加载器)
单独加载 VAE 模型(当 Checkpoint 自带 VAE 不理想时使用):
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 参数 | vae_name | 下拉选择 | 选择 VAE 文件 |
| 输出 | VAE | VAE | VAE 模型 |
3.3.2 编码器节点(Encoding)¶
CLIPTextEncode(CLIP 文本编码器)
将文本提示词编码为条件向量:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | clip | CLIP | CLIP 模型 |
| 参数 | text | STRING (多行) | 提示词文本 |
| 输出 | CONDITIONING | CONDITIONING | 编码后的条件 |
💡 提示:通常需要两个 CLIPTextEncode 节点——一个用于正向提示词(positive),一个用于反向提示词(negative)。
VAEEncode(VAE 编码器)
将像素图像编码到潜空间(用于 img2img):
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | pixels | IMAGE | 输入图像 |
| 输入 | vae | VAE | VAE 模型 |
| 输出 | LATENT | LATENT | 潜空间表示 |
VAEDecode(VAE 解码器)
将潜空间数据解码回像素图像:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | samples | LATENT | 潜空间数据 |
| 输入 | vae | VAE | VAE 模型 |
| 输出 | IMAGE | IMAGE | 输出图像 |
3.3.3 采样器节点(Samplers)¶
KSampler(采样器)
核心采样节点,执行扩散去噪过程:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | model | MODEL | SD 模型 |
| 输入 | positive | CONDITIONING | 正向条件 |
| 输入 | negative | CONDITIONING | 反向条件 |
| 输入 | latent_image | LATENT | 初始潜空间图像 |
| 参数 | seed | INT | 随机种子 |
| 参数 | steps | INT | 采样步数 (1-100) |
| 参数 | cfg | FLOAT | CFG 引导系数 (1-30) |
| 参数 | sampler_name | 下拉 | 采样算法 |
| 参数 | scheduler | 下拉 | 调度器类型 |
| 参数 | denoise | FLOAT | 去噪强度 (0-1) |
| 输出 | LATENT | LATENT | 采样结果 |
KSamplerAdvanced(高级采样器)
提供更多控制参数,支持分步采样:
- 指定起始步和结束步(用于分阶段生成)
- noise 添加控制
- 更精细的调度控制
EmptyLatentImage(空潜空间图像)
创建一个初始的空白潜空间图像(用于 txt2img):
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 参数 | width | INT | 图像宽度(像素) |
| 参数 | height | INT | 图像高度(像素) |
| 参数 | batch_size | INT | 批量大小 |
| 输出 | LATENT | LATENT | 空白潜空间图像 |
⚠️ 注意:宽高需要是 8 的倍数。SD1.5 推荐 512×512,SDXL 推荐 1024×1024。
3.3.4 图像节点(Image)¶
LoadImage(加载图像)
从文件加载图像到工作流:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 参数 | image | 文件选择 | 选择 input/ 目录中的图像 |
| 输出 | IMAGE | IMAGE | 图像数据 |
| 输出 | MASK | MASK | Alpha 通道遮罩 |
SaveImage(保存图像)
将生成的图像保存到磁盘:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | images | IMAGE | 输入图像 |
| 参数 | filename_prefix | STRING | 文件名前缀 |
PreviewImage(预览图像)
在界面中预览图像(不保存到磁盘):
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | images | IMAGE | 输入图像 |
3.3.5 条件节点(Conditioning)¶
ConditioningCombine(条件合并)
合并两个条件编码为一个:
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | conditioning_1 | CONDITIONING | 条件一 |
| 输入 | conditioning_2 | CONDITIONING | 条件二 |
| 输出 | CONDITIONING | CONDITIONING | 合并后的条件 |
ConditioningSetArea(条件区域设置)
为条件指定作用区域(用于区域控制生成):
| 输入/输出 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 输入 | conditioning | CONDITIONING | 输入条件 |
| 参数 | width, height | INT | 区域尺寸 |
| 参数 | x, y | INT | 区域位置 |
| 参数 | strength | FLOAT | 作用强度 |
| 输出 | CONDITIONING | CONDITIONING | 带区域的条件 |
3.4 第一个工作流:文本到图像(txt2img)¶
3.4.1 工作流结构¶
一个最基础的 txt2img 工作流包含以下节点:
┌─────────────────┐
│ CheckpointLoader │
│ Simple │
│ ─────────────── │
│ [选择SD模型] │
│ │
│ MODEL ●─────────┼───────────────────────────────────────┐
│ CLIP ●─────┐ │ │
│ VAE ●──┐ │ │ │
└────────────┼──┼───┘ │
│ │ │
│ │ ┌───────────────┐ │
│ └──▶ CLIPTextEncode │ (正向提示词) │
│ │ ──────────── │ │
│ │ "a beautiful │ │
│ │ landscape" │ │
│ │ CONDITIONING ●┼──────┐ │
│ └───────────────┘ │ │
│ │ │
│ ┌───────────────┐ │ │
└──┬──▶ CLIPTextEncode │ │ (反向提示词) │
│ │ ──────────── │ │ │
│ │ "ugly, bad" │ │ │
│ │ CONDITIONING ●┼───┐ │ │
│ └───────────────┘ │ │ │
│ │ │ │
│ ┌───────────────┐ │ │ ┌────────────┐│
│ │EmptyLatentImage│ │ │ │ KSampler ││
│ │ ──────────── │ │ │ │ ────────── ││
│ │ 512 x 512 │ │ └──▶ positive ││
│ │ │ └─────▶ negative ││
│ │ LATENT ●┼─────────▶ latent ││
│ └───────────────┘ ▶ model ◀─┘│
│ │ ────────── │
│ │ steps: 20 │
│ │ cfg: 7.0 │
│ │ LATENT ● │
│ └──────┼─────┘
│ │
│ ┌───────────────┐ │
│ │ VAEDecode │ │
│ │ ──────────── │ │
└──▶ vae │◀───────────────┘
│ samples │
│ IMAGE ●┼──┐
└───────────────┘ │
│
┌───────────────┐ │
│ SaveImage │◀─┘
│ ──────────── │
│ ComfyUI │
└───────────────┘
3.4.2 搭建步骤¶
步骤 1:添加 CheckpointLoaderSimple 节点
- 在画布空白处右键 → Add Node → loaders → CheckpointLoaderSimple
- 在节点的
ckpt_name下拉框中选择你安装的模型
步骤 2:添加两个 CLIPTextEncode 节点
- 右键 → Add Node → conditioning → CLIPTextEncode
- 重复添加一个(一个正向、一个反向)
- 将 CheckpointLoader 的 CLIP 输出连接到两个 CLIPTextEncode 的 clip 输入
- 在正向节点中输入:
a beautiful mountain landscape, professional photography, 8k, highly detailed - 在反向节点中输入:
ugly, blurry, low quality, distorted
步骤 3:添加 EmptyLatentImage 节点
- 右键 → Add Node → latent → EmptyLatentImage
- 设置 width=512, height=512, batch_size=1
步骤 4:添加 KSampler 节点
- 右键 → Add Node → sampling → KSampler
- 连接:
- CheckpointLoader 的 MODEL → KSampler 的 model
- 正向 CLIPTextEncode 的 CONDITIONING → KSampler 的 positive
- 反向 CLIPTextEncode 的 CONDITIONING → KSampler 的 negative
- EmptyLatentImage 的 LATENT → KSampler 的 latent_image
- 参数设置:steps=20, cfg=7.0, sampler_name=euler, scheduler=normal, denoise=1.0
步骤 5:添加 VAEDecode 节点
- 右键 → Add Node → latent → VAEDecode
- 连接 KSampler 的 LATENT 输出 → VAEDecode 的 samples 输入
- 连接 CheckpointLoader 的 VAE → VAEDecode 的 vae 输入
步骤 6:添加 SaveImage 节点
- 右键 → Add Node → image → SaveImage
- 连接 VAEDecode 的 IMAGE → SaveImage 的 images 输入
步骤 7:执行工作流
点击菜单栏的 Queue Prompt 按钮,等待生成完成。
💡 提示:你也可以直接在 ComfyUI 中加载默认工作流。按
Ctrl+D可以加载默认的 txt2img 工作流模板。
3.5 节点操作技巧¶
3.5.1 快捷键列表¶
| 快捷键 | 功能 |
|---|---|
Ctrl + Enter | 执行当前工作流(Queue Prompt) |
Ctrl + D | 加载默认工作流 |
Ctrl + S | 保存工作流 |
Ctrl + O | 打开/导入工作流 |
Ctrl + A | 全选所有节点 |
Ctrl + C | 复制选中节点 |
Ctrl + V | 粘贴节点 |
Ctrl + Z | 撤销 |
Ctrl + Y | 重做 |
Delete / Backspace | 删除选中的节点或连线 |
Ctrl + M | 静音/取消静音节点(Mute) |
Ctrl + B | 绕过节点(Bypass) |
双击空白处 | 打开节点搜索框 |
空格 + 左键拖动 | 平移画布 |
滚轮 | 缩放画布 |
Ctrl + G | 创建分组(Group) |
3.5.2 节点操作¶
复制节点:选中节点后 Ctrl+C / Ctrl+V,或 Ctrl+拖动节点
节点静音(Mute):右键节点 → Mute 或 Ctrl+M。被静音的节点不执行但保留连线,数据会直接通过。
节点绕过(Bypass):右键节点 → Bypass 或 Ctrl+B。类似静音但会绕过该节点的处理。
节点分组(Group):选中多个节点后 Ctrl+G,创建一个可视化分组,便于组织工作流。
节点颜色:右键节点 → Colors,为节点设置不同颜色以便区分。
节点搜索:双击画布空白处打开搜索框,输入节点名称快速定位和添加。
3.5.3 连线技巧¶
- 拖拽连接:从输出端口拖向输入端口
- 断开连线:点击输入端口的连线并拖到空白处
- 重新路由:拖拽连线到另一个兼容端口
- Reroute 节点:右键连线 → Add Reroute,可以添加转折点让连线更整洁
3.5.4 工作流组织技巧¶
- 从左到右排列节点,保持数据流方向一致
- 使用分组(Group)将功能相关的节点归类
- 为关键节点设置颜色标记
- 使用 Note 节点添加注释说明
- 保持连线尽量不交叉
⚠️ 注意:复杂工作流中,建议养成定期保存的习惯(Ctrl+S)。ComfyUI 不会自动保存工作流,关闭浏览器可能丢失未保存的修改。
练习¶
- 搭建一个完整的 txt2img 工作流并成功生成一张图像
- 尝试修改提示词和参数(CFG、Steps、采样器),观察对结果的影响
- 练习使用至少 5 个快捷键
- 在工作流中使用分组和颜色标记来组织节点
- 将工作流保存为 JSON 文件,然后清空画布重新导入
延伸阅读¶
📌 下一章:04-工作流设计 —— 学习工作流设计原则与高级参数调节
最后更新日期:2026-02-12 适用版本:ComfyUI实战教程 v2026