
简介面向ComfyUI用户的线稿生成工作流资源以SD1.5为基础模型配合ControlNet线条控制功能解决从输入图像到线稿草图的稳定可控生成问题适合AIGC入门者、设计师及工作流开发者参考。压缩包内共1个JSON文件大小仅6KB属于轻量级配置型资源导入ComfyUI即可复用便于查阅节点连接关系与关键参数设置。工作流涵盖图像加载、ControlNet预处理、采样器配置、解码输出等核心环节直观展示线条控制与SD1.5配合的完整链路可帮助用户快速理解该功能原理并在此基础上调整参数以适配不同线稿风格如动漫线稿、建筑草图、产品轮廓等。同时JSON文件中的节点组织方式较为清晰连线逻辑完整适合对照官方文档逐项学习ControlNet各参数含义也可作为二次开发或版本改造的起点。当前已有218人学习下载资源虽小但实用性强适合作为ComfyUI ControlNet专项学习的便捷模板。1. 线稿草图生成为什么绕不开 ControlNet先用它守住轮廓再谈风格如果只靠 SD1.5 的文本生成线稿你十次里有八次得到的是“看起来像线稿但实际上是一团乱麻”的东西——结构不稳、线条糊成一片、关键轮廓经常丢掉。加上 ControlNet 之后情况完全不同它先把你给的参考图压成一张干净的线稿特征图再让扩散模型在这个约束里自由发挥。换句话说SD1.5 负责画ControlNet 负责管住怎么画。这正是 ComfyUI 里做线稿草图最稳的一条路径不需要微调大模型也不用写复杂的脚本把节点按顺序接好线稿就能稳定复现。ComfyUI 和 ControlNet 的搭配几乎成了画师和美术外包团队的标配。场景很具体拿到一张照片或者一张粗糙的草稿想快速产出干净、可上色的线稿或者反过来——拿着线稿想生成成品图。这套工作流在你本地的 SD1.5 模型上就能跑不需要云端算力显存 6G 起步就能尝试。下面我会拆开讲节点结构、模型选型、参数设置和踩坑记录你可以直接照着搭一条可复现的线稿生成流。2. 工作流节点结构与模型选型搭工作流之前先搞清楚节点在干什么2.1 ControlNet 应用器与预处理器的关系它们不是一个东西在 ComfyUI 里经常有人搞混预处理器Preprocessor和 ControlNet 应用器Apply ControlNet以为二选一就能出线稿。实际上一张图要经过两次处理预处理器负责把输入图变成 ControlNet 能理解的特征图比如线稿图、深度图、法线图而 ControlNet 模型负责把这份特征图翻译成扩散模型能“看”懂的引导信号。缺了预处理器你等于直接把原图塞给 ControlNet它提取到的特征杂乱无章缺了 ControlNet 应用器预处理器输出的线稿图就只是一张普通图不会参与生成。一个常见做法是在 ComfyUI 里用 Load Image 节点载入参考图然后接一个预处理器节点再把它输出的特征图同时喂给 Apply ControlNet 节点。注意Apply ControlNet 的 condition 输入要接来自正向/负向提示词编码后的 Conditioning而 preprocessor 的特征图接的是 image 输入。这就是 ComfyUI 工作流跟 WebUI 最大的区别数据流是显式连接的每个节点吃什么、吐什么一目了然但刚上手也容易接错线。ControlNet 应用器有两个关键输入conditioning条件和 image控制图像。image 接预处理器的输出conditioning 接 CLIP 编码结果。接线逻辑要记住一句话ControlNet 不改变生成内容只给生成内容加约束。约束强度由 strength 参数控制设成 1.0 表示完全跟随特征图设成 0.3 表示只在轮廓上轻微提醒模型。2.2 选型对比lineart / scribble / canny / depth哪个适合线稿ControlNet 官方有十几个不同的控制模型做线稿草图真正常用的就三个control_v11p_sd15_lineart、control_v11p_sd15_scribble 和 control_v11p_sd15_canny。选型逻辑很简单控制类型预处理器适合场景弱点Lineartlineart_realistic / lineart_anime照片转线稿、精细轮廓控制预处理结果偏细碎需要调 strengthScribblescribble / scribble_xdog快速草图、手绘感强的草案轮廓不精确大面积色块会失真Cannycanny阈值可调强调边缘、机械感、硬表面只抓亮度边缘忽略纹理层次如果是给漫画或插画打底稿我一般优先选 lineart_anime 预处理器配合 lineart 模型因为它的线条拧得比较干净后续拿线稿上色不太需要清洗。如果是设计概念草图scribble 更合适随手画几笔就能生成完整结构。canny 适合偏机械、建筑这类边缘锐利的东西不太适合人物皮肤或衣物的柔软褶皱。关于模型版本SD1.5 对应的是 control_v11p_sd15 系列注意别下载 control_v11f1p_sd15 这种针对其他任务的变体也不要用 SDXL 的 ControlNet 模型装进去直接报错。检查模型文件大小也有帮助v11 系列通常在 1.4GB 左右小文件多半是残次品或错误版本。选择预处理器时还要考虑一个实际问题ComfyUI 里部分预处理器节点需要下载额外的依赖库比如 lineart 依赖 lpips第一次跑会现下载模型权重。如果你用的是秋叶整合包这些依赖一般已经装好但自建环境容易漏。跑到一半报 ModuleNotFoundError 先别慌缺哪个库补装哪个常见的是 opencv-python、scipy、lpips。3. 搭一条可复现的线稿生成工作流节点接线与关键参数3.1 最小工作流的节点清单与接线顺序先给出一份最小可跑的节点清单这是我从草图到成稿反复调整后的稳定结构Load Image - Preprocessor (Lineart) - Apply ControlNet - KSampler - VAEDecode - Save Image ↑ Checkpoint Loader - CLIP Text Encode正向/负向—— Conditioning 拼接用代码表示节点连接顺序ComfyUI 的工作流本质是一份 JSON 图配置以下是关键部分的伪代码逻辑{ load_image: { class_type: LoadImage, inputs: { image: ref.png } }, preprocessor: { class_type: LineartPreprocessor, inputs: { image: [load_image, 0] } }, apply_controlnet: { class_type: ControlNetApply, inputs: { conditioning: [conditioning_positive, 0], control_net: [load_controlnet_model, 0], image: [preprocessor, 0], strength: 0.85 } }, ksampler: { class_type: KSampler, inputs: { model: [checkpoint_loader, 0], positive: [apply_controlnet, 0], negative: [conditioning_negative, 0], seed: 12345, steps: 28, cfg: 7.0, sampler_name: dpmpp_2m, scheduler: karras, denoise: 1.0 } } }这段配置的亮点在于选用了LineartPreprocessor和ControlNetApply的组合而不是直接把原图接进 ControlNet。注意向 ControlNet 应用器传入的条件是正向 conditioning这保证控制信息只作用于正向语义负向条件保持不受干扰。参数里最重要的四个调整点strength控制引导强度0.85 是我比较常用的平衡值想更贴轮廓就上 0.9 以上想要模型自由发挥就降到 0.7denoise如果做线稿重绘一般是 1.0但如果是寻线稿上色建议 0.70.8sampler_name用 dpmpp_2m 配 karras 调度线稿纹理最稳euler 会损失细节seed固定之后找到好结果后续微调提示词不会全盘变样。3.2 预处理器输出可视化先看特征图再生成很多人直接跳过预处理器的输出检查导致 ControlNet 控制效果不好却不知道是该调 strength 还是该换预处理器。ComfyUI 的节点面板里可以直接把预处理器输出接到 Preview Image 节点先看一眼它的特征图是否符合预期。比如 lineart 预处理器如果输出一团黑的散点说明输入图本身对比度不够或者预处理器的分辨率参数设置不对。预处理器关键参数是resolution推荐 512 或 768。设 512 时处理速度更快但细线可能断掉设 768 保留更多细节不过显存占用也会增加。做线稿这个值我习惯固定在 768因为它直接影响线条连续性。设成 1024 时如果你的显卡只有 6GB 显存很容易爆显存。一个实战技巧是把预处理器输出保存下来当“标准线稿”这样即便扩散模型生成的最终图不满意你也能区分是“预处理线条不好”还是“生成阶段跑偏”。控制变量定位问题省下大量盲目调参的时间。3.3 从照片到线稿完整操作序列下面给出一套从照片到线稿的标准操作序列每一步都有明确目的将目标照片裁切成 1:1 或 4:3主体居中。ControlNet 不会自动构图如果你的输入图构图不好生成结果会继承这个毛病。载入照片接 LineartPreprocessor设置 resolution 为 768。预览预处理输出确认线条完整、没有大块死黑区。在 Checkpoint Loader 中选择一个偏线稿/素描风格的 SD1.5 模型比如 protogen-x22 或者 deliberate不建议用写实摄影模型它们会给线稿叠加多余光影。正向提示词写入 “line art, sketch, black and white, clean lines, white background”负向提示词写入 “photo, 3d, render, painting, color, blurry, messy lines”。设置 KSampler 参数建议从 steps 28、cfg 7.0、denoise 1.0 起步。跑一批 seed 生成后固定优秀的 seed再微调 strength。这套流程最容易犯的错误是提示词写着 line art 却用了一个擅长厚涂的模型模型理解不了“干净的线条”是什么最后生成的是又脏又乱的水墨混色。灵模匹配和提示词匹配同样重要不能只看 ControlNet 参数。4. 控制线稿质量的必调参数从 CFG 到采样步数逐步收紧线条4.1 CFG 和采样步数怎么配合线条才不脏CFG无分类器引导尺度和采样步数之间存在一个很少有人讲的互动关系CFG 越高线条越重但一旦超过 9背景和阴影就跟着出来了线稿变成带素描底色的半成品。CFG 太低低于 4线条轻飘飘的控制特征图没被模型当回事。线稿场景我给的基准是 6.57.5具体到不同模型有的偏写实模型在 7.0 还会显得线条粗硬可以降到 6.0 试。采样步数的逻辑不是“越多越好”。dpmpp_2m 配合 karras 调度器在 24 步左右就能收敛继续加到 40 步只是增加耗时线条并不会更干净。反而在步数过高时偶尔会出现线条里面长出杂色或噪点的情况因为模型有更多机会“自由发挥”。如果你用的是 SD1.5 原版模型建议 steps 取 2630cfg 取 7.0。如果你加载的是 anime 风格合并模型比如 anything-v5 或 meinapastelsteps 可以降到 22cfg 降到 5.5 效果不错。这是因为动漫模型本身对提示词更敏感不需要靠高 CFG 挤压特征。4.2 下采样和 VAE 对线稿线条的影响SD1.5 架构的 VAE 下采样倍率是 8也就是说生成图像的潜在表示是 64x64对应 512x512 图。大多数用户从不动 VAE但如果输出线稿画面里出现细碎的格子状纹理通常就是 VAE 类型不匹配或没有正确加载 VAE 导致的。ComfyUI 的 Checkpoint Loader 默认不会自动加载内置 VAE 文件你需要在图里单独加一个 VAELoader 节点然后在 KSampler 前的 model 输入之前用 ModelPatch 或直接启用 CLI 节点让 VAE 生效。如果你是秋叶整合包内置 VAE 一般在models/vae目录。用不对 VAE 最典型的症状是线稿图偏绿或偏黄线条边缘有色散。另外一个不常被提到的细节是ComfyUI 工作流保存后别人打开时如果没有对应的 VAE 文件会弹红色错误提示。这也是“我按工作流跑了但效果不同”的一大根源。分享工作流时顺手把 VAE 路径说明放进去能省掉对方很多排查时间。4.3 ControlNet 的 strength 与开始/结束控制步数ControlNet 应用器在 ComfyUI 里其实支持 start_percent 和 end_percent 参数但默认 UI 只暴露了 strength。很多人不知道这两个参数是控制“在采样的前 40% 步骤施加多少控制、后 60% 步骤是否减少控制”的关键。线稿生成时如果发现前期构图正确但后期细节崩坏比如线条末端卷曲、杂线丛生可以把start_percent 0.0、end_percent 0.8让最后 20% 采样步骤里 ControlNet 逐渐松手模型自由补细节。反过来如果线条老是越界说明模型在前 30% 步骤还没有真正接受控制那就把end_percent调成 1.0同时提高 strength。这里给出一组可用的代码演示# 伪代码通过 API 调用时控制 ControlNet 生效区间 controlnet_kwargs { strength: 0.85, start_percent: 0.0, end_percent: 0.8, }这段配置的含义是采样全过程应用 ControlNet但只在前 80% 步骤完全施加约束最后 20% 概率停止。效果是线条主体稳定末端过渡自然。如果你发现线条边缘糊先别急着调 strength把 end_percent 往后推一推再观察。4.4 LoRA 和负面提示词让线稿更干净的两个助推器只用 ControlNet 得到的线稿通常“能看”但不“精致”。想要接近手绘商业线稿的质感加 LoRA 是条捷径。在 Civitai 或 HuggingFace 上搜 “lineart loRA sd1.5” 或 “sketch style lora”找那种专门强化线条风格的小模型权重包括白底黑线、钢笔速写、铅笔手稿等。加载方式就是在工作流里加 Load LoRA 节点夹在 Checkpoint Loader 和 CLIP Text Encode 之间。用 LoRA 时触发词要写对作者一般会在模型页面注明。比如有的线条 LoRA 触发词是sketch style有的则是lineart。不知道触发词就直接放大权重到 0.8很可能会出反效果。建议从权重 0.4 开始小步上调0.1 的差距在最终图上能看出明显差异。负面提示词对线稿的贡献往往被严重低估。一条比较通用的负面提示词可以是photo, realistic, 3d, render, painting, illustration, color, grayscale texture, rough sketch, messy, broken lines, clutter, watermark, text注意避免写lines这类词。负面提示词里限制过多的画面元素会出现南辕北辙的情况模型为了避开“线条”会把轮廓都消掉。负面提示词的意义是帮模型排除不需要的风格和瑕疵而不是否定线条本身。5. 常见问题与避坑记录断线、黑白噪点、显存溢出逐个排查5.1 输出整张图变成黑白噪点/大块黑斑这种现象大多出现在 lineart 预处理器配合写实照片输入时。照片本身光影复杂lineart 提取出极多梯度线扩散模型把这些线当成了画面结构放大后就成了密密麻麻的噪点或黑斑。解决方法是先把照片做降饱和度和提高对比度的预处理或者换用 canny 预处理器它会用阈值过滤掉细碎的边缘只保留主轮廓。另一个技巧是降低 resolution 到 512让预处理器丢失一部分细节通常噪点情况就会缓解。注意 lineart 预处理的“分辨率”不是输出图的尺寸而是它内部提取特征时的运算分辨率所以调低它不会让最终成图变模糊。5.2 线条断裂/局部消失模型“偷工减料”线条在画面边缘或复杂交叉部位中断属于典型的 ControlNet 控制不足。先检查 strength 是否低于 0.75低于这个值模型大概率会选择性忽略部分轮廓。其次把 end_percent 检查一下如果设置得太早比如 0.5后程采样中模型就会自由发挥线条被擦除。最后要看预处理器输出的特征图。很多参考图在等比缩放时细线被压缩到不足 2 像素预处理器直接丢掉了这在特征图预览里就能看到。遇到这种情况我不建议强行调参而是回到源头把原图放大到 1024 再跑预处理器提取到更多线稿细节再缩放回 768 输入。这有点像“用信息冗余换结果稳定”代价是多几十秒预处理时间。5.3 显存溢出或生成到一半卡死6GB 显存跑 SD1.5 加 ControlNet 本来就紧再加上 VAEDecode 和预览节点很容易在中途 OOM。最有效的省显存招数是关闭预览节点的中间输出只在最后阶段解码。另外 ComfyUI 默认保存中间结果到磁盘不是为了方便是要防止后面步骤失败前功尽弃但对显存同样是一种损耗。如果你用的是秋叶整合包它自带的虚拟内存设置建议手动调大把页面文件设置为系统管理的大小或 32GB 以上固定值。在我自己踩过的坑里最隐蔽的是--lowvram没有真正生效。排查方式是看终端输出的显存占用日志如果显示 loading model to GPU 且峰值超过显存 90%说明 offload 失败需要在启动参数里显式加--force-fp16并关闭--cpu之类的冲突项。5.4 同一份工作流在不同电脑上结果不一致控制参数相同但线条粗细、风格差异很大大部分原因是模型文件版本不一致。SD1.5 的 ControlNet 模型有 v11 和 v1.0 两个大版本两者输出差异显著。如果工作流里写的是 v11 但对方机器上只有 v1.0ComfyUI 不一定报错torch 转换时也会静默加载结果就完全不同。另一个容易忽略的点是 VAE 的来源。不同 VAE 对线条纯度有影响推荐统一用 vae-ft-mse-840000 或 newer-kl-f8 的修复版避免有些作者魔改过 VAE 导致线条发灰。如果你的参考工作流涉及外部下载的.safetensors最好对比一下 SHA256 或至少看文件大小防止对方给你的是一个旧副本。5.5 预处理器下载失败或使用时报错首次使用 lineart 预处理器时ComfyUI 会尝试下载相关模型到models/annotator目录。很多人卡在这一步是因为网络较弱或下载源不稳定终端显示反复超时。你可以在整合包里找到对应脚本手动从镜像源下载之后放进去。核心文件是scannet.pt、upernet.pt这类模型权重缺失时预处理器节点会直接标注异常而不给详细日志。在本地跑不动的场合我通常把预处理单独分出来跑先用 Python 调用 OpenCV 提取线稿并存成 PNG再让 ComfyUI 读这张 PNG。这样既绕开了预处理器下载问题也方便你手动修图。import cv2 import numpy as np image cv2.imread(input.jpg, cv2.IMREAD_GRAYSCALE) image cv2.resize(image, (768, 768)) blurred cv2.GaussianBlur(image, (3, 3), 0) line cv2.Canny(blurred, 50, 120) line cv2.bitwise_not(line) cv2.imwrite(canny_line.png, line)这段代码用 Canny 做了最朴素的线稿提取适用于手头参考图边缘明确的场景。注意阈值组合需要几张图试出来50/120 偏低会保留较多杂线80/160 偏高主干线也会断掉。提取完成后你直接把这张 PNG 作为输入图接进 Apply ControlNet 节点预处理器节点替换为“什么都不做”的 Load Image 直通模式相当于绕过了内部特征提取环节。6. 验证线稿质量的进阶做法把控制链路接到上色与精修流程里当你能稳定产出干净的线稿之后下一步不可避免要把这线稿继续用于上色或者精修。很多人以为线稿生成“跑通”就结束了实际上线稿只是中间产物怎么用它才暴露整条链路的真实价值。第一个进阶验证是检查线稿在不同 seed 下的稳定性。固定 ControlNet 参数和提示词连续生成 10 张图确定线稿大结构是否稳定。如果每张图的轮廓差异较大说明 ControlNet 的强度还不够线条没有真正扎根。如果结构一致但风格细节每张不同这是正常的ControlNet 锁结构扩散模型出风格。第二个进阶用法是把生成线稿直接作为上色的控制图串联另一条工作流。比如线稿图接一个 Canny 预处理器再配合色块提示词就能把黑白线稿转成彩色插画底图。这时 ControlNet 的 strength 要明显降低一般设在 0.50.6让线条呈现为边界而不是主导内容。第三个验证方法是对照着原参考图看轮廓对齐率。把生成图与原图以 50% 透明度叠在一起检查五官、物体边缘是否偏差。偏差超过 3%5% 就要调整预处理器或 strength。严格对齐的场景比如设定图转线稿可以使用 scribble 加 strength 1.0牺牲一部分灵动性换精准。还有个经常被提起但很少被正确使用的做法把线稿工作流保存为模板只改 Checkpoint Loader 里的模型不改任何参数。这样做的好处是你可以快速对比不同大模型对同一线稿的诠释方式——有的模型会让线条更硬朗有的会更柔软流畅。这种对比测试我一般会用一张自定义的“标准线稿”来跑它包含直线、曲线、交叉线和封闭圆覆盖线稿中大部分基本元素方便快速分辨模型的风格倾向。最后一个建议养成把生成图直接存回 ComfyUI 输入目录的习惯。下次想复现某个效果时拿上次的线稿图当参考图整个工作流可以形成闭环迭代而不是每次重新从照片出发。这也算是用文件系统做“后悔药”的老方法省掉不少返工时间。希望这些参数和坑位能帮你少走几趟弯路祝你的线稿控制链路早日跑顺。本文还有配套的精品资源点击获取