ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

AI绘画工作流实战:模型选型、ComfyUI部署、LoRA训练与ControlNet控制

AI绘画工作流实战:模型选型、ComfyUI部署、LoRA训练与ControlNet控制 如果你是从2023年就开始折腾AI绘画大概还记得那时候的玩法有多简单下载一个SD1.5的checkpoint打开WebUI输入提示词等待出图完事。到了2026年这套逻辑被彻底打散了。Flux成为很多人的默认主力模型ComfyUI从一个只有极客愿意碰的节点编辑器变成了主流出图工具LoRA在每一次角色、风格、产品复刻中都绕不过去ControlNet更是从“高级技巧”变成了标准配置。说白了AI绘图生态已经从“选一个模型跑起来”升级成了“搭一条可复用、可控制、可微调的流水线”。这篇文章默认你已经见过AI绘图的样子但可能对全生态的选型、部署、训练、控制和排障还没有完全串联起来。下面会按顶层模型选择、ComfyUI部署、LoRA训练、ControlNet原理、完整工作流编排这几个大块展开最后附上几个高频翻车场景的完整排查过程。内容偏实操适合想让AI出图不再靠运气的读者。1. 2026年的牌桌SD与Flux谁才是你的主模型先明确一个前提Stable Diffusion和Flux并不是同一个东西的“新版本”它们走的是完全不同的底层层技术路线。你选哪个当主力会直接决定后续的LoRA能不能用、ControlNet好不好接、显存够不够烧。很多人在工作流里折腾半天最后发现不是操作有问题而是从一开始就选错了底座。1.1 从U-Net到DiT底层架构决定了整个生态的走向Stable Diffusion 1.5和SDXL走的是经典U-Net架构配合CLIP文本编码器。早期的SD1.5默认分辨率只有512x512到SDXL时代提高到1024x1024并且加入了更大的text encoder对自然语言的理解好了很多。SDXL为什么到现在还没死掉因为它的LoRA和ControlNet生态沉淀太厚了训练成本低社区里的controlnet模型、风格化LoRA、角色LoRA非常多随便拿一个出来就能跑出稳定的效果。Flux来自Black Forest Labs走的是DiT/MMDiT的Transformer路线文本编码器用了T5加CLIP的组合。它最直观的优势有三个一是对长句子的理解能力甩开SDXL一条街你说“一个穿红色汉服的女孩坐在窗边外面下着雨玻璃上有水珠”Flux能把这些元素基本都还原出来二是自然语言可以直接当提示词用不需要挤牙膏一样堆砌tag三是整体光影、皮肤质感、手部结构、文字渲染都有明显提升尤其对写实风格非常友好。但这并不意味着Flux全面替代SD。Flux的模型体积大全精度checkpoint动辄十几GB推理显存占用也高它的ControlNet和LoRA生态前两年刚开始规模化和SDXL的“什么都有”相比更像是一个“精而专”的新大陆。1.2 选型逻辑什么场景继续用SDXL什么场景无脑上Flux我自己的习惯是分场景用而不是只挂一个模型跑到底。需求场景推荐底座理由游戏角色三视图、多视角一致性SDXLControlNet姿态、深度类的支撑最成熟LoRA训练成本低写实人像、摄影感强、光影复杂的图Flux皮肤质感和自然光表现更好prompt理解力强电商产品图需要严格保持结构SDXL ControlNetTile、Depth类ControlNet选择多姿势和角度可控性高图文排版、文字海报Flux英文/中文文字渲染能力远超SD系列动漫风格、二次元角色SDXL或Flux都有对应微调模型看你要的是“经典赛璐璐风”还是“厚涂细节风”另外提一句VAE。很多人打开“sd常用vae”这个关键词但不知道它到底解决什么问题。VAE是变分自编码器负责把Latent空间解码成像素图。选错了或者漏了VAE最常见的结果就是出图灰蒙蒙、偏色、对比度不对。SD1.5时期大家习惯外挂一个vae-ft-mse-840000SDXL大多使用内置的sdxl-vaeFlux则在模型内部集成了VAE不需要额外挂。判断是否需要外挂VAE最简单的方法是看你的checkpoint描述里是否写了“包含VAE”以及出图颜色是否正常。2. ComfyUI不是难是“可复现”三个字值钱过去两年里ComfyUI从一个小众工具变成了AI绘图的工业标准。很多人第一次打开它看到一堆节点连线会被吓到觉得不如WebUI直观。但用过一段时间后你就明白ComfyUI的核心价值不是“看起来酷”而是它把每一次出图都变成了一条可复现、可调整、可保存的流水线。2.1 整合包、Desktop、源码三条部署路线的真实体验部署ComfyUI现在有三条主流路线选择取决于你的操作系统和动手意愿。第一条是Windows上最流行的秋叶一键整合包。它的好处是帮你把Python环境、依赖、常用自定义节点、模型目录都整理好了下载解压就能用对新手非常友好。但请注意整合包不等于免维护。秋叶版本更新需要手动覆盖或者重新下载新包如果你加了大量自定义节点升级时偶尔会出现版本冲突。第二条是官方ComfyUI Desktop。2026年的桌面版已经比早期版本稳定得多自带节点管理、模型下载入口和工作流浏览功能。适合不想折腾环境、希望跟着官方更新走、又不想维护一堆配置的人。它本质还是那个ComfyUI只是把部署和更新的体验做成了现代应用的样子。第三条是由源代码手动部署。如果你用的是Ubuntu服务器、Windows WSL或者有洁癖不想用整合包直接从GitHub拉代码是可控性最高的方式。以Ubuntu为例大致流程是git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python main.py --listen 0.0.0.0 --port 8188如果你有NVIDIA显卡建议先装好CUDA版本的PyTorch再装requirements否则pip可能会默认装CPU版跑图慢到怀疑人生。Ampere以上架构torch版本的cu121或cu124都行比较老的显卡可以搜对应兼容版本。这一步属于“部署十分钟省下二十小时”的关键环节。2.2 模型放错位置等于白下载目录结构与加载逻辑ComfyUI对模型放置位置的约束比WebUI严格。新手最常见的“为什么我下载了模型但节点里看不到”十有八九是把文件放错了目录。默认模型的根目录是ComfyUI/models下面按类型分多个子目录checkpoints放完整的大模型比如SDXL、Flux的safetensors文件对应CheckpointLoader节点。unet放拆分出来的UNet/DiT文件。新版Flux模型经常拆成unet、clip、vae三个部分加载方式是分开的不是塞进checkpoints。clip放CLIP和T5文本编码器。vae放VAE模型。loras放LoRA文件。controlnet放ControlNet模型。upscale_models放放大模型比如ESRGAN、4x-UltraSharp。我见过最多的坑是把Flux的safetensors文件下载完以后丢进了checkpoints然后在CheckpointLoader里死活找不到。原因就是Flux有些版本需要放到unet目录并通过UNETLoader加载再单独加载CLIP模型。所以下载模型之前先看清楚发布页说明尤其是“文件放置路径”“是否需要fp8版本”这些信息。2.3 从别人工作流开始但要学会“拆”而不是“抄”ComfyUI的社区工作流分享非常活跃你随便复制一个JSON文件拖进ComfyUI就能看到别人的完整流程。这确实是上手最快的路径但我建议你在跑通以后干一件事右键→“Convert to workflow”把每个组件的输入输出都看一遍把不必要的节点删掉把写死的参数改成可调节的输入。原因很简单别人的工作流是为他的显卡、他的模型、他的目标图服务的。你直接抄过来大概率遇到“模型缺失”“节点报错”“显存不足”。比如一个Flux图生图工作流里作者可能用了整张16GB显存都吃紧的自定义放大节点你的显卡只有12GB不改根本跑不动。接入自定义节点也是一样。ComfyUI Manager是现阶段最省事的管理器它能扫描缺失节点、一键安装、检查更新。但任何自动安装都可能引入依赖冲突装完以后重启ComfyUI才能生效。如果某个节点报错先不要急着重装去GitHub看Issues里有没有同样的问题很多坑作者已经给了答案。3. LoRA训练的底层逻辑先准备好数据再谈调参LoRA是当前AI绘画生态里最值得花时间掌握的能力。它让普通用户不必重新训练几十GB的大模型也能把某个角色、某种画风、某个产品造型固化下来。但很多人在训练LoRA时过于关注“参数”忽略了真正的核心是“数据”。参数调整只能救回一部分小问题数据质量决定上限。3.1 LoRA文件里究竟存了什么格式、命名与加载LoRA的全称是Low-Rank Adaptation思想是在冻结原模型权重的条件下训练一组低秩增量矩阵。训练完成后这组增量被打包成一个独立的文件推理时以一定的权重叠加回原模型。所以LoRA文件本身只有几十MB到两百MB却能让模型产生肉眼可见的风格偏移。目前主流的LoRA文件格式是.safetensors它比早期的.ckpt更安全不会执行任意代码加载时带类型校验。你用解压工具或者专门的查看器打开一个LoRA文件会看到里面的张量名比如lora_unet_down_blocks_0_attentions_0_transformer_blocks_0_attn1_to_q.lora_up.weight这类结构它们就是低秩矩阵的具体参数。文件本身不保存“触发词”触发词是训练时写入训练配置或者由作者在说明里标注的。如果你下载别人分享的LoRA一定要先看它对应的触发词是什么否则加载了也不会改变出图风格。在ComfyUI里加载LoRA很简单用LoraLoader节点把模型和LoRA接起来手动设置权重即可。多个LoRA可以叠加但叠加时权重不要一上来全部拉满建议从0.5到0.8逐个试。3.2 一套可落地的LoRA微调流程从20张图到出效果假设我要训练一个“赛博国风少女”的风格LoRA目标是在不同姿势和场景下都能稳定出现这个角色设定。我会按下面流程走。第一步准备数据集。数量不求多但质量要严。20到40张图片通常就够一个角色风格类LoRA的起步量。图片必须是同一角色的不同角度、不同表情、不同景别尽量不要混入“站桩正脸大头照”这种单一构图。图片分辨率统一裁剪到1024x1024SDXL或Flux时代或512x512SD1.5时代再用清晰度筛选工具把模糊图剔掉。第二步打标和触发词。把所有图片放进wd14 tagger或者自己写描述性的自然语言。角色风格类LoRA最好设定一个低频不常见的触发词比如“sgl_character”而不是“chinese girl”因为常见词容易被基础模型里已有的概念带走。每张图的描述包括触发词、动作、表情、服装、环境等内容既不能只有触发词也不能贴满所有干件。第三步训练参数。这里没有“唯一正确”但有一个稳定起步参考参数参考值说明分辨率1024与出图分辨率尽量一致Epoch10-20数据量少时多跑几轮每轮重复5-8数据量×重复数约等于每轮图片数Network Dim16-32Dim越大表示能力越强也越容易过拟合Network Alpha4-16通常为Dim的一半或更低学习率1e-4UNet和Text Encoder可分别设优化器AdamW8bit显存占用小稳定噪声偏移0.05-0.1提升明暗光影表现第四步验证。训练完成后不要急着发图。在ComfyUI里摆一个简单的流程固定种子固定提示词仅变化LoRA权重从0.4到1.2的几组对比。如果权重0.6时已经出现角色特征0.8时更强且没有糊脸那就说明训练量合适如果1.0时脸部花纹糊成一团大概率过拟合了。3.3 训练中真正容易翻车的地方最容易被忽视的问题是“训练集和推理底座不一致”。比如你用SDXL的底模型训练LoRA推理时却挂到一个SD1.5的checkpoint上结果自然是完全无效。Flux训练LoRA也要注意使用不同量化版本的底模训练时尽量用原版或fp8版本不要太疯狂地用GGUF量化版当训练底模否则精度偏差会保留在LoRA里。还有一个很常见的现象是“学过拟合虽然画得像但背景、姿势、画面构图全部僵化”。这是因为数据集的多样性不够。如果训练集里全是宠物正面特写最终生成的角色也会像大头贴一样永远直勾勾盯着镜头。数据集的多样性比数量更重要这是我重复多少遍都不为过的经验。4. ControlNet的代码视角怎么做到“指哪打哪”ControlNet对AI绘画的价值在于让“构图可控”从玄学变成了工程。2023年ControlNet刚出来时大家觉得这是个神奇的插件到2026年它已经成了任何严肃工作流的必选项。理解它的原理你才能知道为什么某些工作流里它有效为什么另一些场景里它失灵。4.1 前向传播里多了一个“影子网络”从原理上说ControlNet在原始扩散模型旁边增加了一个可训练的副本分支输入是条件图比如Canny边缘图、深度图、姿态骨架输出是注入到主网络各层特征中的控制信号。这个分支不会改变原始模型的参数权重而是充当一个“影子网络”用条件信息不断修正去噪的方向。ControlNet论文里有个关键设计叫Zero Convolution也就是零初始化的卷积层。训练早期控制分支的输出是接近全零的不会破坏原模型已经学好的能力随着训练推进控制信号逐渐增强模型才开始把条件图“翻译”成结构。这就像教一个人画画时先让他模仿轮廓但最初不会抢走他原有的绘制习惯。如果你想从代码层面理解它可以看一下HuggingFace的diffusers实现关键调用大概是这样from diffusers import ControlNetModel, StableDiffusionControlNetPipeline import torch controlnet ControlNetModel.from_pretrained( lllyasviel/sd-controlnet-canny, torch_dtypetorch.float16 ) pipe StableDiffusionControlNetPipeline.from_pretrained( stabilityai/stable-diffusion-xl-base-1.0, controlnetcontrolnet, torch_dtypetorch.float16 ) pipe.to(cuda) image pipe( prompta woman in hanfu standing by the window, negative_promptlowres, bad anatomy, imagecanny_image, controlnet_conditioning_scale0.8, num_inference_steps30, ).images[0]实际用ComfyUI时不需要写Python代码但理解这个调用会帮你判断“controlnet_conditioning_scale”到底控制的是什么它控制的是控制信号注入时的整体强度而不是透明度。权重越高模型越服从条件图同时留给提示词的自由度越低。4.2 五个高频预处理器的玩法与适用边界ControlNet模型只是一半另一半是“预处理器”它负责把人眼能理解的图转换成模型能使用的条件图。推荐每个做AI绘画的人都熟悉这几类Canny边缘适合线稿、建筑、界面设计、需要严格轮廓的场景。Canny对噪声比较敏感阈值设置不当会出现碎边。Depth深度适合需要场景前后关系、人物与背景融合自然的场景。用Depth预处理后模型会按照深度关系生成不会出现人在前面但背景却穿过身体的问题。OpenPose骨架适合人物姿势控制。想让人物摆出特定动作用OpenPose提取骨架再交给ControlNet是游戏角色设计和插画里最常用的组合。MLSD直线适合有大量直线结构的场景比如室内设计、工业产品、城市街景。Tile分块适合图生图、重绘、放大、风格迁移。它把原图切成小块作为引导让模型在保留原始构图和色调的基础上补细节是做高清修复的关键节点。这几种预处理器可以叠用。比如先给角色定一个OpenPose骨架再叠一层Depth来控制人物和背景的空间关系结构就非常稳了。4.3 在ComfyUI里组装ControlNet权重不是越大越好ComfyUI里接ControlNet的流程其实很短加载ControlNet模型文件加载参考图通过预处理器节点生成条件图再用ControlNetApply节点把它接到采样器的模型输入上。真正需要调的是三个参数控制权重、起始step、结束step。我个人的经验是控制权重在0.5到0.9之间通常最灵活。超过1.0图容易生硬人物的五官会被条件图绑死低于0.4控制信号几乎只是心理安慰。起止step也很关键。控制权重固定在0.7时如果在整个采样周期里从头到尾都强控制细节可能被锁死更合理的做法是让ControlNet在采样的前50%到60%阶段发挥主要作用后半段放开让LoRA和提示词自由发挥细节。这相当于“先用草图定结构再上色修细节”的工作流程。如果你发现ControlNet“完全没起作用”不要急着怀疑模型坏了。先检查预处理器输出的条件图是否清晰正确再检查ControlNet模型和底模是否匹配最后检查权重是否被不小心填成了0.01。5. 把SD/Flux、ComfyUI、LoRA、ControlNet串成一条完整工作流单看模型、界面、微调、控制每一步都有大量教程但真正到了实际项目里需要把它们组合成一条完整的流水线。我从自己这几个月反复在跑的角色概念图流程里抽一个典型的例子展示每个节点为什么存在以及参数怎么取舍。5.1 实战节点编排一张概念海报的完整路径假设项目需求是生成一张“赛博国风少女”的半身概念图要求人物保持某个特定姿势背景带城市霓虹灯效果画风符合我训练好的LoRA风格。我选SDXL为底座因为我的角色LoRA是从SDXL微调来的且SDXL的ControlNet生态更稳。工作流顺序大致是CheckpointLoader加载SDXL底模这里我会直接在模型文件名里标注“sdxl_base”方便区分Flux。LoraLoader加载角色LoRA权重先设0.75。左边拉一条ControlNet分支加载参考姿势图用OpenPose预处理器提取骨架再用ControlNetApply节点把骨架注入采样器权重0.6起始step 0.0结束step 0.55。再拉一条ControlNet分支加载城市街景参考图用Depth预处理器提取深度关系权重0.5起始step 0.0结束step 0.6。提示词用自然语言加少量关键tag组合例如“sgl_character, cyberpunk hanfu girl, neon city background, soft light, high detail”。空Latent设为1024x1024。如果想出竖构图就设896x1152这类的SDXL友好分辨率不要一下子拉到1536。采样器选DPM 2M Karras或Euler a步数28到32CFG 7。固定随机种子并记录方便复现。VAE解码后通过Tile ControlNet加图块放大把分辨率提高到2048再输出成品图。这套流程里两条ControlNet并不是越多越好。姿势和深度已经覆盖了人物骨架和空间结构剩下的颜色风格交给LoRA和提示词控制信号给得太杂反而会互相打架。5.2 参数取舍与“可控性”的心理预期很多人在工作流里追求“百分百可控”但AI绘画本质上是生成模型不是CAD建模。ControlNet让构图稳定已经算巨大进步但它取代不了设计师做最终决策。比如你想要人物手部完全不崩ControlNet提供了一个控制基础但最终手部质量和LoRA的训练质量、底模能力高度相关。还有一个常见误区是“固定种子就等于完全复现”。实际上换一个LoRA权重、换一个采样器、甚至换一次显卡驱动最终结果都会变。种子的作用是在同一套环境里让结果可复现而不是跨环境保证一致。因此我在每次出图时都会开启保存工作流图像或者在PNG信息里写入完整节点配置。像ComfyUI里的“Export workflow”功能和WebUI的PNGInfo都建议习惯性用起来。6. 高频翻车现场几个我能倒背如流的报错与修复写到最后这部分是因为我今年在给朋友远程排查问题时发现大量新手遇到的问题高度重复。每次都是那几个原因但每次换个马甲出现。我把最常碰到的几类问题拆成案例复盘即拿即用。6.1 模型不显示、VAE偏色、显存不足的三连排查第一个典型案例下载了某Flux模型丢进ComfyUI刷新模型列表可加载器里依然没有。排查步骤按顺序走先确认文件是否完整用文件大小和官方SHA256对比再确认放置目录。第二个典型案例SDXL出图整体发灰皮肤像蒙了一层雾。原因基本指向VAE。SDXL部分模型内置了VAE但有些第三方微调把VAE剥离了这时你需要手动挂一个sd-x-vae或者内置vae。解决方法是在ComfyUI里新增VAELoader节点把输出接到采样器之后的VAEDecode。如果模型自带VAE就不需要额外挂挂了反而可能出问题。第三个典型案例出图到一半报“CUDA out of memory”。直接降分辨率是最快的出路但更推荐做三件事把CFG和步数稍微降低打开ComfyUI的--lowvram或--medvram模式以及把放大步骤放到单独一次生成里而不是一开始就开满分辨率。Flux类的模型尤其要留意fp8版本极大降低显存占用同时画质损失肉眼几乎看不出来。症状常见原因快速修复模型列表找不到文件放错目录按模型类型移动到checkpoints/unet/loras等目录出图发灰偏色VAE缺失或不匹配手动挂VAE或换内置VAE的checkpoint显存溢出分辨率过高、pipeline过重降低分辨率、用fp8/GGUF、启用低显存模式ControlNet无效预处理器不对、权重太低检查条件图调权重0.6-0.9LoRA加载后无变化底模不匹配或触发词错误确认LoRA训练基座和加载基座一致加上触发词6.2 ControlNet“无效”和LoRA“糊脸”的真实原因ControlNet无效的案例我至少处理过十次。有一位网友发来一张建筑线稿说他用Canny ControlNet生成出来的完全和线稿没关系。等我看到他上传的“控制图”才发现他直接把原照片丢进了ControlNet完全没有经过Canny预处理器。ControlNet的输入是条件图不是原图如果你不提供条件图它没法判断该学哪些结构。说得直白一点ControlNet不是“参考图重绘”它需要的是“结构图灌入”。LoRA糊脸的问题则往往出在权重和训练数据上。一个训练充分的LoRA在0.6到0.9之间都能保持角色特征。如果你开到1.2倍甚至1.5倍还不满足糊脸几乎是必然。另外训练集如果是网上抓的压缩图面部纹理细节早就丢失了LoRA再怎么调参也救不回来。训练前把图片做一次高质量裁剪和去压缩修复是很多人忽略但性价比极高的一步。6.3 让成果可复现元数据与工作流备份最后分享一个我非常提倡的习惯任何时候跑出满意的一组图第一时间把工作流JSON和种子信息保存下来。ComfyUI提供“Save”功能把工作流直接嵌入PNGWebUI也有PNG Info。你可以把图片文件当作存档容器但更稳的做法是额外导出一份工作流JSON放在同一个项目文件夹里。我现在还会给文件名规范化比如“2026-05-12_chinese-xia-style_seed-12345_v1.png”这样的结构。这样做三个月后再想复刻当时的某张图直接拖进ComfyUI加载对应模型和LoRA就能一键恢复整个流程。省下来的时间比当初整理文件花的几分钟多得多。
返回列表