1. 这不是“装个软件就完事”的教程,而是带你亲手搭起图像生成的神经中枢
ComfyUI 不是 Photoshop 那种点几下就能出图的图形界面工具,它更像一个可编程的图像工厂流水线——你得自己设计工位、安排工人、铺设传送带、校准质检标准。所谓“手搓构建自己的第一个图片工作流”,核心不在“搓”这个动作有多费劲,而在于你第一次真正看清了 Stable Diffusion 类模型背后那套节点式、数据流驱动、可追溯、可复现的底层逻辑。我带过几十个从 WebUI 转过来的朋友,90% 的人第一次打开 ComfyUI 界面时都愣住:没有“正向提示词框”、没有“采样步数滑块”、没有“生成按钮”,只有一片空白画布和一堆颜色各异的方块。这恰恰是它最珍贵的地方:它强制你把“我想画个穿汉服的猫在樱花树下喝茶”这个模糊念头,拆解成“文本编码→潜在空间初始化→噪声调度→去噪循环→图像解码→后处理增强”这一连串可验证、可替换、可调试的原子操作。
关键词comfyui和图片工作流在当前搜索热榜里高频并列出现,说明大众已越过“能不能用”的初级阶段,进入“怎么用得更稳、更快、更可控”的深水区。而“秋叶一键整合包”这类词反复刷屏,恰恰反衬出原生 ComfyUI 的安装与配置门槛——它本身不提供 Python 环境、不打包模型、不预置插件、不优化显存调度。所谓“一键”,本质是把开发者本该理解的依赖链(CUDA 版本匹配、PyTorch 编译选项、xformers 兼容性、VAE 加载方式)全部封装成黑盒。但黑盒一旦出问题,你就只能等更新;而白盒流程里,你随时能换掉某一段“传送带”(比如把 KSampler 换成 DPM++ 2M Karras),或给某个“质检工位”(如 Detailer)加个阈值调节旋钮。我去年帮一位做电商主图的设计师重构工作流,她原来用 WebUI 生成模特换装图,每次重绘都要手动调 7 个参数,成功率不到 60%;改成 ComfyUI 后,我们把“服装纹理强化”、“皮肤质感保留”、“背景虚化强度”三个环节独立成子图,每个子图配专属 Lora 加载器和 ControlNet 权重滑块,最终将单图成功率拉到 92%,且所有参数可保存为 JSON 备份。这才是“工作流”该有的样子:不是一次性的操作记录,而是可版本管理、可团队共享、可按需裁剪的生产模块。
适合谁来读这篇?如果你满足以下任意一条,这篇就是为你写的:
- 已经用过 WebUI,能跑通基础图生图,但遇到“为什么这张图细节糊”“为什么换了个模型就崩”“为什么加了 ControlNet 反而更歪”这类问题时,只能靠玄学调参;
- 正在接商业订单,需要保证 50 张图风格统一、结构一致、渲染速度稳定,不能靠“多试几次”来交付;
- 是技术型创作者,习惯用 Git 管理代码,希望图像生成过程也能像写程序一样做 diff、回滚、分支测试;
- 或者单纯好奇:Stable Diffusion 底层到底怎么把一串文字变成像素?那些“采样器”“调度器”“VAE”之间究竟是什么关系?
接下来的内容,不会教你点哪里下载整合包、双击哪个 exe 文件。我会带着你,从零开始,在命令行里敲出第一行git clone,亲手把 ComfyUI 的骨架立起来;然后像拼乐高一样,把 CLIP 文本编码器、UNet 主干网络、VAE 解码器、KSampler 采样器这些核心组件,用鼠标拖拽连接成一条完整数据流;最后再给你装上“自动人脸修复”“局部重绘增强”“高清放大流水线”这些工业级配件。每一步,我都告诉你为什么必须这样连、为什么这个节点要放在这里、如果连错了会看到什么报错、以及我踩过的三个最坑爹的显存陷阱。这不是速成课,这是给你发一张通往图像生成底层世界的通行证。
2. 为什么非得“手搓”?ComfyUI 架构设计背后的三重硬逻辑
很多人问:“秋叶整合包明明点几下就跑起来了,为啥还要折腾命令行、装依赖、编译插件?”这个问题问到了根子上。答案不是“为了显得高级”,而是由 ComfyUI 的底层架构决定的——它本质上是一个基于 Python 的可视化计算图引擎,而非传统意义上的 GUI 应用。理解这一点,才能明白“手搓”的必要性。
2.1 第一层逻辑:节点即函数,连线即数据流
ComfyUI 的每一个方块(Node)都不是 UI 控件,而是一个封装好的 Python 函数。比如CLIPTextEncode节点,其内核代码只有 3 行:
def encode(self, clip, text): tokens = clip.tokenize(text) cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) return (cond, pooled)它接收clip(文本编码器对象)和text(字符串)两个输入,输出(cond, pooled)这个元组。当你把CLIPTextEncode的输出端口连到KSampler的positive输入端口时,实质上是在告诉 Python:“把前者的返回值,作为后者的第一个参数传进去”。这种“函数式编程+数据流图”的设计,带来三个不可替代的优势:
- 可追溯性:WebUI 里你调了 10 个参数,最终图崩了,你根本不知道是
CFG Scale还是Denoise先出的问题;而在 ComfyUI 中,你可以单独右键点击KSampler节点,选择 “Queue Prompt”,系统会只运行从该节点往前推的所有上游节点(即文本编码+潜在空间初始化),跳过后面耗时的去噪循环,几秒内就能验证是不是提示词解析错了; - 可组合性:你想给同一张图同时加“线稿控制”和“深度图控制”,WebUI 里得反复切换 ControlNet 模型、调整权重;ComfyUI 中,你只需拖入两个
ControlNetApply节点,把它们的输出分别连到KSampler的control_net输入(支持列表输入),权重值直接写在节点参数里,无需手动平衡; - 可替换性:某天你发现
KSampler生成速度慢,想试试AdvancedRefluxSampler,在 WebUI 里得等作者更新插件;在 ComfyUI 中,你只要下载对应自定义节点,加载后它就会出现在节点列表里,拖进来、连好线、改个参数,立刻生效——因为所有节点都遵循同一套输入/输出接口规范。
提示:ComfyUI 的节点接口协议叫
INPUT_TYPES()和RETURN_TYPES,前者定义该节点需要哪些参数(如model,positive,negative,latent_image),后者定义它返回什么(如(latent,)或(image,))。任何不符合此协议的自定义节点,都无法被识别。这也是为什么很多“破解版”节点一加载就报红——它根本没实现标准接口。
2.2 第二层逻辑:工作流即 JSON,版本管理从此成为可能
你在 ComfyUI 里画的每一条连线、填的每一个参数、选的每一个模型路径,最终都会序列化成一个纯文本 JSON 文件。打开一个.json工作流文件,你会看到类似这样的结构:
"6": { "inputs": { "ckpt_name": "realisticVisionV60B1_v51VAE.safetensors", "vae_name": "vae-ft-mse-840000-ema-pruned.safetensors" }, "class_type": "CheckpointLoaderSimple" }, "7": { "inputs": { "text": "masterpiece, best quality, 1girl, hanfu, cherry blossom, tea ceremony", "clip": ["6", 1] }, "class_type": "CLIPTextEncode" }这里"6"是 CheckpointLoaderSimple 节点的 ID,"7"是 CLIPTextEncode 节点,"clip": ["6", 1]表示它的clip输入来自节点6的第 1 个输出(索引从 0 开始)。这意味着:
- 你可以用 VS Code 直接编辑这个 JSON,批量替换模型路径、修改采样步数、删除冗余节点;
- 你可以把工作流文件提交到 Git 仓库,和团队成员共享;当同事反馈“生成图偏绿”,你直接
git diff就能看到是哪个节点的gamma参数被误调成了 1.8; - 你可以写 Python 脚本自动遍历 100 个工作流 JSON,提取所有用到的模型名,生成一份《项目依赖清单》,避免交付时漏传某个 .safetensors 文件。
我服务过一家做 IP 形象设计的公司,他们要求所有角色图必须使用指定 Lora 模型 + 固定 VAE + 统一采样器。以前用 WebUI,美术师靠截图参数表来对齐,错误率高达 35%;接入 ComfyUI 后,我们把标准工作流 JSON 打包进内部 Docker 镜像,每位设计师启动容器后,直接加载该 JSON,所有参数锁定不可编辑,仅开放提示词和种子值——交付合格率从 65% 直接跃升至 99.2%。
2.3 第三层逻辑:显存调度是门手艺,黑盒整合包正在偷走你的掌控权
“comfyui生成视频时爆内存”这个热搜词,直指 ComfyUI 最痛的痛点:显存管理。WebUI 把所有模型(Base Model、Lora、ControlNet、VAE)一股脑全加载进显存,图一生成完就卡死;ComfyUI 则采用“按需加载+显存复用”策略——但它不会自动帮你规划,得你自己设计加载顺序。
举个真实案例:你要用RealisticVision模型 +FaceDetailer插件做高清人像。如果按默认顺序:
- 加载
RealisticVision.safetensors(占用 4.2GB 显存) - 加载
face_yolos_v2.pt(YOLO 检测模型,+0.8GB) - 加载
insightface(人脸识别模型,+1.1GB) - 运行 KSampler(+2.1GB 峰值)
总显存峰值达 8.2GB,GTX 3090(24GB)尚可,但 RTX 4060(8GB)必然 OOM。
而正确的手搓顺序应该是:
- 先加载
face_yolos_v2.pt,检测出人脸 bbox 后立即卸载(释放 0.8GB) - 再加载
insightface,对 bbox 区域做特征提取,完成后卸载(释放 1.1GB) - 最后才加载
RealisticVision和 VAE,此时显存压力只剩 4.2+0.6+2.1=6.9GB
这个调度逻辑,必须通过UnloadModel节点手动插入到工作流中实现。秋叶整合包默认关闭了所有卸载功能,因为它要保证“开箱即用”,但代价是你永远无法在 8GB 显卡上跑复杂工作流。我实测过,同样一张 1024x1024 人像图,在开启UnloadModel节点后,RTX 4060 的显存峰值从 8.1GB 降到 6.3GB,帧生成时间反而快了 12%,因为减少了显存交换带来的 IO 等待。
注意:
UnloadModel节点不是万能的。它只能卸载通过CheckpointLoaderSimple加载的模型,对LoraLoader加载的 LoRA 权重无效(LoRA 是注入到 UNet 中的,无法单独卸载)。所以真正的显存优化,是把“模型加载”这个动作,拆解成多个细粒度节点,并精确控制每个节点的生命周期。
3. 从零开始手搓:环境搭建、核心节点连接、首个可运行工作流
现在,我们正式进入实操环节。请放下“找整合包”的念头,拿出终端(Windows 用户请用 PowerShell 或 Windows Terminal,Mac/Linux 用自带 Terminal),跟我一步步把 ComfyUI 的地基打牢。整个过程分为三阶段:环境准备 → 核心工作流搭建 → 功能增强。每一步都附带我踩过的坑和绕过方案。
3.1 环境准备:拒绝“一键”,拥抱可控
第一步:确认显卡驱动与 CUDA 版本不要跳过这步!ComfyUI 对 CUDA 版本极其敏感。执行:
nvidia-smi查看右上角显示的 CUDA Version(注意:这是驱动支持的最高 CUDA 版本,不是你已安装的版本)。例如显示CUDA Version: 12.4,则你必须安装 PyTorch 2.2+(支持 CUDA 12.4)。访问 PyTorch 官网 ,选择对应配置:
- Package:
pip - OS:
Windows/Linux/macOS - Compute Platform:
CUDA 12.4(务必匹配!) - Python:
3.10(ComfyUI 官方推荐,3.11 有兼容问题)
复制生成的 pip 命令,例如:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124第二步:克隆 ComfyUI 主仓库
git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI别急着python main.py!先执行:
pip install -r requirements.txt这里有个巨坑:requirements.txt里默认包含xformers==0.0.26,但该版本在 CUDA 12.4 下会编译失败。解决方案是临时注释掉这一行,或改用预编译 wheel:
pip install xformers --index-url https://download.pytorch.org/whl/cu124第三步:模型与插件的“干净”放置ComfyUI 的目录结构非常清晰:
ComfyUI/ ├── models/ # 所有模型存放处 │ ├── checkpoints/ # .safetensors/.ckpt 主模型 │ ├── loras/ # .safetensors LoRA 模型 │ ├── controlnet/ # .safetensors ControlNet 模型 │ └── vae/ # .safetensors VAE 模型 ├── custom_nodes/ # 自定义节点插件 └── ...请严格遵守此结构。我见过太多人把模型乱扔在models/checkpoints/之外,结果 ComfyUI 死活找不到。特别提醒:.ckpt文件已基本淘汰,优先下载.safetensors格式(更安全、加载更快)。
实操心得:模型命名别用中文或空格!
realisticVision_v6.safetensors可以,我的超棒模型_v6.ckpt会触发路径解析错误。用下划线_代替空格,用英文小写命名,这是血泪教训。
3.2 搭建首个最小可行工作流:5 个节点,3 条连线
启动 ComfyUI:
python main.py浏览器打开http://127.0.0.1:8188。你会看到一片空白画布。现在,我们要连出最简工作流:输入提示词 → 加载模型 → 编码文本 → 采样生成 → 输出图片。
节点 1:CheckpointLoaderSimple(模型加载器)
右键画布 →Load Checkpoint→ 选择你放在models/checkpoints/下的主模型(如realisticVisionV60B1_v51VAE.safetensors)。它会输出MODEL,CLIP,VAE三个端口。
节点 2 & 3:CLIPTextEncode(文本编码器)×2
右键 →CLIP Text Encode (Prompt)→ 拖出两个。一个填正向提示词(如masterpiece, best quality, 1girl, hanfu),另一个填负向提示词(如deformed, ugly, text, signature)。注意:两个节点的clip输入,都必须连到节点 1 的CLIP输出端口(黄色端口)。
节点 4:EmptyLatentImage(潜在空间初始化器)
右键 →Empty Latent Image→ 设置宽度1024、高度1024、批次1。它输出LATENT。
节点 5:KSampler(采样器)
右键 →KSampler→ 这是核心!关键参数:
seed: 随机种子(填0测试用)steps: 采样步数(20起步)cfg: 提示词相关性(7是常用值)sampler_name: 采样器类型(euler最稳)scheduler: 调度器(normal即 Karras)denoise: 去噪强度(1.0表示完全重绘)
现在连线:
- 节点 1 的
MODEL→ 节点 5 的model - 节点 1 的
VAE→ 节点 5 的vae - 节点 2 的
CONDITIONING→ 节点 5 的positive - 节点 3 的
CONDITIONING→ 节点 5 的negative - 节点 4 的
LATENT→ 节点 5 的latent_image
最后,右键节点 5 →Save Image→ 连接到images输出端口(蓝色端口)。至此,5 个节点、3 条关键连线(实际共 7 条,但核心是 MODEL/CLIP/VAE 三条数据流)全部就位。
点击画布右上角的 Queue Prompt 按钮(闪电图标)。如果一切正常,右下角状态栏会显示Running...,几秒后,output/目录下会出现一张 PNG 图。恭喜,你手搓的第一个工作流诞生了!
常见问题排查:如果卡在
Running...不动,90% 是显存不足。打开任务管理器,看 GPU 显存占用是否接近 100%。解决方案:降低EmptyLatentImage的分辨率(试512x512),或在KSampler中把steps改成10。记住,这是调试阶段,不是最终设置。
3.3 功能增强:让工作流真正“可用”的三大配件
最小工作流能出图,但离实用还差很远。下面三个插件,是我给所有新手必装的“生产力三件套”。
配件 1:Impact Pack(人脸/物体精细化修复)
这是目前最成熟的 Detailer 插件。下载地址: GitHub - ComfyUI-Impact-Pack
安装:解压后,把impact_pack文件夹整个丢进custom_nodes/目录,重启 ComfyUI。
核心节点:FaceDetailer(自动识别人脸并局部重绘)、SegmDetector(分割指定物体)、MaskCombine(合并多个遮罩)。
实操价值:解决 WebUI 里最头疼的“手部畸形”“脸部糊化”问题。FaceDetailer会先用 YOLO 检测人脸 bbox,再用 InsightFace 提取特征,最后用独立的高清重绘模型(如face-fidelity)对该区域进行 512x512 精修,其他区域保持原分辨率。我测试过,同一张图,WebUI 默认生成的手指数量错误率 38%,加上FaceDetailer后降至 2.1%。
配件 2:ControlNet Preprocessor(控制网预处理器)
ControlNet 模型(如canny,depth,openpose)需要特定格式的输入图。这个插件提供全套预处理节点。
安装: GitHub - ComfyUI-ControlNet-Aux
关键节点:CannyEdgePreprocessor(转线稿)、MiDaSDepthPreprocessor(转深度图)、OpenPosePreprocessor(转姿态图)。
避坑提示:预处理节点的resolution参数必须与你后续ControlNetApply的strength匹配。例如,CannyEdgePreprocessor输出的是 1024x1024 线稿,那么ControlNetApply的strength建议设为0.8~1.2;如果预处理分辨率是512x512,strength得调到1.5~2.0,否则控制力不足。
配件 3:Efficient Loader(高效模型加载器)
解决“加载模型太慢”和“显存浪费”两大痛点。
安装: GitHub - ComfyUI-Efficient-Loader
核心能力:
- 支持
LoRA、Textual Inversion、Hypernetwork的热加载(不用重启 ComfyUI); - 提供
ModelMerge节点,可在线融合两个主模型(如RealisticVision+DreamShaper); VAELoader支持动态切换 VAE,避免重复加载。
实测数据:启用 Efficient Loader 后,切换 LoRA 模型耗时从 8.2 秒降至 0.3 秒;加载RealisticVision+epicrealism双模型,显存占用比传统方式低 1.7GB。
4. 工作流调试实战:从“图崩了”到“精准可控”的 7 个关键排查点
手搓工作流最大的魅力,不是“能跑”,而是“能 debug”。当一张图生成失败、质量异常、速度奇慢时,ComfyUI 给你的是手术刀,而不是锤子。下面是我整理的 7 个高频故障点,每个都附带现场排查指令和修复方案。
4.1 故障点 1:KSampler 报错 “CUDA out of memory”
这是新手第一道坎。错误信息通常很长,但关键句是out of memory on device。别急着关机,按以下步骤定位:
Step 1:查看显存实时占用
在 ComfyUI 启动终端中,按Ctrl+C中断当前进程,然后执行:
nvidia-smi --query-compute-apps=pid,used_memory,process_name --format=csv你会看到类似:
"pid", "used_memory", "process_name" "12345", "7856 MiB", "python"如果used_memory接近你的显卡总显存(如 8192 MiB),说明确实是 OOM。
Step 2:逐级降压测试
- 先把
EmptyLatentImage分辨率降到512x512,再试; - 如果还崩,把
KSampler的steps从20降到10; - 如果仍崩,检查是否启用了
xformers:在main.py启动时加参数--disable-xformers,因为某些 xformers 版本在低显存下反而更耗资源。
Step 3:终极方案——启用显存分块
在KSampler节点参数中,勾选Preview Image(生成过程中实时预览),并把preview_method设为auto。这会让 ComfyUI 自动启用torch.compile分块推理,显存峰值可降低 20~30%。我在 RTX 4060 上用此法,成功把1024x1024图的显存峰值从 8.1GB 压到 6.4GB。
4.2 故障点 2:生成图全是噪点/模糊/色偏
这通常不是模型问题,而是数据流断裂。重点检查三个“黄色端口”:
CLIPTextEncode的clip输入是否连到了CheckpointLoaderSimple的CLIP输出?
(常见错误:连到了MODEL或VAE,导致文本编码失败,输出全零向量)KSampler的vae输入是否连到了CheckpointLoaderSimple的VAE输出?
(连错会导致解码失败,输出灰度噪点)KSampler的latent_image是否来自EmptyLatentImage?
(如果连了其他节点的输出,比如某个 ControlNet 的 latent,可能尺寸不匹配)
快速验证法:右键KSampler→Queue Prompt,观察日志。如果看到latent_image shape: torch.Size([1, 4, 64, 64]),说明 latent 尺寸正确(1024x1024 对应 64x64);如果显示[1, 4, 32, 32],说明EmptyLatentImage设置错了。
4.3 故障点 3:ControlNet 完全不起作用
症状:加了 Canny 线稿,生成图却和没加一样。原因 90% 是预处理与应用不匹配。
检查清单:
✅CannyEdgePreprocessor的low_threshold/high_threshold是否合理?(默认100/200,光线强的图需调高)
✅ControlNetApply的strength是否 ≥0.5?(低于0.3基本无效)
✅ControlNetApply的start_percent/end_percent是否覆盖全程?(默认0.0/1.0,没问题)
✅ControlNetApply的control_net输入,是否连到了ControlNetLoader的输出,而不是ControlNetPreprocessor的输出?(这是最大误区!Preprocessor 输出的是IMAGE,ControlNetLoader 输出的才是CONTROL_NET对象)
现场诊断:右键ControlNetApply节点 →View Image,如果弹出窗口是纯黑或纯白,说明 ControlNet 没加载成功;如果是线稿图,则说明control_net连错了。
4.4 故障点 4:LoRA 模型不生效
症状:加载了animeStyle.safetensors,但生成图毫无动漫感。原因通常是 LoRA 权重过低或未注入。
权重检查:LoraLoader节点的strength_model参数,默认是1.0,但很多 LoRA 实际需要0.6~0.8。建议从0.5开始试,逐步加到1.0。
注入位置检查:LoraLoader的输出必须连到CheckpointLoaderSimple的model输入(不是CLIP或VAE),这样才能把 LoRA 权重注入 UNet 主干。
模型兼容性检查:animeStyle.safetensors是为AnythingV3训练的,若你加载的是RealisticVision,则完全不兼容。务必确认 LoRA 的 base model 与你当前 checkpoint 一致。
4.5 故障点 5:FaceDetailer 报错 “No face detected”
这是 Impact Pack 的经典问题。根源在于 YOLO 检测模型对输入图的分辨率敏感。
解决方案:
- 在
FaceDetailer节点前,加一个ImageScaleToTotalPixels节点,把输入图缩放到1280x720(YOLO 最佳检测分辨率); - 或者,把
FaceDetailer的bbox_threshold从默认0.5降到0.3,放宽检测条件; - 最彻底的方法:更换检测模型。Impact Pack 自带
face_yolos_v2.pt,你也可以替换成yoloface_640.onnx(精度更高,但稍慢)。
4.6 故障点 6:工作流加载极慢(>30 秒)
症状:每次打开.json工作流,都要等半分钟。原因:JSON 文件里硬编码了绝对路径,而你的模型不在那个位置。
根治方法:
- 用文本编辑器打开工作流 JSON;
- 搜索
"models/checkpoints/",把所有类似"models/checkpoints/realisticVisionV60B1_v51VAE.safetensors"的路径,改为相对路径"realisticVisionV60B1_v51VAE.safetensors"; - 确保该文件确实放在
ComfyUI/models/checkpoints/目录下。
ComfyUI 会自动补全相对路径,加载速度从 30 秒降至 1.2 秒。
4.7 故障点 7:生成图与提示词严重不符(语义漂移)
症状:写了 “一只橘猫坐在窗台”,结果生成了“一只柴犬在厨房”。这不是模型问题,而是 CLIP 文本编码器被污染。
排查路径:
- 检查
CLIPTextEncode节点的clip输入,是否连到了正确的CheckpointLoaderSimple的CLIP输出? - 检查是否误用了
CLIPTextEncodeSDXL节点(用于 SDXL 模型),而你的 checkpoint 是 SD1.5 模型? - 检查提示词是否含特殊字符:
#、*、{}会被 CLIP 当作语法符号解析,导致语义错乱。用masterpiece, best quality, orange cat, sitting on windowsill替代masterpiece #best #quality {orange cat} [on windowsill]。
实操心得:我给自己定了一条铁律——所有工作流 JSON 文件,必须在
output/目录下保存一份带时间戳的备份(如workflow_20240520_1423.json)。当某天发现图质突变,直接git checkout回退到上周的工作流,再对比 JSON 差异,90% 的问题都能定位到某次误操作的参数修改。
5. 从“能用”到“好用”:工作流工程化的 4 个进阶实践
当你已经能稳定跑通基础工作流,下一步就是把它变成可量产、可协作、可迭代的工程资产。这四个实践,是我服务过 12 个商业团队后总结出的“真·生产力升级”。
5.1 实践 1:参数模板化——告别“每次都要调 15 个滑块”
把工作流里所有可变参数(提示词、种子、CFG、采样步数、ControlNet 强度)抽离出来,做成独立的Input节点。ComfyUI 官方提供了PrimitiveNode,但更推荐社区插件ComfyUI-Prompt-Travel。
安装后,你会看到Prompt、Int,Float,Boolean等输入节点。把它们拖到画布左上角,然后用Reroute节点(右键 →Reroute)把它们连到对应参数位置。例如:
Prompt节点 → 连到CLIPTextEncode的text输入Int节点(命名为Seed) → 连到KSampler的seedFloat节点(命名为CFG) → 连到KSampler的cfg
这样,每次生成时,你只需在左上角区域修改这几个输入,无需再钻进每个节点里找参数。更进一步,可以导出为Workflow Template,其他设计师加载后,界面自动呈现简洁的参数面板,连模型路径都不可编辑。
5.2 实践 2:子图封装——把“人脸精修”变成一个可复用的黑盒
你不再需要每次重画FaceDetailer的 8 个节点连线。选中所有相关节点(SegmDetector→FaceDetailer→ImageScaleToTotalPixels→VAEEncode→KSampler→VAEDecode),右键 →Convert to Group。ComfyUI 会把它们打包成一个紫色方块,命名为Face Refiner。双击它,就能进入内部编辑;在外部,它只暴露image输入和image输出两个端口。这个子图可以保存为.json,拖进任何工作流复用。我们团队把“电商主图背景虚化”“产品图金属质感增强”“海报文字区域保护”都做成了标准子图,新项目接入时间从 3 天缩短到 2 小时。
5.3 实践 3:Git 版本管理——让工作流像代码一样可 review
在ComfyUI/目录下初始化 Git:
git init git add . git commit -m "init comfyui with impact pack"然后,把所有工作流 JSON、自定义节点、模型 SHA256