Midjourney局部崩坏?用ComfyUI免提示词修复工作流
发布时间:2026/9/1 9:53:53 作者:尧图编辑部 阅读量:1,286

你大概也遇到过这样的情况在Midjourney里生成了一张构图、光影、氛围都让人满意的图放大一看手部关节扭成一团五官边缘也像揉碎的纸片一样。第一反应是改提示词往Prompt里塞“perfect hands”“detailed face”效果时好时坏。后来我把Midjourney出的图直接丢进ComfyUI用一个不需要修饰词的工作流做局部修复稳定多了。下面这篇内容就围绕这个思路展开讲清楚破碎细节是怎么产生的、为什么提示词修不好、ComfyUI怎么通过局部重绘解决以及搭建工作流时容易踩的坑。1. 破碎细节不是丑是生成模型的结构性失控1.1 Midjourney为什么会在局部“碎掉”目前主流的AI绘画生成基本都建立在扩散模型之上。它不是从一张空画布开始直接“画出”整张图而是从一个随机噪声出发经过几十步去噪逐步把图像轮廓、结构、纹理还原出来。这个过程的优点是全局语义把握得非常好构图、光影、氛围往往很自然缺点是局部结构缺少显式的逻辑约束。手为什么总是画崩因为在隐空间里手指关节的排列是一个非常精确的几何结构而模型在去噪时主要靠语义概率推断并不知道“这里应该有几个指节、关节怎么弯曲”。当语义信息和局部结构冲突时破碎、扭曲、粘连就会冒出来。Midjourney已经做了很多优化但局部结构依然不能保证绝对稳定。理解这一点很重要它决定了修复思路不能停留在“换一批关键词”而要从生成机制上去绕开这个短板。1.2 提示词为什么修不好这种问题很多人会在Midjourney提示词里写“perfect hands”“detailed face”试图通过描述让模型把细节画好。但提示词是一个语义信号它告诉模型的是“画面里有完美的手”而不是“这只手的每个关节坐标应该怎么排”。如果你把这个词的权重加得过高模型很可能把整张图的手反复重画结果只是换了一种崩法甚至把场景里其他内容带偏。再加上Midjourney每次采样都有随机性同一个提示词你可能要抽很多次才会遇到一张手部正常但其他部分也满意的图。这里有一个容易被忽略的细节提示词对局部结构的控制能力和生成分辨率强相关。Midjourney早期生成阶段的潜在空间分辨率并不高提示词很难在低分辨率的隐空间里区分“这只手指弯曲了一点”这种微小差异。这就是为什么靠加词修局部本质上是在碰运气。1.3 把思路从“重新生成”切换到“局部编辑”如果一张图只有某个局部坏了你真正需要的不是“再生成一张”而是“只改这一块”。这也是“免提示词修复”这个工作流成立的前提把Midjourney的输出当作半成品借助ComfyUI把它当成图像编辑器来用。先用mask标出破碎区域再让局部模型只在这个区域内重新生成最后把结果融合回去。这个过程通常用Image Composite Masked这样的节点完成也可以配合ControlNet或Inpaint专用模型来增强约束。这个认知转变是最关键的。从“写更长的提示词”到“把图丢进ComfyUI修”并不是否定Midjourney而是承认没有哪个生成模型能保证局部结构永不破碎所以需要工具链来兜底。2. ComfyUI“免提示词修复”的原理用图像约束替代文本约束2.1 工作流的本质定位、重绘、融合“免提示词修复”工作流虽然叫“免提示词”但它不是没有逻辑。它把修复过程拆成了三件事定位、重绘、融合。定位就是告诉模型“哪里坏了”通常用mask实现重绘就是让模型只在mask覆盖的区域内重新生成融合就是把重绘区域和原图合成到一起让整体看起来是同一张图。用户在ComfyUI里做的事情就是连接这些环节而不是设计一段漂亮的提示词。下面是一个最小节点连接示意它不等于唯一正确写法但可以作为起点Load Image - VAE Encode - Set Latent Noise Mask - KSampler - VAE Decode - Image Composite Masked大多数ComfyUI里的局部重绘工作流都遵循这个骨架。不同整合包、不同模型、不同自定义节点会让细节有一些差异但核心链路基本一致。2.2 “免提示词”到底免的是什么严格说ComfyUI本地重绘很少能把提示词完全设成空白。因为Stable Diffusion类的模型在生成时通常需要接收一个文本条件完全空文本会让模型缺乏整体风格约束。所以更精确的说法是免掉的是那些用于描述修复目标的复杂提示词而不是免掉一切文本。也就是说你不再需要写“perfect hands, detailed fingers, realistic skin texture”这种又长又不稳定的描述。你只需要维持原图整体的风格比如“photorealistic, high detail”这样简单的词甚至可以把原来Midjourney提示词里描述局部细节的部分去掉。模型真正依靠的是已经被编码进潜在空间的图像内容。它会根据mask周围的颜色、光照、纹理推断缺失区域应该长成什么样。原图给出的信息比那句“perfect hands”可靠得多。这就是“用图像约束替代文本约束”的含义。文本描述解决不了像素级的结构错误但图像本身可以。当模型看到“这一块被挖掉了周围的皮肤是这种颜色、这个方向、这个明暗”时它补出来的结构通常会比靠一个词去猜更合理。2.3 原图、mask、denoise三者的关系整个工作流中有一个三角关系容易被忽略原图代表你不想动的部分mask代表你想动的区域denoise代表你想让模型“动多少”。用手术来打比方原图是病人的身体mask是手术切口denoise是医生开放操作的程度。如果mask太大相当于在脸上开了一刀结果全变了如果denoise太高即便切口很小模型也可能把周围的纹理、风格全部带走。反过来denoise太低则可能只是把边缘磨平结构问题没有真正修复。所以在后面的参数调整里最需要花心思的就是“让mask尽量小让denoise尽量匹配破碎程度”而不是盲目追求效果炸裂。这个三角关系也解释了为什么建议“免提示词”当你把提示词对生成内容的影响降到最低时原图和mask对结果的控制权重就会上升整个工作流变得可预期。3. 从零搭一个最小可用修复工作流3.1 环境准备ComfyUI、模型、节点首先准备一台能跑本地模型的电脑。ComfyUI本身是一个基于节点的Stable Diffusion工具国内社群常用的整合包可以省掉不少环境配置时间。如果你喜欢手动安装官方文档也够用。这里不建议一开始就追求“生产级”能加载模型、能出图就足够了。其次要有一个适合局部重绘的模型。SD1.5系列对inpaint任务的支持比较成熟相关工作流也最多SDXL系列在细节和真实感上更好但局部重绘的额外约束可能更多。无论你选哪一种建议先固定一个模型来测试工作流不要频繁切换否则你很难判断某个参数变化到底是工作流引起的还是换模型引起的。节点方面最基础的核心节点包括Load Image导入Midjourney生成的图。VAE Encode把图像编码到潜空间。Set Latent Noise Mask给潜空间图附加一个修复mask。KSampler在潜空间内进行去噪采样。VAE Decode把修复后的潜空间解码回像素图。Image Composite Masked把修复区域和原图合成。如果你觉得手动绘制mask不方便可以额外安装Segment Anything这类分割节点但放在第二步再说。建议前期只装必要节点。很多ComfyUI环境问题都出在自定义节点版本冲突上。3.2 关键参数怎么调denoise、采样器、步数参数是这类工作流最容易迷惑人的地方。下面给一组起点参数不代表所有模型都适用但通常能作为第一次验证的基线参数建议范围说明denoise0.4~0.6起步修复破碎细节常见区间太低只磨皮太高重画整块steps20~30局部重绘不需要跑太多步数CFG5~7偏低有利于保持原图色彩偏高容易出现脏色mask羽化边缘8~16像素降低接缝感特别提醒denoise不是越高越好。很多人第一次修复手部为了让“坏手”彻底改变直接把denoise拉到0.85结果手虽然不扭了但整张脸也变形了。合理顺序是先用0.45左右跑一次观察mask区域内发生了什么再逐步微调。采样器方面DPM 2M Karras或Euler a这类常见采样器都能用。不同版本命名不同选择一种你熟悉的即可不用跟风换最火的采样器。3.3 最小运行示例与验证路径假设你已经有一张Midjourney出的图手部破碎。具体操作路径大致是用Load Image载入这张图。手动绘制一个尽可能小的mask覆盖破碎的手部区域。将原图VAE Encode后接入Set Latent Noise Maskmask也传入这个节点。设置KSampler的denoise为0.45跑一次。将输出VAE Decode再和原图通过Image Composite Masked合并。对比mask区域在修复前后的变化。这个顺序看似简单但每一步都可能出问题。验证路径上我的建议是不要看预览小图直接把输出放到100%用眼睛检查手部结构是否合理再看手部和袖口、背景的接缝有没有明显的“补丁感”如果颜色不对再回头调整denoise或羽化值。注意单次跑通只代表流程没有断不代表参数已经合格。真正的验收标准是“