Z-Image Turbo v7.0本地写实人像ComfyUI工作流 本地跑写实人像这件事做过的人都清楚真正的成本从来不在点一下生成那几秒而在反复试错的循环里。云端按张计费、排队、模型版本随时可能被替换、提示词和参数每次都要重贴一遍一套流程跑顺了还好一旦中途要改风格或者换脸型前面攒的经验几乎清零。我把整条生产线搬到本地靠的是两个东西一个能在个位数步数内出可用人像的 Turbo 类模型加上 ComfyUI 这套把参数彻底暴露出来的节点式工作流。这篇就按我实际落地的顺序把 Z-Image Turbo v7.0 在 ComfyUI 里的环境、参数、工作流、提速和踩坑完整讲一遍。适合手上有一张 8G 以上显存显卡、想把人像出图变成日常生产而不是偶尔玩票的人完全没接触过节点式工具的新手也能跟着走只是前面两节建议慢一点看。需要先说清楚一件事Z-Image Turbo v7.0 这类 Turbo 发行版不同版本可能挂在不同底座上参数的最优区间会漂。本文按常见的 1024 基准写实底模来处理步数、CFG、采样器这套逻辑是通用的你手上如果拿到的是别的底座不用推翻全文只需要按第 3 节的方法把步数和CFG这两个数重测一遍其余流程照搬即可。1. 把写实人像搬回本地Turbo 模型到底改了什么1.1 蒸馏加速的实质是把采样轨迹拉直常规扩散模型出图是在噪声上一步步去噪三十步是常态五十步不稀奇。Turbo 类模型做的事情业内一般叫步数蒸馏先用一个大模型教师在大量提示词上跑出完整的采样轨迹再训练一个小一些或者结构相同的模型学生去直接拟合从这团噪声出发几步之内应该走到哪。打个比方普通模型是拿铅笔一层层描每层都修正一点Turbo 模型是速写几笔定形靠的是它见过足够多的最终形态知道哪里该重、哪里该留白。这个改动带来的收益是线性的步数从 30 降到 8单图耗时差不多降到四分之一到三分之一。但它同时带走了一些东西最明显的是多样性和细节的冗余度。同一个种子普通模型在 30 步时会给你一些意料之外的褶皱、发丝走向、背景杂物的微妙变化Turbo 在 8 步里倾向于走最典型的那条路所以你会感觉出图更稳但也更容易平。这不是模型坏了是它在训练时被要求忽略那些细枝末节。理解这一点的实际意义在于不要用调普通模型那套思路去调 Turbo 模型。普通模型出图糊了你会加步数Turbo 模型出图糊了加步数基本没用甚至可能越加越糟——因为它没学过第 15 步该干什么你强行让它走它只会把已经定好的形再磨一遍磨掉质感。Turbo 模型糊了优先动的是分辨率、采样器、CFG 和提示词密度步数放到最后再碰。1.2 ComfyUI 的价值不在免费而在每条连线都能固化图形化的扩散工具我用过不少它们的共同问题是把参数藏起来用一个质量滑块代替一堆开关。日常随便玩玩没问题一旦你要稳定产出同一风格的人像就会发现问题你没法知道上一次出的那张好图到底是哪个环节不一样。改了一个滑块背后可能同时动了采样器、调度器、CFG 缩放三样东西。ComfyUI 的做法是把整个生成过程拆成节点每个节点只干一件事节点之间用线连接数据顺着线流。这套设计的实际好处有三条都是生产向的可复现整套连线加上每个节点的参数可以存成一个工作流文件。三个月后回来加载这个文件换张卡、换个驱动出图逻辑一模一样。可插入想在采样前加一道脸部检测、想在解码后加一道放大重绘直接往线上插节点就行不用等工具作者给你开接口。可批量节点图能通过一个本地接口提交任务意味着你可以用脚本一次跑两百张跑完自动归档不用手点。提示ComfyUI 的学习曲线陡主要陡在不知道某个功能该用哪个节点。我的建议是先用最小闭环跑通一张图再一个个往里加节点每加一个就出一张对比图。一口气抄一个几十节点的大工作流出问题你根本不知道该拆哪根线。1.3 本地化真正省下的是试错次数很多人算本地部署的账算的是电费和显卡折旧结论是不如云端便宜。这个算法漏了一项试错次数。写实人像的调参本质是在一个高维空间里找那个对的点你平均要出二十张才能挑出一张能用的改风格时这个数字还要翻倍。云端按张计费的模式下你会不自觉地省着试看到七分像就收手本地跑一张图的边际成本接近于零你才敢一次挂二十个种子、五个提示词变体一起跑跑完挑。我自己统计过一段时间的返工率云端时期一套人像从需求到定稿平均要 3 轮沟通加 40 张左右的废图本地化之后废图数量涨到 80 张但定稿轮次降到 1.5 轮。总时间是短的因为等待和沟通被压缩掉了。这个账只有真跑起来才算得明白。2. 环境落地从零把 ComfyUI 和模型跑起来2.1 Python 与 PyTorch 的版本配对是第一个坑这一步出错的人最多而且报错信息往往指向别处让人误以为是显卡驱动的问题。稳妥的组合是 Python 3.10 或 3.11配对应的 PyTorch 稳定版不要追最新。Python 3.12 之后部分节点包的编译轮子还没跟上你会卡在一个跟生成毫无关系的编译错误上浪费时间。我的做法是给 ComfyUI 单独建一个虚拟环境不跟系统 Python 混。虚拟环境的好处是搞砸了直接删目录重来不会污染别的东西。大致流程是这样# 建环境3.10 为例 python3.10 -m venv comfy_env source comfy_env/bin/activate # Windows 用 comfy_env\Scripts\activate # 装 PyTorch注意版本号要和你的驱动匹配 pip install torch torchvision torchaudio --index-url 对应的稳定源 # 装 ComfyUI 本体依赖 cd ComfyUI pip install -r requirements.txt如果你用的是整合包里面自带一个嵌入式 Python那就跳过上面这套直接用它的启动脚本。整合包的优点是省事缺点是升级时容易和自带环境打架我一般只在纯新手阶段推荐跑顺了还是建议换成自己的虚拟环境。启动命令很简单进目录执行python main.py浏览器打开本地端口就能看到界面。有几个启动参数值得一开始就记住参数作用什么情况下加--lowvram更激进地分批加载模型8G 及以下显存出图报显存不足--medvram中等程度的分批10G 到 12G想同时开别的程序--fp16-vaeVAE 用半精度显存吃紧且解码不出黑图时--tiled-vaeVAE 分块解码出 2K 以上大图必加--port 8188指定端口端口被占用或者要跑多个实例2.2 模型文件放错目录节点会给你一个红框ComfyUI 的模型目录结构是硬约定放错位置不会报找不到文件而是加载节点列表里压根不显示这个模型很多人以为是模型坏了。常见的几类文件对应关系主模型大几个 G 的那个放models/checkpointsVAE 单独文件放models/vae风格或人脸微调放models/loras放大模型放models/upscale_models控制类模型放models/controlnet第一次加载 Z-Image Turbo v7.0节点面板里选模型的时候如果列表是空的先别怀疑文件损坏去目录里确认一下后缀和位置。有两个隐蔽问题值得单独提一是文件名带空格或中文。大部分情况下没事但某些节点在拼接路径时会出问题表现为加载时报一个看不懂的路径错误。养成习惯模型文件名只用英文、数字、下划线和短横线。二是模型没下完。下载中断的文件体积看着差不多加载时会报张量尺寸不匹配或者直接崩。核对一下文件大小和发布页写的数字差几十兆都算没下完。2.3 首次加载的预热与显存观察模型第一次加载会明显慢因为要从硬盘读进来再传到显存这属于正常现象第二次就快了。我习惯在第一次跑通之后开着任务管理器或者nvidia-smi观察一下显存占用记下这个基线数字。这个基线很有用。后面你每加一个节点比如加一个控制模型、加一个放大环节显存就会往上抬一截抬到某个点就会报显存不足。有了基线你能提前判断这个工作流我这卡能不能扛而不是跑到一半崩了再回头删节点。3. 写实人像的核心参数步数、CFG、采样器的三角关系3.1 步数与 CFG 必须一起调单独调必翻车这是 Turbo 模型最容易踩的坑也是最值得花时间讲清楚的一点。普通扩散模型有个东西叫无分类器引导做法是同时算一遍正向提示词和负向提示词的预测然后按一个系数把两者往外推这个系数就是 CFG。CFG 越大画面越听话于提示词但也越僵硬、色彩越饱和。普通模型常用 5 到 8。Turbo 类模型在蒸馏时教师模型的输出本身就是带引导的学生模型学的就是那个结果。所以你在使用时CFG 应该设在 1.0 附近让引导这一步几乎不施加额外推力直接采信模型自己的判断。CFG 设成 7 会发生什么模型会被你强行往外推但它在训练时从没见过这种推力下的中间状态结果就是过饱和、脸部像塑料、细节炸裂。这里有个连带结论很多人不知道CFG 等于 1 的时候负面提示词是无效的。因为引导公式里正向和负向的差被乘以 0两者等价。所以你辛辛苦苦写的一大串 lowres, bad anatomy, extra fingers在这个设置下完全不生效。这不是玄学是数学。基于这个逻辑我给的参数区间是这样以 1024 基准的写实人像为准步数CFG效果倾向适用场景41.0出图最快结构正确但质感偏平快速构图测试、批量筛种子61.0 到 1.3结构和质感比较平衡日常主力档81.0 到 1.5细节更足脸部和发丝更完整定稿出图12 以上1.0收益极小甚至质感回落一般不推荐关于 CFG 微妙上调到 1.2 到 1.5这是我在实际使用中发现的一个小技巧。稍微给一点点引导能让画面更贴合提示词里描述的服装颜色、场景氛围代价是肤色会稍微正一点少一点自然的偏色。如果你要的是那种带点环境光染色、肤色不太标准的真实感就老实待在 1.0。3.2 采样器的选择逻辑稳定优先于花哨采样器的名字一大堆但真正要理解的只有两类一类是单步求解器欧拉系列一类是多步高阶求解器dpmpp 系列。单步求解器每一步只参考当前位置的斜率简单直接配合少步数的蒸馏模型非常契合。多步高阶求解器会参考前几步的走势做外推在三十步的常规模型上是画质利器但在四到八步这种极短轨迹里它没有足够的历史点做外推反而容易引入伪影。我的建议是步数个位数优先用欧拉系列。如果出图总感觉细节不够实可以试 dpmpp 系列配一个简单的调度器但别指望有质的飞跃。调度器scheduler管的是噪声强度怎么衰减蒸馏模型通常配 simple 或者 sgm_uniform 这类均匀衰减的配 karras 那种两头陡的容易在小步数下欠采样。这块没有标准答案因为不同底座的训练细节不同。我的做法是固定种子、固定提示词把四五个采样器各出一张排在一起看选那个脸部结构最不容易崩的然后就不再折腾了。人像这个题材脸部结构的重要性远高于背景的细微质感差异。3.3 分辨率不是越大越好超了会重影写实人像的分辨率有个隐形天花板。底座模型在训练时见过的分辨率区间是有限的1024 基准的模型竖图 832×1216 是很稳的横图 1216×832 同理方图 1024×1024 也可以。你一旦推到 1536 以上模型没见过这个尺寸下的构图分布就会出现典型的重影画面里冒出第二个头、多出一截手臂、背景重复出现同一件家具。正确的做法是两段式先用 832×1216 出一张结构正确的底图再用放大节点把尺寸拉到 1.5 到 2 倍然后用一个低重绘幅度denoise 0.35 到 0.45过一遍采样让模型在这个更大的画布上补细节。这样既拿到了大图又避开了直接大尺寸生成的构图崩坏。重绘幅度的取值很有讲究这是第二个值得记的参数0.2 到 0.3只做轻微锐化和纹理补充画面结构完全不变0.35 到 0.45能补足皮肤纹理、发丝、衣物褶皱脸型基本不变0.5 以上开始改脸型和五官比例慎用0.7 以上等于重新画一张只剩大致的构图和色调我一般用 0.4偶尔脸部细节不够时单独对脸部区域用 0.45。4. 工作流搭建从一张图到一条可复用的管线4.1 最小闭环五个节点先跑通一张别一上来就抄大工作流。最小闭环只有这么几个节点串起来就能出图模型加载节点选择 Z-Image Turbo v7.0两个文本编码节点一个接正向提示词一个接负向虽然 CFG 为 1 时负向无效但节点要留着后面调高 CFG 时用得上一个空 latent 节点设宽高和批次一个采样器节点把模型、正负条件、latent 接进去设步数、CFG、采样器、调度器、重绘幅度一个 VAE 解码节点接采样器输出再接一个保存图像节点跑通这一张你就理解了数据流向latent 是画布采样器是画笔解码是把 latent 翻译成像素。后面所有的复杂工作流本质都是在这个骨架上加分支。保存节点的文件名前缀建议一开始就规范起来比如portrait_日期_序号。这个习惯在跑批量的时候能救命不然输出目录里一堆无意义的数字文件名你根本分不清哪张是哪次实验的。4.2 加一道脸部修复解决远景糊脸写实人像最常见的问题不是整体画质差而是脸在画面里占比小的时候糊。832×1216 的图如果构图是半身或者全身脸部可能只占 150 像素宽模型的细节预算分到脸上就不够了。解决办法是检测出人脸区域单独裁出来放大用低重绘幅度重画一遍再贴回去。ComfyUI 生态里有现成的检测加修复节点包装好之后大概是这么个链路图像输入 → 人脸检测给出人脸框→ 按框裁剪 → 放大到 512 或 768 → 送进采样器重绘 → 缩回原尺寸 → 贴回原图。关键参数是重绘幅度和检测阈值重绘幅度脸部区域我用 0.4 到 0.45。太低补不出细节太高会把人脸改成另一个人。检测阈值默认值往往检不全侧脸可以适当调低一点但如果调太低会把背景里的圆形物体误判成人脸去重绘出现诡异的模糊斑块。这就是第 7 节要讲的误检问题。提示词修复节点最好单独给一段只描述脸部的提示词比如肤质、光位、表情不要沿用整图的提示词否则容易把服装描述也带进去导致脸部重绘时出现衣领之类的奇怪元素。4.3 批量出图批次和队列是两回事很多人把批次和多次提交搞混。采样器节点上的批次参数是在一次采样里同时算 N 张它们共享同一份模型加载速度上有优势但显存占用是叠加的8G 卡上批次开 4 就差不多到顶了。而队列是提交 N 个任务一个一个算。显存占用不变但每个任务之间要重新加载一次条件。实际测下来如果你的显存够批次 2 到 4 加多次队列的组合最划算显存紧张就老老实实批次 1靠队列堆数量。种子管理是批量出图的核心。我通常这么做先固定一个种子把提示词和参数调到满意这叫锚点然后把控制方式设成随机一次挂 20 个任务让它跑出 20 个变体挑出 2 到 3 个种子记下来再把这些种子锁定微调提示词细节这套流程的本质是先求广再求深。反过来一上来就死磕一个种子调提示词你会陷入局部最优出不来。4.4 把工作流变成接口才是效率的分水岭节点图画顺了之后最后一步是把它存成一个可被程序调用的格式也就是导出成接口格式的 JSON。导出的文件里包含了所有节点的参数和连接关系你用一段脚本往本地端口发一个请求把里面的提示词和种子替换掉就能批量提交。这件事的实际收益在于你可以把生成这一步嵌到别的流程里去。比如先用一张表格管理两百条人像需求每条有外貌描述、服装、场景用脚本读表格、拼提示词、提交任务、把输出按需求编号重命名归档。这一套跑起来一个人一天处理几百张人像需求是可行的而且每张的参数都可追溯。5. 提示词写法写实人像要的是结构化描述5.1 分层写别堆词写实人像的提示词效果好坏跟词多词少关系不大跟结构关系很大。我习惯按这个顺序分层每层两三个短语就够主体年龄区间、性别、人种特征写得笼统一点更稳太具体的民族描述容易触发模型的不稳定区域外貌脸型、发型、发色、肤色质感服装材质 颜色 款式材质放前面因为材质决定光影姿态表情头部朝向、视线方向、嘴角状态光线这是写实感的关键写清楚是侧逆光、窗户自然光、还是顶部柔光箱镜头焦段、光圈、景深比如 85mm 定焦、浅景深质感皮肤纹理、毛孔、细微瑕疵背景环境描述越简越好背景一复杂就容易抢戏举个具体的写法英文提示词在多数模型上更稳portrait of a woman in her early thirties, oval face, shoulder-length dark brown hair, matte skin with visible pores, wearing a charcoal wool coat, head turned three quarters to the left, calm expression, soft window light from the right, gentle shadow falloff, 85mm lens, shallow depth of field, natural color grading, plain concrete wall background注意我没有写 8k, ultra detailed, masterpiece 这类词。在 Turbo 模型上这类质量词的作用非常有限甚至有害——它们会把模型往过度锐化、过度饱和的方向推反而破坏写实感。写实的关键是具体的物理描述什么光、什么材质、什么焦段不是形容词的堆砌。5.2 负面提示词的边界它救不了结构问题前面说过CFG 为 1 时负面提示词无效。即便你把 CFG 调到 1.3负面提示词能起的作用也有限它主要是压掉一些明显的色彩和质感偏差比如过饱和、过度锐化、塑料感。它做不到的事情要讲清楚负面提示词不能修复手部结构、不能修复多余的肢体、不能保证构图正确。这些是模型在当前分辨率下的能力边界靠写词压不住。手部出问题正确做法是降低画面里手部的占比、用局部重绘单独修、或者用控制类节点约束姿态。写十行负面词指望它自动修手是浪费时间。5.3 权重的用法与常见误区多数文本编码节点支持给词加权重语法通常是给短语加括号再加数字。有两个误区一是权重给得太猛。加到 1.5 以上画面容易崩出现颜色溢出或者结构扭曲。我的经验是权重只在 0.8 到 1.3 之间微调超过这个范围就说明你的提示词本身没写对该改词而不是加权重。二是用权重去删除东西。想让画面里没有某个元素正确做法是把它从正向提示词里拿掉而不是加个负权重。负权重在这类模型上表现很不稳定。6. 显存与速度让中端卡也能跑出可用产能6.1 显存不够时的三层降级显存不足的表现是采样中途报错退出或者系统卡死。降级有三层按代价从小到大排第一层降精度。半精度是默认如果还紧张可以用更低比特的量化版本模型。量化的代价是细节会损失一点尤其皮肤纹理但在人像这个题材上大部分人看不出明显区别。第二层降分辨率。从 1024 基准降到 768 基准显存占用大概能降三成。代价是脸部细节变少需要靠后面的放大重绘补回来。第三层加启动参数。用分批加载的模式把不参与当前计算的模块挪到内存里。代价是速度变慢因为每次要在内存和显存之间搬数据。这三层可以叠加。我的建议顺序是先试第三层不影响画质只影响速度不行再第一层最后才动分辨率。6.2 速度参考与瓶颈定位给一组粗略的参考值帮你判断自己的机器是不是跑在正常区间。以 8 步、1024 基准、批次 1 为例显卡档位单图耗时参考体验入门级 8G8 到 15 秒可接受适合批量挂机中端 12G4 到 8 秒顺手能边跑边干别的高端 16G 以上1 到 3 秒基本感觉不到等待这些数字受驱动版本、系统负载、模型精度影响很大差一倍都正常只用来判断量级。如果你的耗时比同档位参考值高出三四倍通常是这几个原因没走显卡在 CPU 上跑这个最常见看启动日志里有没有显卡识别信息、显存不足触发了分批加载、或者首次加载的预热还没过。6.3 提高吞吐的几个实操手段除了换卡还有几个不花钱的手段关掉实时预览。采样过程中的预览图会占用一部分算力去解码批量跑的时候关掉能省一点。控制并发数。同时开多个实例抢同一张卡总吞吐不会提升反而因为显存竞争变慢。一个实例排队跑效率最高。把模型常驻显存。有些启动参数可以让模型加载后不被卸载连续出图时省掉重复加载的时间。显存够的话值得开。输出格式选无损。批量出图时如果只存压缩格式后期要做局部重绘还得再转一次反而费事。7. 踩坑排查按症状定位别乱改参数7.1 症状对照表我把遇到过的问题按症状整理了一下排查时对照着看比瞎试快得多症状最可能的原因处理方式输出全黑或全灰VAE 与模型不匹配改用模型内置 VAE或换匹配的 VAE 文件脸部像塑料、过饱和CFG 设太高降到 1.0 到 1.3画面糊、加步数无效分辨率过高或提示词太笼统降到 1024 基准补光位和材质描述出现两个头、重复肢体分辨率超出训练区间降回 832×1216用放大重绘出大图采样中途报显存错误批次或分辨率超载批次降到 1加分批加载参数模型列表里看不到文件目录放错或文件没下完核对路径和文件体积人脸修复后出现模糊斑块检测阈值太低误检提高阈值或限制最小人脸尺寸换节点后连线报错数据类型不匹配检查输出是图像还是 latent7.2 排查顺序先看日志再动参数大部分人的第一反应是改参数但正确的第一步是看控制台日志。日志里会明确告诉你模型加载了哪个文件、走了哪个设备、在哪个节点报的错。这三条信息能砍掉一半的瞎猜。举个例子出图全黑这个症状可能的原因有七八个但看日志如果发现 VAE 是从外部目录加载的而不是模型内置的那基本就能锁定是 VAE 不匹配。这时候你去改步数、改提示词改一天也改不出来。第二步是最小化复现。把工作流删到只剩最小闭环跑一张。能出图说明问题出在你加的那些节点上一个个往回加加到哪一步出问题就是哪一步。这个方法笨但百试百灵。第三步才是动参数。而且一次只动一个动完立刻跑图对比。同时改三个参数出图变好了你也不知道是谁的功劳下次遇到同样的问题还是不会。7.3 几个不容易想到的隐蔽坑坑一模型和 VAE 的隐性冲突。有些模型内置了 VAE你又在加载节点里外挂了一个两者打架表现为色彩发灰或者整体对比度异常。判断方法是把外挂 VAE 断开只留内置的看是否恢复正常。坑二更换模型后没有重新加载。在同一个会话里换了主模型文件但采样器节点缓存了旧的条件。表现是出图风格完全不对像是换了个模型。解决办法是改完模型后重新提交一次或者重启会话。坑三放大环节的尺寸算法。放大节点的倍率是浮点数1.5 倍后如果得到的是奇数尺寸某些解码环节会出问题表现为图像边缘出现一条错位的线。稳妥做法是让放大后的宽高都取偶数。坑四控制类节点的尺寸必须和 latent 严格一致。用姿态或边缘约束的时候控制图的尺寸和生成的画布尺寸差几个像素就会出现整体位移或者约束失效。这个坑很隐蔽因为不报错只是效果不对。8. 稳定产出把一次性成功变成可重复的工艺8.1 版本锁定比参数优化更重要这一条是我踩了最多次才明白的。模型会更新节点包会更新驱动会更新任何一环变了你昨天调好的参数今天可能就不灵了。所以每次跑出一套满意的结果我都会做三件事记录主模型的文件名和体积有哈希更好导出当前工作流的接口格式文件按日期命名存档把当次的提示词、种子、步数、CFG 记在一个文本文件里这三样东西加起来才叫可复现。只存一张图没有意义因为你复现不出来。8.2 素材库要按可检索来建不是按好看来建出图多了之后找素材会变成新的瓶颈。我的目录结构是这样的按用途分大类人像、场景、参考按日期分小类文件名里带上关键特征比如portrait_窗光_羊毛外套_01。这样三个月后要找那种窗边光线的半身像靠文件名搜索就能定位不用一张张翻。提示词同样建一个库按结构层拆开存。主体描述一套、光线描述一套、镜头描述一套需要的时候拼起来。这套做法看起来笨但比每次从零写要快得多而且能保证风格的一致性。8.3 定期抽检别让废图悄悄堆积批量跑图的副作用是废图率会上升因为你不像单张出图那样每张都仔细看。我的习惯是每跑完一批随机抽 20% 出来看重点看三样脸有没有崩、手部结构对不对、皮肤质感是不是还是那种塑料感。如果抽检里超过三成有明显问题说明参数漂了需要回去重新校一次锚点。抽检还有一个作用是帮你发现缓慢劣化。有时候不是某一批出了问题而是一个月下来整体质量在往下走单看每一批都还行。定期抽检能把这个趋势抓出来。最后分享一个我自己的体会本地出图这件事真正的门槛不在装环境也不在调参数而在于你能不能接受它是个概率游戏。同一套参数出十张里有两张能用这是正常的不是你哪里设错了。把心态放在提高可用率而不是保证每张都好整件事会顺畅很多。我现在的可用率大概稳定在四分之一到三分之一之间靠的不是某一个神奇参数而是把上面这些流程跑熟让每一次失败都能快速定位到原因。