1-12 ControlNet Canny边缘线稿引导生图:参考图定骨架,提示词填血肉
准备工作:这篇教程要用到的材料
本教程演示的工作流是「1-12_[图像生成]_ControlNet_Canny边缘线稿引导生图」,位于工作流大合集的 01 图像生成 分类目录下。它的作用一句话概括:上传一张参考图,用 Canny 把它转成黑白边缘线稿,用线稿锁死构图和姿态,再按你的提示词重新画一遍——轮廓跟参考图走,内容随便换。
这个工作流要用 3 个模型,缺一不可:
① 写实底模:absolutereality_v181.safetensors(SD1.5 写实底模,工作流原配)→ models\checkpoints\。用你手头任何 SD1.5 写实底模代替都行,方法完全一致。
② Canny 控制器:control_v11p_sd15_canny_fp16.safetensors(注意必须是 canny 版,depth、openpose 版不通用)→ models\controlnet\。
③ VAE:vae-ft-mse-840000-ema-pruned.safetensors(约 334MB,1-5 教程已下载)→ models\vae\。
打开后如果有红色节点或模型下拉是空的,先回看本系列第 1 篇《缺节点模型补全》把环境补齐,再回来跑这篇。

一、这个工作流能干什么
先想一个创作场景:你手里有一张图,很喜欢它的构图、姿态和轮廓,但想换成别的内容——比如参考图是一张普通人像,你想要同姿态的海边白裙写真;或者有一张产品摆拍图,想换个主体、换个画风再出一版。重画吧,构图¢姿态很难复刻;垫图吧,颜色纹理又会被带过去。
Canny 就是为这种需求生的:它把参考图转成一张黑白边缘线稿图,只保留"哪里有边、轮廓怎么走",把颜色、纹理、光影全部丢掉。然后用这张线稿约束 SD 出图——线稿定骨架,提示词填血肉。
工作流原稿就是这样演示的:参考图 cwf_portrait.jpg(LoadImage 节点自带)+ 正向提示词写一段海边白裙女子写真(本篇已换成下面的新版提示词,直接整段替换)→ 出来的就是同构图、同姿态的落日海边人像,脸是提示词的脸,轮廓是参考图的轮廓。原稿自带的是 Liv Tyler 和 Cate Blanchett 两个明星名字混写,还绑死在精灵+绿斗篷的魔幻风上,两个长相打架,出来的脸又柴又糊,本篇已换掉,原因见第三节。
所以它的用途很明确:
· 姿态构图复用:喜欢某张图的站位、动作、镜头,就拿它当"骨架",批量换主体、换服装、换画风;
· 线稿转成图:手绘线稿、设计草图丢进来,直接转成写实成品,插画和设计师最常用这一招;
· 同一骨架批量变体:线稿不动,只换提示词,一次出 N 版同构图不同内容的图,专治"构图定了、内容没定"的选题会。
二、链路结构:参考图是怎么变成约束的
整个工作流只有一条主链,13 个节点,可以分成三段看。先记住总路线:LoadImage → Canny → ControlNetApply → KSampler → VAEDecode → SaveImage,约束模型和底模在两侧汇入。
第一段"取图与提线":LoadImage 节点上传参考图(原稿自带 cwf_portrait.jpg),连到 Canny 节点。Canny 节点只有两个参数:低阈值 0.3、高阈值 0.7,输出就是一张黑白边缘图。同时这张边缘图还连了一个 PreviewImage 节点——先看线稿长什么样,线稿对了成图才对,这是本工作流最重要的检查点。

第二段"约束加载":ControlNetLoader 节点选择 control_v11p_sd15_canny_fp16 模型,连到 ControlNetApply。ControlNetApply 一共收三样东西:正向条件(上面来的提示词)、ControlNet 模型、Canny 吐出的边缘图,强度 0.85,输出"被线稿约束过的条件"再喂给 KSampler。
第三段"生成":CheckpointLoaderSimple 加载 absolutereality 写实底模,CLIP 分别连正负向提示词编码器,EmptyLatentImage 给一张 512x512 空画布,KSampler 跑 25 步出潜空间,VAEDecode 解码,SaveImage 保存。这一段和普通文生图一模一样,唯一的区别就是 KSampler 收到的正向条件是"被线稿加持过"的。
三、操作步骤:从打开到出图
1. 打开工作流:在 ComfyUI 左上角菜单 Workflow → Open,找到工作流大合集 01 图像生成目录下的 1-12 文件打开,然后点右下角适应画布看全貌。
2. 放模型并选中:三个模型按准备工作里的路径放好,回到画布,在 CheckpointLoaderSimple 下拉里选 absolutereality_v181,在 ControlNetLoader 下拉里选 control_v11p_sd15_canny_fp16,在 VAELoader 下拉里选 vae-ft-mse-840000-ema-pruned。下拉是空的就点刷新或重进网页。
3. 换自己的参考图:点 LoadImage 节点的 Choose file 上传你的图(人物、产品、建筑都行,曝光正常、主体明确的线稿质量最好)。传完先别急着跑全流程。
4. 换提示词(直接整段替换):双击正向 CLIPTextEncode 节点,清空,把下面这段新的正向提示词整段粘进去;负面提示词框也清空,换上下面的新版负面词。别用原稿那段——它是 Liv Tyler 和 Cate Blanchett 两个名字混写,还绑死在精灵+绿斗篷的魔幻风上,两个长相打架,出来的脸又柴又糊。新版换成了都市夜景写真风:黑西装、白衬衣、暖色城市光斑背景,和那个绿不沾半点边;写法上把人物、服装、打光、背景一句一句说具体,外加 masterpiece、best quality、photorealistic 这三个 SD1.5 最认的画质词;负面补了 anatomy、hands、fingers 这些出丑重灾区(Canny 只锁轮廓,不管手指有几根)。
新版正向提示词(复制粘贴):a portrait photo of an elegant young woman with long dark brown hair, wearing a black tailored blazer over a white shirt, delicate necklace, confident gentle expression, sharp focus on face, natural skin texture, soft cinematic lighting, night city street background with warm bokeh lights, shallow depth of field, masterpiece, best quality, ultra detailed, photorealistic
新版负面提示词(复制粘贴):blurry, low quality, worst quality, lowres, watermark, text, logo, deformed, mutated, disfigured, bad anatomy, bad hands, missing fingers, extra fingers, fused fingers, cropped head, out of frame, illustration, cartoon, anime, painting, drawing, cgi, render, plastic skin, oversaturated, horror, cosplay
以后换自己想画的内容,照这个格式改:第一句说清"拍的是谁、穿什么",第二句说清"肤质、打光、背景",尾缀三个画质词不动。

5. 先看线稿再跑全图:第一次建议只跑到 PreviewImage——选中 Canny 到 PreviewImage 这一小段运行,确认边缘图里主体轮廓完整、背景线不杂乱,再点 Queue 跑全流程。几秒钟后 SaveImage 出图,右键保存即可。

四、参数调节
· Canny 双阈值 0.3 / 0.7:低阈值管"收多少弱边缘"——调高线条变少、画面变干净,调低连皮肤纹理、布料褶皱的碎线都会被收进来;高阈值管"什么算强边缘"——调低线条变密,调高只剩最硬的主轮廓。人像用原稿 0.3 / 0.7 最稳;建筑、产品这种硬边多的可以试 0.4 / 0.8,线稿更干净;手绘线稿本身对比弱的,适当把低阈值往 0.2 放。
· ControlNet 强度 0.85:就是"线稿的话语权"。拉到 1.0,构图锁死,但提示词里的大改动会被压住(比如想把站姿改成坐姿基本没戏);降到 0.5 以下,提示词自由了,但脸型轮廓容易走形。经验值:换主体、大换画风用 0.7~0.9;只想借个大概构图用 0.5~0.7。
· 步数 25 + CFG 7 + dpmpp_2m + karras:SD1.5 写实通用组合。出的图发虚、细节糊先把步数加到 30;CFG 别超过 9,超过容易出脏色。seed 原稿固定 636250194499629,方便复现;想换一张脸就把 seed 改随机再跑。
· 画布 512x512:和 SD1.5 原生分辨率匹配所以最稳。如果参考图是竖构图,把 EmptyLatentImage 改成 512x768(宽高对调),出图比例才对得上。

五、常见问题排查
1. 打开一片红(缺节点):Canny 节点来自 ControlNetAux 插件,先装插件再重启 ComfyUI;缺模型按准备工作三条路径补,补完刷新网页。
2. Preview 线稿全黑或全白:阈值被改得太极端,或者参考图本身过暗、过曝。先恢复 0.3 / 0.7 默认值,换一张曝光正常的图再试。
3. 出图跟参考图完全不像:三处查——ControlNet 强度是不是被改低了;ControlNetLoader 里选的是不是 canny 版模型(depth、openpose 版约束的是别的东西);先看 Preview 线稿对不对,线稿错后面全错。
4. 构图对了但像"描红",提示词的新内容出不来:强度 0.85 太顶了,降到 0.6~0.7 给提示词留发挥空间,或者把提示词里冲突的构图词删掉(线稿已经定了姿态,就别再写姿态)。
5. 模型下拉是空的:文件没放对目录(controlnet 模型必须进 models\controlnet,不是 models\checkpoints),放对后刷新网页或重启 ComfyUI。