1-2 高相似度ControlNet图生图:一张参考图,线稿锁定轮廓,生成同风格新图

2026-08-26 15:58 · 58 阅读
1-2 高相似度ControlNet图生图:一张参考图,线稿锁定轮廓,生成同风格新图

准备工作:这篇教程要用到的材料

本教程演示的工作流是「1-2_[图像生成]_高相似度ControlNet图生图」,位于工作流大合集的 01 图像生成 分类目录下。它的作用一句话概括:上传一张参考图,AI 生成一张主体内容由你定、但画风和构图高度贴近参考图的新图——想要"这张图的气质,但换个主体",用它就对了。

开始前请确认三件事:① 工作流所需的节点和模型都已装好(不会装的先看系列教程《必看 | 工作流下载缺失节点和模型》);② 本地 models\checkpoints\ 目录里有一个 SD1.5 系列的大模型(比如 majicmixRealistic_v7、v1-5 这类,作者原配就是 majicmix 系列);③ 本地 models\controlnet\ 目录里有 SD1.5 版的线稿 ControlNet(文件名 control_v11p_sd15_lineart,结尾 fp16 或 fp32 都行)。第二、三点为什么要"SD1.5 版",是这篇教程最大的坑,下面第二步专门讲,千万先看完再动手。

image.png

第一步:加载工作流,认识这条"图生图"链路

打开 ComfyUI,点击左上角菜单「Workflow → Open(工作流 → 打开)」,找到 1-2_[图像生成]_高相似度ControlNet图生图 并打开,然后点击右下角「适应视图」。

这个工作流的核心链路其实很清晰,从左到右分三段:

① 输入区:最左边是 LoadImage(加载参考图)、CheckpointLoaderSimple(加载大模型)、两个 CLIPTextEncode(正面/负面提示词)——参考图、模型、提示词都在这;

② 控制区:中间上方是 AIO_Preprocessor(线稿预处理器,自动把参考图提取成线稿)+ ControlNetApplyAdvanced(ControlNet 控制),它是这个工作流的灵魂——用线稿把参考图的轮廓"锁"住;

③ 采样区:右边是两个采样器串成的两段式生成:第一段 KSampler 直接在参考图上重绘(img2img),中间一个 LatentUpscaleBy 把潜空间放大 2 倍,第二段 KSampler 对放大后的图再细化一遍,最后 VAEDecode + 预览窗口输出高清结果。

image.png

第二步:配置模型——必须 SD1.5,ControlNet 和底模版本必须匹配(本教程最大坑)

找到 CheckpointLoaderSimple(加载大模型)节点,下拉框里选择 SD1.5 系列模型(比如 majicmixRealistic_v7,作者原配就是这个系列的写实模型)。

为什么必须用 SD1.5?关键在 ControlNet。 这个工作流的 ControlNet 用的是 control_v11p_sd15_lineart——文件名里的 sd15 就是 SD1.5 的意思。ControlNet 分 SD1.5 和 SDXL 两代,SD1.5 的 ControlNet 只能配 SD1.5 模型,SDXL 模型必须配 SDXL 版 ControlNet,两者绝对不能混用。

如果你在 CheckpointLoaderSimple 里选了 SDXL 模型(比如 sd_xl_base_1.0),一运行就会直接报错:

RuntimeError: mat1 and mat2 shapes cannot be multiplied (77x2048 and 768x320)

翻译一下:报错里的 2048 是 SDXL 模型的特征宽度,768 是 SD1.5 ControlNet 的特征宽度——两者维度对不上,矩阵乘法直接崩。这是本工作流最容易踩的坑,网上搜到这张工作流后第一个想当然就是把模型换成最新的 SDXL,结果必然报错。

换回 SD1.5 模型后还有一个隐蔽的坑要一起避开,见第五步(ControlNet 文件也要选对版本)。模型选好后的另一个提醒:这个工作流作者配的是写实风格模型,出图是偏真实感的;如果你没有 SD1.5 模型,去魔塔社区(modelscope.cn)搜索 majicmixRealistic 或 v1-5 下载(约 2-4GB),放入 ComfyUI\models\checkpoints\ 目录,回到节点下拉框重新选择即可。

第三步:上传参考图(它决定风格和构图,不是主体)

找到 LoadImage(加载图像)节点,双击它上传一张参考图。

先理解参考图的作用:这个工作流里参考图提供的是风格和构图基准——生成图的色调、光影、整体构图会向参考图看齐,但图里的主体内容由你写的提示词决定(下一步讲)。技术上它做了两件事:一是把参考图直接作为"底图"进行图生图重绘(img2img),二是从中提取线稿交给 ControlNet 锁轮廓——两路叠加,所以相似度特别高。

选图要点:① 主体轮廓清晰——因为线稿控制会抓轮廓,主体和背景界限模糊的图效果打折;② 风格特征鲜明——想要什么风格,就放什么风格的图(想要照片感就放一张光线好的照片);③ 画面干净、无复杂文字水印。

分辨率提醒:输出图的大小由参考图的分辨率决定(SD1.5 的原生训练分辨率是 512-768,参考图建议也在这个范围,不要用超过 1024 的大图,否则容易出崩图)。

第四步:写提示词(正面写"新主体",负面写"防劣质")

找到两个 CLIPTextEncode 提示词节点,上面的是正面(prompt),下面的是负面(negative prompt)。

① 正面提示词:描述你想要的新主体内容——参考图提供风格,主体由这句话决定。作者已经写好了一段示例(描述示例图主体的),改成你自己的就行,比如参考图是产品摄影,你写 a white sports sneaker, product photography, studio lighting,出图就是"产品摄影风格的运动鞋"。

② 负面提示词:作者已经写好了一段完整的"防劣质"词库(模糊、畸形、水印、低画质之类的负面词),保持默认即可,不用动。

第五步:ControlNet 设置——必须选 lineart 版,别选 inpaint 版(实测坑)

找到 ControlNetLoader(加载 ControlNet 模型)节点,下拉框里选择 control_v11p_sd15_lineart 这个文件(通常在 1.5\ 子目录下,比如 1.5\control_v11p_sd15_lineart_fp16.safetensors)。

重点:千万不要选 control_v11p_sd15_inpaint(inpaint 版)! inpaint 版是"图像修复"专用的,它依赖一张遮罩图告诉 AI 只重绘哪个区域——这个工作流里没有遮罩链路,选 inpaint 版它拿不到遮罩信息,控制信号是乱的,实测出图是花的(画面花斑、结构错乱)。而 lineart 版是按"线稿"引导生成的,正好和前面 AIO_Preprocessor(线稿预处理器,默认 Lineart 模式 512 分辨率)配套——参考图 → 提线稿 → 线稿控轮廓,这才是作者设计的效果。

强度调节:中间 ControlNetApplyAdvanced 节点上的 strength(控制强度)默认 1.0 是满强度,轮廓锁得最死。想让新图更自由一点(相似度降低、更放飞),可以降到 0.6-0.8;想更贴参考图就保持 1.0。

image.png

image.png

第六步:运行出图,看两段式采样的效果

点击右上角「运行」按钮(或 Ctrl+Enter),等待生成。这个工作流是两段式采样,生成过程大概是这样:

第一段:以参考图为底图重绘(denoise 0.6,意思是保留约 4 成原图结构、重绘 6 成),同时线稿 ControlNet 全程锁住轮廓,得到一张主体已替换、风格贴合的图;然后潜空间放大 2 倍;第二段再细化一遍,最后输出高清成品。

SD1.5 模型速度很快(比 SDXL 快一倍以上),512-768 分辨率通常几秒到十几秒一张,显存 4G 以上都能流畅跑。

image.png

第七步:玩法延伸

这个工作流玩熟了以后,换两个东西就能出完全不同的图:

① 换正面提示词 = 换主体:参考图不动,提示词从"运动鞋"改成"咖啡杯",出图就是同风格的咖啡杯;

② 换参考图 = 换风格和构图:提示词不动,参考图换成水墨画,出图就变成水墨风的主体;

③ 调 ControlNet 强度 = 调相似度:1.0 是"高仿",降到 0.6 就是"神似";

④ 典型场景:想给某个风格的角色/产品做一系列变体——放一张风格样图,提示词改成主体清单,一张一张出;电商主图风格统一——一张定好的样图,挨个换产品名。

常见问题

Q1:运行报错 mat1 and mat2 shapes cannot be multiplied (77x2048 and 768x320)?

底模选成了 SDXL(2048),ControlNet 是 SD1.5 的(768),版本不匹配。把 CheckpointLoaderSimple 换成 SD1.5 模型即可(见第二步)。

Q2:出图是花的、画面花斑错乱?

ControlNetLoader 选成了 inpaint 版,这个工作流没有遮罩链路喂不饱它。换成 control_v11p_sd15_lineart(见第五步)。

Q3:下拉框里找不到模型/报"Value not in list"?

模型文件名对不上。工作流里记录的是作者的文件名(比如 majicMIX realistic(v7)),你本地文件名不同就会报这个。直接在节点下拉框里重新选一个你本地有的对应模型即可,不影响效果。

Q4:日志里有 embedding 缺失的警告?

不用管。embedding 是可选的美观增强词库,缺失时工作流照常运行,只是出图可能少一点"审美过滤",不影响主体效果。

登录后分享可赚邀请积分
评论 (0)

登录后才能发表评论

去登录