用网页版生图工具最头疼的不是出图慢,是"下一张就不一样了"。好不容易调出一个满意的构图和画风,换个 prompt 或重新生成,角色长相变了、风格漂了,没法复现。Midjourney 的 --seed 能做一定程度的锁定,但一旦要精细控制角色五官、固定画师笔触、跨多张图保持同一主角,网页版基本无解。这也是为什么专业玩家绕开网页版直接上 ComfyUI——它把生图拆成可连接的节点,每个参数都握在自己手里,配上固定 seed 和参考图,能做到"同参数同结果"。
这篇是和本站 ComfyUI 资源篇(专业玩家为什么不用网页版生图)配着的实战 SOP,走一遍从安装到复现一致风格的全流程:装 ComfyUI、放对模型、搭基础 txt2img 工作流、用固定 seed 锁结果、再用 LoRA 和 IPAdapter 进一步锁定风格和角色。每步给真实命令和可复制的参数,最后附踩坑记录和 FAQ。读到这篇说明你已经受够了网页版的随机性,准备把控制权拿回自己手里--下面每一步都能照着敲,跑不通的地方看踩坑。
一、一致风格为什么难:定位与思路
先把问题讲透,免得选错技术路线。生图工具的"不一致"分三层,解决手段不同:
- 结果不可复现:同样 prompt 跑两次出两张完全不同的图。根因是采样起始噪声随机,解法是固定 seed。这是最底层的一致性,任何工作流都要先做。
- 风格漂移:换 prompt 主题后画风跟着变,比如从写实滑向卡通。解法是 LoRA(锁画风)或 IPAdapter(用参考图迁风格)。
- 角色不固定:同一角色在多张图里长相、发色、服饰不一致。这是最难的一层,解法是训练角色专属 LoRA,或用 IPAdapter FaceID 把一张参考脸"贴"到每张图上。
本 SOP 按难度递进:先打通"固定 seed 复现",再加 LoRA 锁风格,最后上 IPAdapter 引参考图。三层叠加,才能真正做到"一个角色、一种画风、跨图稳定"。
二、装:ComfyUI 安装三选一
前置条件:NVIDIA 显卡(A 卡也能跑但生态差一截)、Python 3.10 以上、Git。ComfyUI 官方提供三种装法,按你技术水平选:
# 方式一:comfy-cli(官方命令行,跨平台,推荐给有 Python 基础的人)
pip install comfy-cli
comfy install # 自动装 ComfyUI 本体、依赖、虚拟环境
comfy launch # 启动,默认开在 http://127.0.0.1:8188
# 方式二:Windows 便携版(自带 Python 3.11,零环境配置,推荐小白)
# 从 docs.comfy.org 下载 ComfyUI_portable_windows,解压后双击运行
# run_nvidia_gpu.bat 即可启动
# 方式三:ComfyUI Desktop(官方桌面客户端,带模型管理界面)
# 从官网下载安装包,一键安装,适合不想碰命令行的人启动后浏览器打开 http://127.0.0.1:8188,看到节点画布就说明装通了。第一件事是装 ComfyUI Manager——它是后续装自定义节点(IPAdapter 等)的入口。装法:进入 ComfyUI/custom_nodes 目录,git clone Manager 仓库,重启 ComfyUI;之后右侧菜单栏会多出 "Manager" 按钮,点进去就能用 "Install Custom Nodes" 搜索安装任意社区节点。
踩坑提醒:便携版解压路径不要含中文和空格,否则加载模型时偶发报错;comfy-cli 和便携版不要装在同一目录混用,配置会打架。
三、载:放对模型与底模选型
ComfyUI 不会自己找模型,你得手动把底模(checkpoint)放进正确目录:
ComfyUI/
├── models/
│ ├── checkpoints/ # 底模放这里(.safetensors)
│ ├── loras/ # LoRA 放这里
│ ├── ipadapter/ # IPAdapter 模型放这里
│ └── vae/ # VAE(部分模型自带可不放)
└── custom_nodes/ # 自定义节点(如 ComfyUI_IPAdapter_plus)底模选型直接决定风格上限,现在主流两个:
- SDXL:1024×1024 原生,生态最成熟,LoRA 和 IPAdapter 模型多,显存 8G 可跑,是一致风格工作流的首选起步。推荐
sd_xl_base_1.0或其微调版。 - Flux:画质和 prompt 理解强于 SDXL,但显存吃紧(12G 起步,1.0 优化版可压到 8G),且 Flux 的 LoRA / IPAdapter 生态比 SDXL 晚一截,适合画质优先、愿意折腾的人。
选型建议:第一套一致风格工作流用 SDXL 打通全链路,跑顺了再迁 Flux。别一上来就 Flux,模型少、显存吃紧,调参时多一倍变量。另外底模放对目录只是第一步,VAE 也要配齐--SDXL 自带 VAE 但部分微调版会抽离 VAE 需要单独放 models/vae/,缺 VAE 出图会发灰发糊,这是新手常踩的第一个坑。
四、搭:基础 txt2img 工作流 + 固定 seed
这一步搭出能复现的最小工作流。ComfyUI 默认画布就自带一个 txt2img 模板,我们基于它改。节点连线顺序如下:
- CheckpointLoaderSimple(加载底模)→ 输出 MODEL、CLIP、VAE
- CLIPTextEncode ×2(正向 / 负向 prompt)→ 接 CLIP
- EmptyLatentImage(设宽高,如 1024×1024)→ 输出空 latent
- KSampler(核心采样)← 接 MODEL、正向、负向、latent
- VAEDecode ← 接 KSampler 的 latent + VAE → 输出图像
- SaveImage ← 接图像
关键在 KSampler 的六个参数,这是复现一致性的核心旋钮:
| 参数 | 推荐值 | 作用 |
|---|---|---|
| seed | 固定一个数(如 42) | 采样起点,固定 = 结果可复现 |
| steps | 20-30 | 步数,越多越细但越慢,25 是平衡点 |
| cfg | 5-8 | 提示词遵循强度,太高过曝,太低跑偏 |
| sampler_name | dpmpp_2m | 采样器,dpmpp_2m 出图稳;euler 快;euler_ancestral 细节多但更随机 |
| scheduler | karras | 噪声衰减计划,karras 配 dpmpp_2m 是口碑最稳组合 |
| denoise | 1.0 | txt2img 固定 1.0;img2img 改图用 0.3-0.7 |
记住一句话:想要复现,seed 必须固定。 默认 KSampler 的 seed 是随机的(点 "randomize"),生成完一张满意的图,记下它的 seed,把控制项从 "randomize" 改成 "fixed",填回这个 seed,重跑就能出几乎一样的图。这是所有一致性工作的地基。
下面是这套基础工作流的 API JSON 片段(可直接保存为 .json 后用 ComfyUI 的 "Load" 拖入,节点 ID 对应默认模板):
{
"3": {
"class_type": "KSampler",
"inputs": {
"seed": 42,
"steps": 25,
"cfg": 7,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
"denoise": 1.0,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
}
},
"4": { "class_type": "CheckpointLoaderSimple", "inputs": { "ckpt_name": "sd_xl_base_1.0.safetensors" } },
"5": { "class_type": "EmptyLatentImage", "inputs": { "width": 1024, "height": 1024, "batch_size": 1 } },
"6": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["4", 1], "text": "a girl with red hair, cinematic photo, highly detailed" } },
"7": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["4", 1], "text": "blurry, lowres, deformed" } },
"8": { "class_type": "VAEDecode", "inputs": { "samples": ["3", 0], "vae": ["4", 2] } },
"9": { "class_type": "SaveImage", "inputs": { "images": ["8", 0], "filename_prefix": "consistent_style" } }
}跑通这一步,你已经能复现单张图。但换 prompt(比如把红发换成金发),画风仍可能漂。下一节解决这个。
五、锁:LoRA 固定风格或角色
LoRA(Low-Rank Adaptation)是挂载在底模上的轻量微调,几十到几百 MB,能把特定画风或角色"焊"在模型上。用对 LoRA,换 prompt 换构图,画风都纹丝不动。
装 LoRA:把 .safetensors 文件放进 models/loras/ 目录,刷新 ComfyUI 即可。在画布上加一个 Load LoRA 节点,插在 CheckpointLoaderSimple 和 KSampler 之间:
CheckpointLoaderSimple → Load LoRA → KSamplerLoad LoRA 的关键参数:
- lora_name:选你放的 LoRA 文件
- strength_model / strength_clip:强度,1.0 是原效果,0.8 偏弱,1.2 过强;通常 0.7-1.0,调太高会出现伪影、画面崩坏
想锁画风,就找一个画风 LoRA(如油画、赛博朋克、水墨);想锁角色,就找一个特定角色 LoRA(CivitAI 上大量现成角色 LoRA)。prompt 里再带上 LoRA 对应的触发词(LoRA 页面会标明,如 chara_aria),效果更稳。
踩坑提醒:LoRA 要和底模版本匹配——SDXL 的 LoRA 只能配 SDXL 底模,SD1.5 的只能配 1.5,混用直接报错或出废图。下模型前先看清它给哪个底模。
六、引:IPAdapter 用参考图迁移风格
LoRA 解决"我要这个画风",但有时候你只有一张参考图,没有现成 LoRA,想让它"就照着这张图的风格/角色来画"。这时上 IPAdapter。它的工作原理是提取参考图的图像特征,注入到生成过程里,引导模型朝参考图的风格或角色靠拢,不需要训练。
装 IPAdapter:
- 经 ComfyUI Manager 搜索
ComfyUI_IPAdapter_plus(作者 cubiq),点 Install,装完重启 ComfyUI。 - 下载 IPAdapter 模型(如
ip-adapter-plus_sdxl_vit-h.safetensors),放进models/ipadapter/目录。
注意:IPAdapter 模型要和底模版本对应——SDXL 的底模配 SDXL 版 IPAdapter,SD1.5 配 1.5 版,版本错配会报错或效果归零。
搭工作流:在第四步基础流程上加一个 Load Image(载入参考图)和 Apply IPAdapter 节点:
Load Image → Apply IPAdapter → KSampler (MODEL 输入端)Apply IPAdapter 的核心参数 weight(权重)控制参考图影响强度,0.5-0.8 是稳妥起点;太高会让生成图变成参考图的复制粘贴,太低又没效果。
进阶玩法:锁角色五官用 IPAdapter FaceID(专门提取人脸特征),比通用 IPAdapter 角色一致性强得多。配合固定 seed,能做到同一角色在不同场景下长相高度统一——这正是网页版做不到的。实际操作中,IPAdapter 的权重和 LoRA 的强度会叠加影响,两者同时开时建议各自调低 0.2 左右,否则风格信号过载,画面容易出现伪影或过度饱和。先单独调通 IPAdapter 再加 LoRA,比两个一起开更省事。
七、踩坑记录
坑一:seed 没固定就以为是"稳定风格"。 很多新手出图满意后直接改 prompt 重生成,发现全变了,以为是模型不行。其实是 seed 在 randomize 模式下每次都变。第一步永远是:满意一张,记 seed,改 fixed,重跑验证。
坑二:LoRA 和底模版本不匹配。 SDXL 的 LoRA 挂到 SD1.5 底模上,要么报维度错误,要么出废图。下模型前在 CivitAI / 页面看清它标注的底模版本,别只看缩略图好看就下。
坑三:IPAdapter 模型放错目录或版本错配。 必须放 models/ipadapter/(不是 models/loras/),且 SDXL 底模只能配 SDXL 版 IPAdapter。装完没效果,九成是路径或版本问题。
坑四:显存爆掉(Out of Memory)。 SDXL 在 8G 卡上跑 1024×1024 已接近极限,再加 LoRA 和 IPAdapter 容易爆。解法:在 KSampler 后接一个 VAEDecode 前的 Latent 上开 --lowvram 启动参数,或把分辨率降到 768×768 再放大,别硬扛大分辨率。
坑五:装完自定义节点不重启。 ComfyUI Manager 装完 IPAdapter 等节点,必须重启 ComfyUI 才能加载新节点。不重启就去找 Apply IPAdapter 节点,发现搜索不到,以为装失败又重装一遍——其实就差一个重启。
坑六:sampler 和 scheduler 乱搭。 不是所有采样器都配 karras。dpmpp_2m + karras 是公认稳的组合;euler_ancestral + normal 也常见。但乱搭(如 ancestral 配 karras)有时出图噪点异常。没把握就用 dpmpp_2m + karras 这个默认组合。
八、常见问题 FAQ
Q1:跑 ComfyUI 最低要多大显存? SDXL 底模 8G 显存可起步(1024×1024,25 步),但加 LoRA 和 IPAdapter 后建议 12G 以上。Flux 1.0 优化版 8G 能跑,全量版要 16G+。显存不够就用低显存启动参数或降分辨率,别硬扛。
Q2:不会写代码能用 ComfyUI 吗? 能。ComfyUI 是可视化拖拽连节点,不写代码。门槛在理解节点关系,不在编程。建议用 Windows 便携版零环境配置启动,再从默认 txt2img 模板改起,跟着本 SOP 走一遍就入门了。
Q3:怎么固定一个角色的长相,跨多张图都不变? 最稳的是训练一个该角色的专属 LoRA(CivitAI 上有大量现成角色 LoRA 可直接用),配合固定 seed 和触发词。没有 LoRA 就用 IPAdapter FaceID,喂一张该角色的参考脸,每张图都注入这张脸的特征。两者叠加效果最好。
Q4:出图模糊怎么办? 三查:一查 steps 是否太低(低于 15 偏糊,建议 20-25);二查 cfg 是否过低(低于 4 会模糊发散);三查分辨率——512×512 在 SDXL 上必然糊,SDXL 原生 1024×1024,至少 768。另外 VAE 没接对也会糊,确认 VAEDecode 接的是底模自带的 VAE。
Q5:用 ComfyUI 出的图能商用吗? 看你用的底模和 LoRA 的授权。SDXL 基础模型(Stability AI 发布的 sd_xl_base)允许商用,但社区 LoRA 各有授权,CivitAI 上会标注 "Commercial" 或 "Non-Commercial",下之前看清楚。Flux 的 dev 版限非商用,pro 版商用。涉及商用务必查每个模型的许可,别想当然。
参考来源