ComfyUI 这个名字,这两年在做图圈子里出现的频率已经高到没法忽视了。它是目前最主流的节点式 Stable Diffusion 前端之一:把原来一堆藏在滑块和输入框后面的参数,全部摊开成一个个可以拖拽、可以连线的节点,采样器、CLIP、VAE、ControlNet 各管一段,数据从哪来、到哪去,一眼能看明白。缺点也很直接:官方只发一个不带任何预装环境的原始包,Python、显卡驱动、依赖库、模型目录,全得自己搭。这篇就聊原生版安装这条路,从环境准备到第一次出图,一步步走完。适合完全没碰过命令行的小白,也适合被整合包更新慢、出问题不知道怎么查的人。
1. 为什么我建议从原生包开始折腾
1.1 节点式工作流到底解决的是什么问题
先说清楚 ComfyUI 是个什么东西,不然装完了也是一脸懵。传统 WebUI 那种界面,本质是把一条固定管线包装成表单:你填提示词、设步数、选模型,后台按写死的顺序跑一遍。想在中途插一手,比如先放大再局部重绘、或者让两个模型分别出图再混合,就得靠插件打补丁,而且很多时候补丁之间还会打架。
ComfyUI 换了个思路,它不做表单,它做图。每个处理环节都是一个节点,节点有输入接口和输出接口,你把线连起来,就定义了一条数据流。加载模型是一个节点,编码提示词是一个节点,采样是一个节点,VAE 解码是另一个节点。想加个中间环节?插一个节点进去,连线改一下就行,不用等谁给你写插件。这个设计的好处是可解释、可复用、可存档:整条流程能导出成一个 JSON,别人拿到文件,模型放对位置,一键就能跑出完全一样的管线。
代价就是学习曲线。第一次打开那个灰扑扑的画布,只有右键菜单和一堆连线,确实会懵。但真正理解了“数据往哪流”这件事之后,你会发现它的自由度反而是它最值钱的地方。所以安装这件事,我的态度是:别怕动手,装一次比看十篇教程管用。
1.2 原生包、整合包、线上版该怎么选
现在常见的三种上车方式,各有各的适用人群,我按自己的使用经验列个对照,你可以对号入座。
| 方式 | 上手难度 | 可控性 | 更新及时度 | 适合人群 |
|---|---|---|---|---|
| 原生包手动安装 | 中,需要敲几条命令 | 最高,环境完全自己掌握 | 项目更新即可拉取 | 想长期用、想装插件、想改源码 |
| 免配置整合包 | 低,解压即用 | 中,环境被封装成黑盒 | 依赖打包者节奏 | 只想快速出图看看效果 |
| 在线运行环境 | 极低,网页打开就能用 | 低,装不了重插件 | 由平台决定 | 临时体验、设备不够 |
我推荐原生包的核心理由不是“显得专业”,而是出问题之后能查。整合包最大的坑在于环境是别人封装好的,报错信息里那些路径你根本对不上,装个需要编译的插件可能直接崩,而你连 Python 装在哪都不知道。原生包虽然要自己装一遍,但每一个目录、每一个虚拟环境你都心里有数,报错的时候能顺着线索往下摸。
当然也不是说整合包一无是处。如果你只是想在周末出几张图发朋友圈,没必要折腾这一套,直接下载别人打包好的版本就行。这篇文章面向的是打算把这件事长期做下去的人。
1.3 装之前先想清楚:你的机器扛不扛得住
这一段可能有点扫兴,但必须提前说。ComfyUI 本身很轻,几 MB 的代码,跑不动的原因九成在显卡。
判断标准很朴素:显存决定你能跑多大的图和多复杂的管线。用常见的 SD1.5(512×512 基准分辨率)出图,6GB 显存就够起步;用 SDXL 那一档的模型跑 1024×1024,8GB 会比较从容,12GB 以上才谈得上舒服;如果还要叠 ControlNet、放大模型、视频生成这类重活,显存消耗是翻着倍往上走的。
显存不够也不是完全不能玩,启动时加--lowvram或者--medvram参数,能把一部分计算挪到内存里,代价是速度明显变慢。极端情况下还有--cpu参数,纯 CPU 跑,一张图等几分钟到十几分钟,属于能跑但不建议日常用的范畴。
硬盘方面,模型文件是大头。一个 SD1.5 底模两三个 G,SDXL 底模六七个 G,再加 VAE、LoRA、ControlNet,起步预留 50GB 比较稳妥。固态硬盘强烈建议,模型加载速度差距非常明显。
提示:笔记本用户注意,双显卡切换的机型有时会默认用核显跑,导致报错说找不到设备,这种情况要在系统设置里把 Python 指定到独立显卡上。
2. 装之前先摸清家底:环境清单与版本逻辑
2.1 硬件与系统的底线要求
系统层面,Windows 10/11 六十四位是最省心的选择,Linux 用户基本不会遇到什么障碍,macOS 走 MPS 后端也能跑,只是生态里很多插件优先适配的是另一套环境,踩坑概率略高。
显卡驱动这块,我建议先更新到较新的版本再动手。原因很简单:ComfyUI 依赖的深度学习框架需要调用显卡的通用计算接口,驱动太老会导致框架装上了也调不动,表现出来就是启动日志里一句“CUDA 不可用”,然后所有计算默默退回 CPU,你还以为是电脑太慢。
检查方法很直接,打开命令行敲一条:
nvidia-smi能看到一张表格,右上角写着你当前的驱动版本和支持的 CUDA 版本上限。把这两个数字记下来,下一步选框架版本的时候要用。如果这条命令提示找不到,八成是驱动没装或者没装对,先去显卡厂商那边把驱动补上,别急着往下走。
2.2 Python 版本为什么是踩坑重灾区
这是整个安装流程里我最想强调的一节。ComfyUI 需要一个特定的 Python 版本,而这个版本选错了,后面会连环崩。
先说结论:优先 3.10 或 3.11,别用太新的版本。Python 3.12 及以上虽然语言层面没问题,但深度学习生态里大量依赖需要预编译的二进制包,新版本 Python 的预编译包往往要等一段时间才跟上。你可能会遇到那种最烦人的报错——某个包在源码编译阶段卡住,然后吐出一大屏红色文字,最后告诉你“需要安装构建工具”。对新手来说这基本就是劝退点。
还有一个高频事故:电脑上装了多个 Python,命令行里敲python --version显示的是 3.13,你以为万事大吉,结果 ComfyUI 实际调用的是另一个。所以在创建虚拟环境之前,一定要确认版本号,而且要用绝对路径去调用,不要依赖环境变量里的默认指向。
# 先确认版本 python --version # 或者明确指定解释器 C:\Python311\python.exe --versionWindows 用户安装 Python 时,那个“Add Python to PATH”的勾选框建议勾上,虽然我会在后面的步骤里用绝对路径规避它,但勾上能省不少事。
2.3 Git、编译工具和目录规范
Git 的作用是把项目源码拉到本地,也是后续更新的主要手段。Windows 装 Git 一路下一步就行,装完在命令行敲git --version有输出就算成。
编译工具属于“不一定会用上,但用上了没装会很痛”的东西。后面装某些插件时,如果它依赖的包没有现成的预编译版本,pip 就会尝试本地编译,这时候没有编译器就会失败。Windows 上装一下微软官方的 C++ 生成工具(选“使用 C++ 的桌面开发”那一项)可以一劳永逸,装它要占用几个 G 的空间,但能省下未来无数次折腾。
目录规范这一条是我踩过坑之后的血泪总结:整个安装路径里不要出现中文、空格和特殊符号。像D:\我的AI\ComfyUI 安装这种路径,看着挺清楚,实际上很多底层库对非 ASCII 路径的支持是有问题的,表现出来往往是加载模型时报“文件不存在”,可你明明看见文件就在那。我一般会建一个干净的路径,比如D:\AI\ComfyUI,简单直接。
再顺手把存放模型的盘符规划一下。项目本身不大,但模型目录会越来越膨胀,把它放在容量充足的盘上,后续扩容也方便。
3. 原生包安装全流程实操
3.1 获取源码与目录规划
官方提供两种获取方式。第一种是直接下载压缩包解压,好处是简单,坏处是后续更新只能重新下;第二种是用 Git 克隆,好处是一条命令就能更新,坏处是需要先装 Git。我选第二种。
# 进入你规划的目录 cd /d D:\AI # 从项目官方仓库克隆(地址以项目页面公布的为准) git clone <官方仓库地址> ComfyUI cd ComfyUI克隆下来之后,用dir(Windows)或ls(Linux/macOS)看一眼目录结构,你会看到main.py、requirements.txt、comfy、comfy_extras、models、custom_nodes这几个关键项。确认main.py在,说明源码完整。
这里补充一个概念:官方还发布过 Windows 免配置的便携版,解压就能跑,内部自带了一个精简的 Python 环境。它确实方便,但那个内置环境是封闭的,你想升级某个库、想装需要特定版本的插件,就会非常别扭。原生安装的意义就在于这个环境是你自己的。
注意:不要图省事把项目文件夹放在系统盘的用户目录下,一是空间容易被模型撑爆,二是某些系统级的权限保护会让写入失败,表现为保存图片时报错。
3.2 创建独立虚拟环境
这一步是很多人跳过的,但我强烈建议做。虚拟环境的作用是把 ComfyUI 的依赖和系统里其他 Python 项目隔离开,各玩各的,互不污染。
# 在项目根目录下创建虚拟环境,命名为 venv python -m venv venv # Windows 激活 venv\Scripts\activate # Linux / macOS 激活 source venv/bin/activate激活成功的标志是命令行前面多了一对括号,显示(venv)。这个时候再敲python --version,输出的就是虚拟环境里的解释器,跟系统全局的隔离开了。
为什么值得多这一步?因为 ComfyUI 的依赖树挺深的,而且插件开发者经常要求特定版本的某个库。没有虚拟环境的话,你装 A 插件顺手升级了一个包,B 插件可能当场就废了,排查起来毫无头绪。有了虚拟环境,最坏的情况也就是把venv文件夹删掉重建,十分钟的事。
顺便说一句,激活状态只对当前这个命令行窗口有效,关掉重开就要重新激活一次。这也是后面我要写启动脚本的原因之一。
3.3 安装 PyTorch 与项目依赖
这是整个安装的核心环节,也是最容易出错的地方。
先说框架版本怎么选。要把两件事对上:你的驱动支持到哪一档 CUDA,以及你要用哪个版本的框架。上一步用nvidia-smi查到的那个版本号,是驱动能支持的上限,你装的计算版本不能超过它。比如驱动显示支持到 12.1,那你装 cu121 或 cu118 都没问题,装 cu124 就大概率报错。
一步到位的做法是先只装框架,装完立刻验证:
# 以 cu121 为例,具体可选版本以框架官方提供的索引为准 pip install torch torchvision torchaudio --index-url <对应版本的索引地址>装完之后必须验证,别装完就直接往下走。验证命令就三行:
import torch print(torch.__version__) print(torch.cuda.is_available())第三行输出True才算真的装到位。如果输出False,别急着继续,先解决这个。常见原因有两个:装成了纯 CPU 版本(版本号里没有 cu 字样);或者驱动版本太低,框架识别不到设备。前者重装带 cu 标记的版本,后者去更新驱动。
框架没问题了,再装项目依赖:
pip install -r requirements.txt这一条命令会拉一堆库下来,包括图像处理、模型加载、界面相关的各种包。过程中如果出现红色报错,先别慌,看最后几行。如果提示某个包“Failed building wheel”,说明缺编译工具,回去把第 2.3 节那一步补上。如果提示版本冲突,记下冲突的两个包名,单独指定版本装。
还有一个提速技巧:默认的包索引在某些时段速度会比较感人,可以临时换成速度更快的镜像源,装完依赖再换回来。这个操作只影响下载速度,不影响装出来的东西。
3.4 写一个双击就能启动的脚本
装完之后每次用都要开命令行、激活环境、敲启动命令,太啰嗦了。写个批处理脚本一劳永逸。
在项目根目录新建一个文本文件,改名为启动.bat(或者英文名,避免编码问题),内容大致是这样:
@echo off cd /d %~dp0 call venv\Scripts\activate python main.py --preview-method auto pause逐行解释一下,因为这几行里每一行都有用:
cd /d %~dp0把工作目录切到脚本所在的文件夹,这样不管从哪里双击都能正确启动,顺便解决了“手滑在错误的目录下执行”的问题。call venv\Scripts\activate激活虚拟环境。这里必须用call,直接写会让批处理在激活后就中断。--preview-method auto是开启采样过程预览,能边跑边看到图逐渐成型,调试的时候特别有用。pause让窗口在程序退出后停住,不然闪一下就没,报错信息根本来不及看。
Linux 或 macOS 用户写个start.sh,内容对应:
#!/bin/bash cd "$(dirname "$0")" source venv/bin/activate python main.py --preview-method auto记得给执行权限chmod +x start.sh。
启动成功后,命令行最后会打印一个本地地址,默认是127.0.0.1:8188,复制到浏览器打开就能看到那个灰色大画布了。如果 8188 端口被别的程序占了,启动会失败,加--port 8189换一个就行。
3.5 模型文件该放哪:目录对照表
界面能打开了,但没模型照样出不了图。ComfyUI 对文件位置的要求很严格,放错地方界面的下拉框里就是空的。
| 模型类型 | 存放路径 | 常见格式 | 说明 |
|---|---|---|---|
| 底模(Checkpoint) | models/checkpoints | .safetensors / .ckpt | 主模型,出图的核心 |
| VAE | models/vae | .safetensors | 负责解码色彩,缺失会偏色发灰 |
| LoRA | models/loras | .safetensors | 风格与角色微调 |
| ControlNet | models/controlnet | .safetensors | 姿态、边缘、深度约束 |
| 放大模型 | models/upscale_models | .pth / .safetensors | 高清放大用 |
| 文本编码器 | models/clip | .safetensors | 部分工作流需要单独指定 |
| 自定义节点 | custom_nodes | 文件夹 | 插件都装这里 |
几个实操中的细节值得说:
文件优先选.safetensors格式,它比老的.ckpt更安全,加载时不会执行代码。文件名建议用英文和数字,别用中文,有些加载逻辑在遇到非 ASCII 文件名时会出岔子。放好文件后不用重启,在界面上点一下刷新按钮,或者按 R 键,列表就会更新。
模型体积大,千万别重复存好几份。如果你之前在别的工具里已经下过一批模型,可以直接把整个models目录搬过来,或者建立符号链接指向原位置,省硬盘。Windows 上建符号链接需要管理员权限,命令是mklink /D 目标 源,方向别搞反了。
注意:VAE 这一项经常被忽略。有些底模是内置 VAE 的,有些不是,不含 VAE 的底模跑出来画面会明显发灰发白。遇到这个现象,先去检查是不是缺 VAE,别一上来就怀疑参数。
4. 第一次跑通:从空白画布到出图
4.1 界面交互的基本功
第一次打开画布,你会看到一个可以无限拖动的灰色空间,默认已经摆了一个“Load Checkpoint”节点。别急着右键乱点,先掌握四个基本操作:
平移:按住空格或者鼠标中键拖动。缩放:滚轮。添加节点:在空白处双击或者右键,会弹出带搜索框的菜单,输入关键词就能过滤。连线:从一个节点右侧的小圆点拖到另一个节点左侧的对应圆点,颜色对不上的接口连不上,这是个很直观的防错设计。
所有节点都可以拖动、可以折叠、可以复制。选中一批节点按Ctrl+C、Ctrl+V能整块复制,做多分支对比的时候很有用。还有一个我天天用的快捷键:选中某个节点后按Ctrl+M可以暂时静音它,调试的时候不用把线拆了重连,比删了再补快得多。
管理多条工作流的时候,用右侧面板的保存功能存成文件,下次直接拖进画布就恢复了。这个 JSON 就是你的“流程资产”,比截图有用一百倍,因为它是可执行的。
4.2 搭一条最简出图链路
不用背,直接调用内置范例最快。在画布上双击,搜索Load Default,或者在菜单里加载默认工作流,出来一条从加载模型到保存图片的完整链路。这条链路的结构是:
Load Checkpoint(加载底模)→ 分出两路,一路进CLIP Text Encode(正向提示词)和另一路(反向提示词)→ 两路提示词和底模一起进KSampler(采样器)→ 输出进VAE Decode(解码成图)→Save Image(保存)。
连线的时候注意 KSampler 有几个关键输入:model接底模输出的模型,positive接正向提示词编码,negative接反向,latent_image接一个空 Latent。空 Latent 节点需要你自己加,搜索Empty Latent Image,里面填分辨率和批次。512×512 是最稳的起步尺寸,因为大多数底模都是按这个尺寸训练的。
KSampler 里的参数,第一张图建议这样设:
| 参数 | 建议值 | 说明 |
|---|---|---|
| steps | 20-25 | 步数少质量差,太多收益递减 |
| cfg | 7 | 提示词贴合度,越高越死板 |
| sampler_name | euler | 最通用的采样器,速度快 |
| scheduler | normal | 与 euler 搭配的常规调度 |
| denoise | 1.0 | 从空 Latent 起步必须是 1.0 |
| seed | 随便填个数字 | 固定它才能复现同一张图 |
denoise这个参数是新手最容易搞错的。从零开始出图时它必须是 1.0,表示完全重绘;只有做图生图、放大这类“基于已有图像”的流程时,才把它调低。看到别人说“0.5 重绘”就跟着改,然后发现出来的图糊成一团,问题就出在这。
点右侧的 Queue Prompt 按钮(或者按Ctrl+Enter),命令行窗口开始滚动日志,画布上的节点会依次亮起表示正在执行。第一次跑会慢一些,因为模型要从硬盘加载进显存。
4.3 盯着显存看:什么时候该紧张
第一次跑通之后,建议打开任务管理器看一眼显存占用,这个数字会成为你后面所有参数调整的依据。
我的经验值是:出 512×512 的图,占用在 3-5GB 波动;出 1024×1024,8GB 显存的卡会跑到 7GB 以上,接近天花板;一旦叠了 ControlNet,再往上加 2-3GB 很正常。如果显存占用贴着上限跑,你会听到风扇狂转,然后要么报“显存不足”,要么整台机器卡死。
几个缓解手段,按效果排序:
第一,降分辨率。1024 降到 768,显存占用能掉一大截,这是最直接的办法。第二,加启动参数--lowvram,让框架更积极地释放不用的模型块。第三,用--medvram折中一下,速度损失没那么大。第四,把批次大小从 4 降到 1,出图数量少了但单张更稳。
还有一个容易被忽略的点:ComfyUI 会把模型缓存在显存里以便快速复用,如果你频繁切换不同底模,缓存可能越堆越多。启动参数里加--disable-smart-memory可以让它更激进地清理,代价是切换模型后首次出图变慢。这个参数在显存紧张的时候很好用。
5. 报错排查实录:这些坑我都踩过
5.1 依赖与环境类问题速查
装依赖这关是最容易卡住新手的,我整理了一张对照表,覆盖大部分高频情况。
| 报错特征 | 根本原因 | 处理方式 |
|---|---|---|
No module named xxx | 依赖没装全 | 重新执行pip install -r requirements.txt,注意确认在虚拟环境里 |
Failed building wheel | 缺编译器 | 补装 C++ 生成工具,或换预编译版本 |
ImportError: DLL load failed | 运行库缺失 | 补装系统运行库合集 |
| 装包极慢、超时 | 下载源问题 | 临时换索引源 |
| 版本冲突警告 | 两个包互相要求不同版本 | 单独指定版本装,或先装主包再装插件 |
No module named这一类,九成是“以为在虚拟环境里其实不在”。判断方法很简单,看命令行前面有没有(venv)。没有的话,你装的包进了全局环境,项目自然找不到。
版本冲突这类问题更麻烦一些。我的处理原则是:先保证 ComfyUI 主程序能跑,再去装插件。顺序反过来的话,插件引入的依赖可能把主程序需要的东西降级掉。真遇到死锁,把venv删了重建,重装一遍主程序依赖,往往比一点点拆解冲突更快。
5.2 显卡相关报错的处理思路
启动日志里出现Torch not compiled with CUDA enabled,说明装的是 CPU 版本框架,重装带 cu 标记的版本即可。出现CUDA out of memory,就是显存真的不够,参考 4.3 节的手段。
还有一种情况是设备能找到,但跑起来异常慢,出图时间比预期长好几倍。这时候检查一下日志开头有没有打印设备名称,如果显示的是 CPU 而不是显卡型号,说明框架在用 CPU 算。原因可能是驱动版本太老,也可能是装了不匹配的计算版本。
驱动版本这件事,我的建议是保持在一个较新但稳定的版本上,别追最新。最新的驱动偶尔会有兼容性问题,而你很难第一时间联想到是驱动惹的祸。
5.3 那些看起来不像问题的问题
有几类“故障”其实不是故障,新手容易误判。
启动特别慢,卡在导入阶段十几秒:正常现象,框架初始化要加载大量的库和算子,机械硬盘上更明显。放固态盘能改善。
界面能打开但出图按钮点了没反应:看命令行窗口,出图日志是在命令行里滚的,界面上看不到进度很正常。
保存的图片找不到:默认存在项目目录下的output文件夹,按日期分子目录。如果你改过启动参数里的输出路径,去那找。
杀毒软件报毒然后文件被删:深度学习框架的某些二进制文件容易被误判。真遇到了,把项目目录加到信任列表,别直接关掉防护。
浏览器打开是白屏:可能是浏览器缓存,也可能是端口填错。换个浏览器或者开无痕窗口试试,能快速排除。
6. 装完之后:更新、插件与备份
6.1 更新的正确姿势
原生包的优势这时候体现出来了。更新就两步:
git pull pip install -r requirements.txt第二条命令不能省。项目更新时经常会引入新的依赖,只拉代码不装依赖,启动时报个No module named你还以为是更新坏了。
但这里有个必须提醒的风险:如果你已经装了一堆插件,git pull之后主程序跑不起来是常有的事,因为插件可能还没适配新版本。我的习惯是更新前先把整个项目文件夹复制一份备份,出问题直接回滚,比一行行排查快得多。
如果是那种需要回退到某个旧版本的情况,可以用git log看提交记录,git checkout <提交号>切回去,然后再装一遍那次的依赖。
6.2 插件管理:别一次装一堆
自定义节点是这个生态最活跃的部分,也是环境最容易崩的地方。我的建议是一次只装一个,装完立刻重启验证。一次装十个,出问题的时候你根本不知道是哪个惹的祸。
插件安装方式通常是进custom_nodes目录,用 git 克隆下来,然后回到主目录执行pip install -r <插件目录>/requirements.txt。很多人漏掉后一步,结果插件在界面里出现了,点下去就报缺模块。
真要装插件,社区里有个管理器类的扩展能省不少事,它把安装、更新、依赖处理做成了图形化操作。但我还是会提醒一句:这类管理器在批量更新时容易把环境搞乱,日常用的时候尽量手动单个操作。
6.3 备份什么、怎么备份
这件事我吃过亏,所以单独说。需要备份的东西按重要性排:
第一是工作流 JSON,这是你花了时间调出来的管线,丢了最心疼,而且文件很小,多存几个地方没成本。第二是模型文件,尤其那些难找的,重新下可能要好几天。第三是custom_nodes目录,插件配置都在里面。第四才是主程序本身,那个随时能重新拉。
我自己的做法是把models目录和output目录放在一个固定的位置,定期整体复制到另一块盘。项目本身反倒是轻量备份,更新前复制一个文件夹就够了。这样即使哪天环境彻底搞崩,重装半小时就能恢复,模型一个都不用重下。
另外提醒一句,output目录会随着使用无限膨胀,出图多了动辄几十个 G。定期清理不需要的图片,或者把它指向一个容量更大的盘,能省不少麻烦。我一般会在启动参数里把输出路径固定下来,免得哪天忘了清理把主盘塞满。
最后分享一个我个人的习惯:装完之后的第一件事,是把那几条验证命令(Python 版本、torch 版本、CUDA 是否可用)记在一个 txt 里放在项目根目录。以后不管换了机器还是隔了半年再回来,照着敲一遍,三十秒就能判断环境是不是还正常,比凭记忆猜可靠得多。