从零跑通一个「文生图」工作流:6 个核心节点逐步拆解
上一篇(ComfyUI 系列第 2 篇)我们把 SDXL 环境在 ComfyUI Desktop 上彻底搭好:模型就位、显存确认、首次启动成功。但环境只是舞台,真正的主角是「工作流」。这一篇,我们把 ComfyUI 默认的文生图工作流逐节点、逐参数拆开讲透,让你不只是「点一下 Queue 蹦出一张图」,而是明白每个节点在数据流中的位置、每个参数背后的原理。读懂这一篇,你就掌握了 ComfyUI 的思维模型,后面学图生图、局部重绘、放大,都只是在这张图上加节点。
实测环境:Mac mini M4(32G 统一内存)+ ComfyUI Desktop + SDXL 基础模型,以下所有参数均在此环境下验证。
一、先建立核心概念:工作流是一张数据流图
ComfyUI 的本质是一张有向无环图(DAG)。每个节点(Node)封装一个独立功能——加载模型、编码文字、采样、解码;每个节点有输入端口和输出端口;节点之间用**连线(Wire)**连接,连线就是数据流动的管道。你按下 Queue Prompt 后,ComfyUI 从终点节点(Save Image)反向追溯依赖,确定执行顺序,依次运行每个节点,把上游输出作为下游输入,最终产出图像。
理解了「数据从左往右流」,看懂任何工作流都不难:左侧是原料(模型、文字、空白画布),中间是加工(采样),右侧是成品(解码、保存)。
打开方式:ComfyUI Desktop 启动后,默认会加载内置的文生图工作流(Workflow 模板里的 "Text to Image")。若是空白画布,点菜单 Sidebar → Templates,选择文生图模板即可。此时画布上应该正好出现我们接下来要拆解的六个节点。
二、六个核心节点逐个拆解
1. Load Checkpoint:一切从模型开始
这个节点负责把 SDXL 的 checkpoint 文件(.safetensors,通常 6.5GB 左右)从硬盘加载进内存。它有三个输出端口,对应 Stable Diffusion 架构的三个组件:
- MODEL:U-Net 扩散模型本体,负责在潜空间里一步步去噪生成图像,连接到 KSampler 的 model 端口。
- CLIP:文本编码器,把你的提示词翻译成模型能理解的向量,连接到 CLIP Text Encode 节点。
- VAE:变分自编码器,负责图像与潜空间之间的双向转换,连接到 VAE Decode。
一个 checkpoint 内部打包了这三样东西,所以一个模型节点就能喂饱整条工作流。参数只有 ckpt_name 一个,选择你的 SDXL 模型文件(如 sd_xl_base_1.0.safetensors)。注意:若列表为空,说明模型没放进 models/checkpoints 目录,或放错了子目录。
2. CLIP Text Encode(正向与负向两个实例):告诉模型你要什么
工作流里有两个一模一样的节点,一个接正向提示词(positive),一个接负向提示词(negative)。它们做的事相同:把文本经 CLIP 编码成条件向量,交给采样器——正向是「我要什么」,负向是「我不要什么」。
SDXL 与 SD1.5 的一个重要区别:SDXL 训练时使用了大量自然语言描述(类似 LAION 的图文对),因此短标签堆砌(1girl, masterpiece, ultra detailed)不再是唯一解,写成完整的自然语句往往效果更好。要点:
- 描述主体、环境、光线、风格、镜头,一个维度一句话即可,不必堆砌几十个词。
- SDXL 对词序敏感,越靠前的内容权重越高,把最重要的主体放最前面。
- 负向提示词 SDXL 需求比 SD1.5 低,通常写画质通病即可,不必塞一大串。
示例(正向):a young woman in a light summer dress standing on a sunny beach, gentle ocean waves in the background, golden hour lighting, soft bokeh, shot on 85mm lens, photorealistic。
示例(负向):blurry, lowres, bad anatomy, extra fingers, watermark, text。
3. Empty Latent Image:生成前先铺一张「空画布」
扩散模型不是直接画图,而是在潜空间(Latent Space)里从一团随机噪声开始逐步去噪。这个节点生成那团初始噪声,参数三个:
- width / height:SDXL 原生训练分辨率为 1024×1024,就设 1024。这不是随意数字——SDXL 在约 100 万像素总量(如 1024×1024、896×1152)下表现最佳;设成 SD1.5 时代的 512×512,反而会出现构图怪异、重复肢体等问题。
- batch_size:一次生成几张,设 1。32G 内存的 M4 跑 batch 2-4 也没问题,抽卡时可调大。
4. KSampler:整个工作流的心脏
采样器接收模型、正负向条件、初始噪声,执行去噪循环。参数最多,逐个说:
- seed(种子):随机数种子,决定初始噪声的形态。同 seed + 同参数 + 同提示词 = 完全相同的图,这是复现实验的关键。想抽卡就点旁边的 dice 图标改成 randomize。新手建议先固定 seed,改提示词看效果,否则每次变量太多,无法判断是哪个改动起了作用。
- steps(步数):去噪迭代次数。SDXL 用 25-35 步即可收敛,30 是稳妥默认值。步数太少(<15)细节潦草;超过 40 收益极小,纯浪费 M4 的时间。
- cfg(CFG Scale,引导强度):控制生成结果对提示词的「服从程度」。SDXL 推荐 6-8,取 7 最常用。设太低(<4),模型自由发挥,画面可能和提示词貌合神离;设太高(>10),画面会过饱和、僵硬,人物皮肤像塑料,还容易出噪点。
- sampler_name / scheduler:去噪算法与步长调度策略。社区结论是 dpmpp_2m + karras 为 SDXL 的甜点组合:dpmpp_2m 每步质量高、步数需求低;karras 调度在接近收尾时自动缩小步长,让细节过渡更平滑。用默认的 euler + normal 也能出图,但同参数下细节和肤质通常略逊一筹。
- denoise(降噪强度):从噪声中「重建」的比例。文生图必须设 1.0——整张图都从纯噪声画起。这个参数在图生图(下篇主角)才是主角:0.5 左右表示保留原图一半结构再重绘。
5. VAE Decode:从潜空间到肉眼可见
KSampler 输出的仍是一组 128×128 的潜空间张量(四通道的压缩数学表示),人眼看不了,也没法存成 PNG。VAE Decode 用 VAE 的解码器把潜数据还原回 1024×1024 的 RGB 图像。这就是为什么 Load Checkpoint 的 VAE 输出要单独拉一根线到这个节点。没有它,工作流跑不通「保存」这一步。
6. Save Image:落盘
接收解码后的图像并写入硬盘。filename_prefix 是文件名前缀,默认 ComfyUI,生成的文件形如 ComfyUI_00001_.png,序号自动递增。保存目录在 ComfyUI Desktop 的 output 文件夹内,建议按主题改前缀(如 sdxl_beach)方便日后翻找。值得强调:PNG 里内嵌了完整的工作流与参数元数据,把图拖回 ComfyUI 画布即可还原整张工作流——这是排查「这张图当时怎么生成的」的利器。
三、连线实战:按数据流顺序接六根线
默认模板已连好,但请务必亲手从空白重建一次。推荐按数据流顺序连线:
- Load Checkpoint 的 MODEL → KSampler 的 model
- Load Checkpoint 的 CLIP → 正向 CLIP Text Encode 的 clip;同一 CLIP 再拉一根 → 负向 CLIP Text Encode 的 clip(一个输出可以连多个下游)
- 正向 CLIP Text Encode 的 CONDITIONING → KSampler 的 positive;负向的 → negative
- Empty Latent Image 的 LATENT → KSampler 的 latent_image
- KSampler 的 LATENT → VAE Decode 的 samples
- Load Checkpoint 的 VAE → VAE Decode 的 vae;VAE Decode 的 IMAGE → Save Image 的 images
新手最常见的三类连线错误:一是把 CLIP 输出直接连到 KSampler——端口类型不匹配,ComfyUI 会拒绝或转接,出图常常完全不像提示词;二是把 VAE Decode 的 IMAGE 又接回 KSampler——数据流倒灌,逻辑混乱;三是漏掉 Load Checkpoint 到 VAE Decode 的 VAE 线,导致解码失败或报错。连完之后检查一遍:所有节点的输入端口是否都有对应的线,有没有悬空的端口(灰点或红框)。
四、参数与提示词实战:一个完整的例子
我们用一个「夏日海边女孩」的完整例子把上面所有参数串起来。正向提示词用自然语言描述:
a young woman in a light summer dress standing on a sunny beach, gentle ocean waves in the background, golden hour lighting, soft bokeh, shot on 85mm lens, photorealistic
负向提示词:
blurry, lowres, bad anatomy, extra fingers, watermark, text
参数设置:seed 固定(比如 12345)、steps 30、cfg 7、sampler dpmpp_2m、scheduler karras、denoise 1.0、尺寸 1024×1024、batch 1。点 Queue 生成。
这里的关键是学会「单变量实验」:只改一个参数,观察效果。比如:
- 把 cfg 从 7 提到 12,画面会明显更「死板」、过饱和,人物皮肤发硬——你就直观理解了 cfg 过高的后果。
- 把 steps 从 30 降到 10,细节会粗糙、光影生硬,但构图主体仍在——看到步数太少的下限。
- 把正向提示词里的 golden hour lighting 删掉换成 overcast sky,整体色调立刻改变——体会到词序和主体词对画面的支配力。
一次只动一个变量,你才能真正建立「哪个参数控制什么」的手感,而不是盲目乱调。
五、保存与复用工作流
工作流本身就是可保存、可复用的资产,这是 ComfyUI 相对其它工具最实用的地方之一。
保存:菜单 Workflow → Save,会存成一个 .json 文件,包含画布上所有节点的位置、参数和连线关系。
导出/分享:Workflow → Export,导出 json 给别人;别人用 Import 导入即可还原。很多社区分享的「工作流文件」就是这么来的。
为什么重要:一套调好的参数组合,改一个提示词就能批量产出不同内容。这也是后续做批量出图、固定风格交付的基础——把工作流存好,等于把你验证过的方法固化下来,随时复用。
六、避坑指南
节点红框 / 报错:某个节点变红框通常是该节点的代码或配置出错。悬停看错误信息,最常见的两类:一是端口类型不匹配(如把 IMAGE 连到 MODEL 口),删掉重连;二是缺依赖节点或模型文件路径错误。
生成全黑图:多半是 VAE 没接对,或 VAE 缺失。检查 Load Checkpoint 的 VAE 是否正确连到 VAE Decode;若用的模型版本裁掉了 VAE,需要单独加载 sdxl_vae.safetensors。
画面与提示词完全不符:先检查 CLIP 那根线是不是接到了正确的正向/负向节点,再确认 conditioning 端口连对了;其次看是否误用了 SD1.5 的提示词写法(标签堆砌)导致 SDXL 理解偏差。
尺寸异常 / 重复肢体:Empty Latent 尺寸设回 512 会出现 SD1.5 时代的畸形;设到 1536 以上则可能重复人物。SDXL 就坚持 1024 附近(或 896×1152 等总量接近 100 万像素的尺寸)。
内存不足被 killed:生成前关掉大应用,batch 保持 1,必要时开低显存模式(--lowvram)。
相关资源
- ComfyUI 官方:https://github.com/comfyanonymous/ComfyUI
- 官方文档:https://docs.comfy.org
- SDXL 官方模型:HuggingFace 搜
stabilityai/stable-diffusion-xl-base-1.0 - ComfyUI 模板工作流:Desktop 版内置 Templates 目录
下一篇进入进阶:图生图 / 局部重绘(Inpaint)/ 放大(Upscale)——这是修图接单的核心技能组合。会用这几招,你就能把一张普通照片修成客户想要的样子,也是从「能出图」走向「能交付」的关键一步。