拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ComfyUI+ControlNet线稿工作流:从SD1.5到Canny的完整调参指南

ComfyUI+ControlNet线稿工作流:从SD1.5到Canny的完整调参指南

简介:ComfyUI/SD1.5+ControlNet 线条控制生成线稿草图工作流,面向AI绘画爱好者与ComfyUI学习者,解决手动搭建ControlNet线条控制链路繁琐的问题。压缩包体积仅6KB,内含1个json工作流文件,可直接在ComfyUI中加载使用,省去从零配置节点的时间。文件内完整梳理了图像输入、ControlNet线条预处理、模型加载到采样生成草图的节点链路,预设关键参数与连接方式,并包含必要的采样器与VAE模块,确保加载后即可直接输出结果。对于刚接触节点式工作流的用户,这是一份可直接运行的标准模板,可调整ControlNet强度、采样步数等变量观察线条纯度变化,也可替换底模型适应不同画风,适用于漫画线稿、建筑草图等风格化生成场景。目前已有218人学习,适合想快速上手线稿控制场景,或希望将此类工作流迁移到自身项目的开发者。

1. ComfyUI + SD1.5 跑 ControlNet 线稿:一套能直接出白底黑线稿的工作流

讲一个反直觉的结论:在 ComfyUI 里生成线稿草图,最靠谱的组合不是最新的 XL 模型,而是 SD1.5 配上 ControlNet 1.1 的线稿类模型。c0002 这套工作流把「照片转线稿」「透视稿整理」「线稿上色底图」这些问题用一张 json 固化下来,导入就能跑。它适合三种人:需要批量出线稿素材的设计师、做二次元上色底稿的画师、以及正在学 ComfyUI 节点编排的开发者。下面我把节点链路、参数取值和踩过的坑一次性讲清楚。

2. 工作流骨架:从加载模型到出线稿,节点链路与选型理由

2.1 整条链路拆开看:五段节点各自干什么

ComfyUI 的工作流本质上是一个有向图。c0002.json 里这条线稿链路,不做多模型融合、不做二次重绘,只保留最核心的 ControlNet 单控制分支。从头到尾拆一下,你才能知道每个节点为什么存在、删了会坏什么。

先看输入侧。Load Checkpoint 节点加载 SD1.5 的 checkpoint 文件,这里同时引出大模型参数、CLIP 编码器和 VAE 三个出口。CLIP 编码器就是常说的「CLIP 询问机」,负责把正负提示词编码成条件向量;VAE 出口则单独用于最后解码。不少新手只接了 model 和 clip,忘了单独接 VAE,导致最后出图发灰,这个问题后面第 5 章专门说。

再看控制侧。Load Image 加载你要提取线稿的源图,输出一张图像张量。这张图有两个去向:一是直接进 VAE Encode 做图生图的潜空间输入,二是进 ControlNet 的预处理器。以 c0002.json 的默认配置来说,控制分支走的是「图像 → 预处理器 → ControlNet 模型 → Apply ControlNet」,与主分支在 UNet 采样阶段汇合。

然后看采样侧。KSampler 接收来自 checkpoint 的 model、来自 CLIP 编码器的正负提示词,以及 Apply ControlNet 输出的条件。这里最容易忽略的是 Apply ControlNet 要接对输入端口——它修改的是 KSampler 的 model 输入,而不是 latent 输入。我第一次搭的时候就把控制条件接到了 latent 上,结果出图完全没有被线稿影响。

最后是输出侧。KSampler 输出的潜空间图像经 VAE Decode 转成像素图像,再进 Save Image 存盘。整条链路的逻辑可以压缩成一句话:SD1.5 负责内容生成,ControlNet 负责形状约束,CLIP 编码器负责风格与语义。三个角色各管一段,不重叠,所以排查问题也能按段切分。

这种拆法在选型上的理由很直接。SD1.5 的 checkpoint 和配套的 control_v11p_sd15_* 系列模型出自同一套生态,权重能对得上,不像 SDXL 那套需要专门的 adapter 或额外校准。你如果只想出干净的线稿草图,SD1.5 在 512 到 768 分辨率区间的显存占用和出图速度也是最划算的,尤其是后面你要批量验证参数时,出图快意味着能多试几组阈值。

2.2 线条预处理器选型:Canny、Lineart、Scribble 的适用边界

ControlNet 控制线稿,不能只选模型,还要选预处理器。c0002.json 默认用 Canny,但你换素材时应该知道其他预处理器在什么场景下更合适。下面是我实测过的几个常见选择。

Canny 属于边缘检测,输出黑白相间的细边缘线,适合照片转线稿、机械零件、建筑立面这类边缘锐利、纹理清晰的图。它的特点是边缘数量受阈值控制:低阈值放行更多细边缘,高阈值只保留强边缘。做线稿草图时我一般把低阈值设在 80 到 120,高阈值设在 180 到 240,具体怎么调后面第 4 章会展开。

Lineart 提取的是连续的白描式线条,比 Canny 更适合漫画线稿和手绘风。它会把阴影和纹理压掉,只保留轮廓和主要结构线。注意 Lineart 预处理器对低分辨率图容易产生断线,源图最好在 768px 以上,否则线条断成一截一截,后面接都接不回来。

Scribble 接受涂鸦式输入,适合「先用笔随便勾几笔、让模型补全成完整线稿」的场景。它的特点是自由度最高、控制力最弱,适合创意探索。MLSD 只提取直线,适合室内设计和建筑图,但对曲线完全无感,用在小场景人像上容易翻车。Anime Lineart 是动漫特化版本,输出线条更细、更接近赛璐璐上色前的底稿。

另外一个容易踩的地雷是预处理器和模型要匹配。Canny 边缘图配 Lineart 模型,输出会带很多不规则短线;Lineart 图配 Canny 模型,线条被大量忽略,等于没控制。c0002.json 里预处理器是 Canny,模型对应 control_v11p_sd15_canny.pth,两者是配套的。你要是换模型,一定记得回到预处理器下拉框换对应项,别只换模型不换预处理。

选型时记住一个原则:你要的是还原,就选 Canny 或 Lineart;你要的是改造,就选 Scribble。c0002.json 默认配 Canny,是因为它在新手阶段最不容易出空图——Canny 无论如何都会有边缘输出,至少不会让你对着空画布发呆。

2.3 ControlNet 权重与起止时间:控制力度的两个核心参数

ControlNet 节点里有几个影响生成结果的参数,最值得调的是 weight、start_percent、end_percent。这三个参数共同决定了线稿在多大程度上影响最终画面。

weight 是全局控制强度,范围 0 到 1,理论上可以超过 1 但一般不建议。weight 在 0.5 到 0.7 之间时,线稿只作为构图参考,模型会自由发挥颜色和部分线条;weight 在 0.8 到 1.0 之间时,线条基本被严格还原。线稿生成这种用途,我习惯 0.85 起步,因为产出物本身就是要求线条尽量贴合源图。

start_percent 和 end_percent 控制 ControlNet 在采样步数中的生效区间。0 到 0.5 表示只在采样前半段生效,适合「线稿只负责打底、后期让语义自由发散」的场景。做线稿忠实还原时,end_percent 不应低于 0.7,否则在后半段采样时模型会脱离线稿约束,自动往它见过的风格偏。我做「严格线稿」时直接设 end_percent = 1.0,让约束铺满全程。

还有一个容易被忽略的点:start_percent 未必固定为 0。如果源图本身结构已经很准,你只想让模型在后半段补细节,把 start_percent 设到 0.3 会让控制更顺滑,前半段完全交给语义生成,后半段再用线稿拉住结构。这个用法在「草图上色」任务里特别常见,c0002.json 的默认配置没有做这个优化,你可以按需改。

判断控制力度是否合适的办法很土但有效:把 weight 调到 0.3 出一张图,再调到 1.0 出一张图对比。如果 0.3 时结构都在,那你的任务不需要过高 weight;如果 0.3 时结构跑飞,说明提示词与线稿语义冲突太大,加 weight 只是治标。这个思路在 c0002.json 调参里会反复用到。

3. 把工作流跑起来:导入 c0002.json 与工程目录摆放

3.1 下载后往哪放:ComfyUI 目录里必须出现的四个位置

c0002.rar 解压后会有一个 c0002.json。这个 json 是 ComfyUI 的工作流定义文件,双击导入不会直接生效,还要保证它引用的模型文件已经在正确目录。我用秋叶整合包装好的 ComfyUI 目录结构来举例,手动安装的也完全一样。

模型放置路径:SD1.5 的 checkpoint 放ComfyUI/models/checkpoints/,ControlNet 模型放ComfyUI/models/controlnet/,VAE 放ComfyUI/models/vae/,需要处理的源图放ComfyUI/input/。这四个位置只要有一个是空的,导入 json 后就会出现红色报错节点。

# 以秋叶整合包目录为例,检查关键目录是否存在 ls -l ComfyUI/models/checkpoints ls -l ComfyUI/models/controlnet ls -l ComfyUI/models/vae ls -l ComfyUI/input

这段命令只做目录检查。你会看到三个模型目录里各自有 .pth 或 .safetensors 文件,input 目录里至少有一张测试图。如果 controlnet 目录为空,后面导入 c0002.json 时 ControlNetLoader 节点会直接标红。我一般会在下载任何工作流之后先跑一遍这段 ls,比在界面上找报错快得多。

提示:手动安装的 ComfyUI 目录结构完全一致,只是没有秋叶整合包的图形启动器。目录对不上时别急着调参,先把文件位置理顺。

3.2 导入 JSON 与补全缺失资源

启动 ComfyUI 后,把 c0002.json 直接拖进浏览器画布,或者通过菜单 Workflow → Open 打开。导入后画布上会出现节点图,但先别急着点 Queue。先在界面右上角看有没有 Missing nodes 提示,再看每个节点的模型选择框是不是有实际文件名。

如果 ControlNetLoader 显示 ckpt_path 为空,点开下拉框选 control_v11p_sd15_canny.pth。这里有一个高频问题:ControlNet 模型和它的 yaml 配置文件必须同名同目录。比如你放的是 control_v11p_sd15_canny.pth,旁边就得有 control_v11p_sd15_canny.yaml,ComfyUI 加载时靠 yaml 读通道数和结构定义。缺 yaml 的常见表现不是报错,而是节点显示加载成功,但 Apply ControlNet 后续计算永远用默认配置,控制效果时有时无。

# 从模型仓库补下 ControlNet 时,记得连 yaml 一起下 # 正确的模型目录内容长这样 ls -l ComfyUI/models/controlnet/ # control_v11p_sd15_canny.pth # control_v11p_sd15_canny.yaml

补全后把 KSampler 的 seed 拉成随机,先跑一张测试图。这一步的目的不是出好图,而是把环境问题和参数问题隔离开,确认链路是通的、有输出。环境没配好时你怎么调参都是徒劳,每多一次空跑就多浪费一次真正排查问题的时间。

3.3 第一轮出图参数:能稳定出结果的值

c0002.json 里默认参数未必适配你的源图尺寸和风格,我给出第一次跑通时建议用的一组稳定值。下面这份参数表按「先跑通、再调优」的顺序排,第一轮验证链路时照抄即可。

参数位置推荐值说明
CheckpointSD1.5 系列的 realistic/二次元模型c0002 按 SD1.5 设计,别加载 SDXL
正向提示词lineart, black and white, white background, clean edges强调输出线稿属性
负向提示词color, blur, lowres, noise, photo压掉照片感和噪点
Canny 低阈值 / 高阈值100 / 200边缘适中,先看整体结构
ControlNet weight0.85以还原为主
start_percent / end_percent0.0 / 1.0全程约束
KSampler steps25线稿任务 25 步足够
CFG7.0太高易糊,太低易脏
出图尺寸与源图同比例,建议 512×768 或 768×512别强制放大到 1024

表格里几个容易误解的点先讲一下。ControlNet 预处理器输出的尺寸与源图一致,但与 KSampler 的出图尺寸可以不同,ComfyUI 会在应用控制时自动对齐。不过自动对齐有时会让边缘错位,最好手动把 Load Image 的尺寸与采样尺寸设为一致,这个坑在第 5 章展开。第一轮跑完如果线稿太碎,那不是权重问题,而是 Canny 阈值太敏感,下一章说怎么治。

第一轮跑完还有一个判断标准:如果出图时好时坏、同一组参数两次结果差异很大,先别怀疑参数,回去把 seed 固定住。固定 seed 对 AI 工具来说是基础操作,seed 不固定,你后面所有对比实验都是无效的。

4. 调出干净的线稿:边缘粗细、噪点与断裂的处理

4.1 线条太碎:Canny 阈值与降噪怎么配合

第一轮出图常见毛病是线条又多又碎,像用了劣质描边滤镜。这不是模型不行,是 Canny 的预处理阈值放过了太多纹理细节。Canny 有两个阈值:低阈值决定「多细的边算边」,高阈值决定「多强的边一定保留」。低阈值越低,边缘越多。很多人只调低阈值,其实两个阈值要一起动。

我处理碎线的顺序是:先把高阈值提到 220 到 250,再把低阈值提到 120 以上。这样保留的是强边缘,二值化后黑线少而粗。如果还是碎,在预处理器里把 resolution 参数从 512 提到 768,让预处理器在更高分辨率下做边缘检测,线条会更连续。

# ComfyUI 里 Canny 节点的常用参数,对应 UI 上 Preprocessor 设置 { "low_threshold": 120, "high_threshold": 240, "resolution": 768 }

代码里三个参数对应三种病:low_threshold 只管碎边数量,high_threshold 管主边缘强度,resolution 管预处理精度。碎线的根源通常是 low_threshold 太低加 resolution 太低,两个一起调才有效,只调一个往往改善有限。另外一个容易忽略的坑:源图本身带 JPEG 压缩噪声时,先接一个轻微锐化或降噪节点,Canny 吃干净图,输出线条才干净。

反过来还有一种情况:线条太粗太黑,全是黑块,像炭笔画。这是高阈值太低导致低对比度区域也被算成边缘,把预处理器的高阈值提到 260 以上,同时把低阈值也往上带,边缘就会变细。记住一个手感:你要的是「细而连续」的线,不是「粗而完整」的色块,所以阈值的整体方向永远是往上走,除非你明确要厚重的笔触感。

4.2 线稿被 AI 改写:控制权重与采样步数的配合

有时候线稿出得很干净,但模型不老实,会把线条闭合成它自己理解的形状,甚至凭空多加几笔。这通常是 ControlNet 权重没压住模型先验。我把这个现象分成三种成因,处理方式完全不同。

第一种是权重不够,end_percent 又设得早,后半程采样失控。解决是把 weight 提到 1.0,end_percent 设回 1.0。第二种是提示词里的风格词过于强烈,比如写了 masterpiece 加一堆风格形容词,模型先验大于控制倾向,这时降低正向提示词里与「线稿」相悖的形容,让控制条件成为唯一强约束。第三种是采样步数太少,ControlNet 作用在一个很短的采样过程中,还没收敛就被截断,25 步如果出现结构漂移,提到 35 步看看。

我一般用的验证方法是固定同一张源图,只改 end_percent 做两组对比:一组 0.6,一组 1.0。如果 1.0 那组线条明显更贴合源图,说明之前就是约束区间不够;如果两组几乎一样,说明要动 weight。这个二分思路能快速定位是「控制力度」问题还是「约束时长」问题。

还有一类情况容易误判:你改了源图,但提示词没改。线稿内容变了,模型对提示词语义的响应也会变,有时看起来像控制失效,其实只是提示词和新线稿冲突了。换源图之后,正向提示词里的主体描述要同步换,比如源图从建筑换成汽车,提示词里就别再留着 building。

4.3 出图发灰发油:VAE 与采样器的常见误用

线稿场景最容易出的质量问题还不是线条,是底色发灰、线条发虚、整个画面像蒙了一层雾。原因通常不在 ControlNet,而在 VAE 和采样器配置。SD1.5 的 checkpoint 默认内置 VAE,但很多整合包会另外从 vae 目录加载,加载错版本就会出现灰蒙蒙的底色。

正确做法是让 VAE Decode 节点明确指向一个与 checkpoint 匹配的 VAE,比如 vae-ft-mse-840000-ema-pruned 这类通用 VAE。注意别把 SDXL 的 VAE 配给 SD1.5,通道数不一致会导致 decode 结果发灰或出彩色噪斑。判断 VAE 是否加载错的土办法:同一工作流里把 VAE Decode 换成内置 VAE,如果灰蒙感消失,说明之前加载的就是错版本。

采样器也会导致发灰。euler 和 dpmpp_2m 对 CFG 的响应不同,在 512 分辨率下,dpmpp_2m 配 CFG 7 明显比 euler 配 CFG 7 更干净。如果你的线条发虚,把 sampler_name 从 euler 切到 dpmpp_2m,同时把 scheduler 保持 normal。这两项改动成本极低,但经常能救回一次灰蒙蒙的失败批次。

scheduler 的选择也有讲究。normal 适合大多数任务,而 karras 会让采样曲线更激进,在线稿这种要求结构稳定的任务里反而容易产生色阶断裂。我的习惯是线稿流程固定 dpmpp_2m + normal + CFG 7,这样至少排除了两个变量,后续调线稿细节时不会干扰判断。

5. 常见问题排查:ControlNet 线稿流程的五个坑

这五个坑是我用 c0002.json 反复跑线稿时遇到频率最高的,每一条都按「现象 → 原因 → 解决」的方式记录。排查顺序有个大原则:先看环境和模型文件,再看节点连线,最后才动参数。环境问题往往无声无息,翻车得莫名其妙,反而是最容易栽跟头的地方。

5.1 ControlNet 加载失败:缺模型、缺 yaml 的两种表现

现象:ControlNetLoader 节点不爆红,但 Apply ControlNet 输出的一直是未受控条件,或者画布上模型下拉框显示为空。

原因:绝大多数是 controlnet 目录里放了 .pth 但没放同名 .yaml。ComfyUI 加载 ControlNet 时,yaml 决定了输入通道和结构定义,缺失时它用默认配置硬加载,过程不报错但结果失控。另一种可能:你下载的是 ControlNet 1.0 老模型,而 c0002.json 设计时按 1.1 写,老模型能加载但通道数不匹配,行为完全对不上。

解决:先看模型文件名,是 control_v11p_sd15_ 开头的 1.1 版本;再确认同目录有同名 yaml。如果只是缺 yaml,从模型仓库把对应的 yaml 下载放进同目录,重启 ComfyUI 即可。我每次补新 ControlNet 模型后都会跑一遍该目录的 ls,看文件对不齐就停下处理,这个习惯帮我省了很多次莫名失败的排查时间。

快速定位还有一个办法:在 ControlNetLoader 节点上右键选 Link to output,看模型信息卡里显示的 state_dict 键名。1.1 模型的键名里带 control_model,1.0 只有 control_embed,一眼就能分辨。

5.2 预处理器输出与生图尺寸不一致

现象:源图 1024×1024,KSampler 设为 512×512,出图线稿整体偏位或线条错位,像图被拉扯过。

原因:ComfyUI 对 ControlNet 输入会做一次缩放。预处理器在 1024 下提取边缘,采样在 512 下进行时,缩放插值会引入一到两个像素的偏差,线条越细越明显。特别是做白底黑线稿,线条本身就细,一点偏差立刻能看出来。

解决:把 Load Image 的尺寸、预处理的 resolution、KSampler 的宽高设成同一个值。我通常把源图长边缩到 768,短边等比,避免让 ControlNet 在两种尺度间做隐式缩放。如果必须用不同尺寸,至少保证宽高比例一致,不强制拉伸。比例不一致时线条会横向或纵向错位,这种错位不是权重能救的。

还有一个相关坑:很多人直接在 Load Image 节点后接 Upscale,把源图放大后再进预处理器。这样做的结果通常很差,因为放大后的插值边缘是虚的,Canny 会把虚边当成真边。正确做法是先用高质量缩放算法在外部把图处理好,再喂给工作流。

5.3 显存爆掉:SD1.5 也会 OOM

现象:点 Queue 后显存直接打满,ComfyUI 报 CUDA out of memory,进程崩溃或界面卡死。

原因:很多人以为 SD1.5 显存压力小,实际上 ControlNet 在 UNet 阶段额外占一份完整张量。当源图分辨率高、batch 大于 1 时,显存开销直接翻倍。线稿流程里预处理器占用也容易被忽视,Canny 在 1024×1024 上的特征图同样吃显存。

解决:先把 batch size 固定回 1,把源图长边控制在 768 以内,KSampler 尺寸从 1024 降到 768。如果还不够,启动参数加 --lowvram,或在秋叶整合包里切 medvram 模式。那些在意显存的人通常备份一份 c0002.json 的低分辨率参数版本用于批量出图,高分辨率版本只留给单张精修。

补充一个容易被忽略的点:同时开多个 ComfyUI 页面也会累积显存。每次 Queue 之后旧任务如果没有清理,显存不会立刻释放。连续出图太快导致 OOM 时,先等几秒让显存回收,再排下一个任务。批量验证脚本里我会在每个任务之间加 sleep,就是这个原因。

5.4 权重正确但线稿完全不生效

现象:weight 已经调到 1.0,源图也选了,但出图和没用 ControlNet 时完全一样,一点线稿的影子都没有。

原因:八成是 Apply ControlNet 的输出接错了 KSampler 输入。它应该接在 model 端口,而不是 latent_image 端口。也可能你用了两个 KSampler,控制条件接到前一个,取图用的是后一个,白搭。这类接线错误 ComfyUI 不一定报错,因为张量形状恰好兼容,你肉眼看不出来。

解决:把 Apply ControlNet 的输出引线从 KSampler 的 model 输入拔掉再重连一次,确认连线高亮的是 model。还不行就删除控制分支,只留 KSampler 出一次图,再把控制分支加回来出一次图,对比两次结果。如果两次结果完全一样,就是接线问题,跟权重无关。

顺手养成的习惯是:在 UI 上按住连线可以追踪这条线终点的端口类型,端口名和颜色会显示在状态栏。凡是接在 latent 上的控制线,大概率都是这个坑。c0002.json 原本是对的,但很多人在自己改图时拖线拖乱了。

5.5 出图偏色 / 发灰:VAE 加载不对

现象:线稿本身干净,但白底发黄或发灰,黑色线条不够黑,整体像隔了一层纱。

原因:SD1.5 的 checkpoint 内置 VAE 与单独加载的 VAE 版本不一致,或者加载了 SDXL 的 VAE。VAE Decode 过程中颜色空间映射出错,就会偏色。另一个原因是 CFG 拉太高,比如到 12 以上,高 CFG 会让色彩过饱和,白底泛灰、黑线泛白。

解决:VAE Decode 节点显式加载一个与 checkpoint 匹配的 VAE,别用 Auto 模式,或者直接把 VAE Decode 的输入改接到 checkpoint 的 VAE 输出。把 CFG 先降到 7 再看。我习惯在 c0002.json 里固定一个 VAE 文件名,不依赖默认值,因为默认值是绝大多数偏色问题的隐藏源头。

要区分是 VAE 问题还是 CFG 问题,做一个二步判别:先固定 CFG 为 7,看是否还发灰;还发灰就换 VAE;换 VAE 后恢复正常,说明是 VAE 版本不对。如果 CFG 降下来就正常,那你之前只需要解决 CFG 即可。这两个变量的耦合现象很常见,不拆开测只会加大排查难度。

6. 进阶技巧:把线稿工作流模板化,再批量验证参数

6.1 用 JSON 做模板:把节点参数固定成预设

c0002.json 本身就是工作流模板,但直接改它的参数再导出会污染原始文件。我会把「节点类型 + 参数」做成可复用预设:复制一份 c0002.json 为 template_lineart.json,里面固定好预处理器类型、ControlNet 型号、采样器和 VAE,只留源图和提示词作为变量。

{ "3": { "class_type": "ControlNetLoader", "inputs": { "control_net_name": "control_v11p_sd15_canny.pth" } }, "10": { "class_type": "KSampler", "inputs": { "steps": 25, "cfg": 7.0, "sampler_name": "dpmpp_2m", "scheduler": "normal" } } }

上面这段是 json 结构示意,实际 c0002.json 里节点 ID 不同,但结构一致。模板化的意义在于:换素材时只改 Load Image 和提示词,其余参数全部锁死,避免手滑把某次调好的阈值改乱。对批量生产线稿素材的人来说,模板比每次从零搭节点稳定得多,也能保证同一批出图风格统一。

6.2 批量验证参数:用脚本替换阈值做二次对比

新手调参是一张一张试,批量验证的做法是把阈值做成一个参数列表,循环生成多张结果再挑。我用一个简单的 Python 脚本配合 ComfyUI 的 API 模式,把 Canny 低阈值从 80 到 160 每 20 一档跑一遍,几分钟内就能看到哪些阈值产出最干净线稿。

import json import subprocess import time # 读取模板,逐个替换 low_threshold with open("template_lineart.json", "r", encoding="utf-8") as f: workflow = json.load(f) # 假设 Canny 节点 ID 是 17,实际以你的 json 为准 for t in [80, 100, 120, 140, 160]: workflow["17"]["inputs"]["low_threshold"] = t with open(f"canny_{t}.json", "w", encoding="utf-8") as f: json.dump(workflow, f, ensure_ascii=False, indent=2) # 用 ComfyUI API 提交工作流 subprocess.run(["curl", "-s", "-X", "POST", "http://127.0.0.1:8188/prompt", "-d", f"@canny_{t}.json"]) time.sleep(5) # 给显存一点回收时间,避免连续任务 OOM

脚本的关键是找到要替换的节点 ID,最好在 UI 上点开节点看标题里的数字 ID,别猜。多档对比的本质是「只改一个变量、其他锁死」,这样出图的差异只来自阈值变化,结论才干净。从那以后我每次卡在线稿粗细上,都强制走一遍批量阈值对比,而不是凭感觉猜一个值继续调。希望这套方法帮你在 c0002 工作流上少走几个来回。

本文还有配套的精品资源,点击获取

返回列表