1.1 文生图实战的核心目标与常见应用场景
我刚开始接触文生图的时候,脑子里只有一个念头:把文字变成画面。这听起来像魔法,实际操作起来更像是一门手艺。文生图实战的核心目标,就是让AI理解你的描述,生成符合预期的图像。你不需要会画画,需要懂得如何与模型沟通。我常跟身边的设计师朋友说,这就像学一门外语,你说得越清楚,对方越能懂你。
应用场景我见过太多。自媒体人用它做封面图,省下找图的时间。电商卖家拿它生成产品场景图,不用租摄影棚。游戏团队用文生图快速产出概念草图,一天能试几十个方向。我自己最常用的场景是给文章配图,输入一段描述,几秒钟就能拿到风格统一的插图。有个做独立开发的朋友,甚至用文生图做APP的启动页素材,成本几乎为零。
这些场景背后有一个共同点:你不需要成为专家,需要搭建一个可用的环境。环境不稳,后面所有技巧都是空谈。我见过太多人卡在安装这一步,还没开始就放弃了。这一章我会把环境搭建的每个细节都讲清楚,让你少走弯路。
1.2 Stable Diffusion 文生图实战教程:本地与云端环境选择
选本地还是云端,这个问题我被问过无数次。本地部署的好处是自由,想跑什么模型就跑什么模型,不用担心网络和额度。坏处是吃硬件,显卡至少6GB显存起步,8GB以上才比较舒服。我用的那台机器是RTX 3060 12GB,跑512x512的图大概两三秒一张,体验还不错。如果你手头有游戏本或者台式机,可以先看看显卡型号,再决定要不要本地装。
云端适合没有好显卡的人。Google Colab免费版能跑,容易断线,适合临时测试。AutoDL、揽睿星舟这些国内平台按小时计费,4090一小时几块钱,生成速度飞快。我出差时就用云端,打开浏览器就能干活,不用背着沉重的笔记本。云端还有个好处:预装环境,省去配置CUDA和PyTorch的麻烦。Stable Diffusion WebUI有一键包,云端镜像也很多,选对镜像能节省大量时间。
我自己的习惯是本地为主,云端为辅。本地跑日常测试,云端跑大批量或者高分辨率任务。你要是刚入门,可以先从云端开始,花几块钱体验完整流程。等确定要长期玩,再考虑升级显卡或者组装一台专用机器。环境是工具,不是目的,别在配置上耗掉所有热情。
1.3 模型、VAE、CLIP与常用插件的准备
模型是文生图的灵魂。Stable Diffusion 1.5、2.1、SDXL,还有各种社区微调模型,比如DreamShaper、Realistic Vision、Anything V5。我硬盘里存了十几个模型,每个擅长的风格不同。写实类用Realistic Vision,二次元用Anything,通用场景用DreamShaper。下载模型去Civitai或者Hugging Face,注意文件格式,.safetensors比.ckpt更安全。文件放进models/Stable-diffusion文件夹,刷新WebUI就能看到。
VAE负责色彩和细节,有些模型自带VAE,有些需要单独挂载。我常用vae-ft-mse-840000,能改善画面发灰的问题。CLIP是文本编码器,通常集成在模型里,不需要单独下载。插件才是扩展玩法的关键。ControlNet让你控制人物姿态和线条,ADetailer自动修复脸部崩坏,Dynamic Prompts帮你批量生成提示词。我在extensions文件夹里装了七八个插件,最常用的就是这三个。
装插件的方法很简单,在WebUI的Extensions标签页里,输入GitHub地址,点击Install。重启界面后就能用。注意插件版本要和WebUI兼容,不然会报错。我有次装了旧版ControlNet,结果生成时一直报错,查了半天才发现是版本问题。建议定期更新,别追最新,稳定版最省心。模型和插件准备好,你才算真正拥有了文生图的工具箱。
1.4 首个文生图任务:从输入到输出完整流程
打开WebUI,界面看起来复杂,其实核心就几个区域。左上角选模型,下面输入提示词,右边调参数。我头一回生成时,输入了“a beautiful girl, masterpiece, best quality”,点击Generate,等了十几秒,出来一张模糊的图。当时挺失望,后来才知道提示词太简单,步数也太低。现在我会写得更具体,比如“a young woman with long black hair, sitting in a cafe, soft lighting, photorealistic, 8k”。负向提示词里填“lowres, bad anatomy, extra fingers”,能避免很多崩坏。
参数方面,采样器选DPM++ 2M Karras,迭代步数25到30,CFG Scale设为7。分辨率512x512起步,想更清晰就开高分辨率修复。种子可以固定,方便对比不同提示词的效果。我习惯一次生成4张,挑最好的一张。生成完成后,图片会保存在outputs/txt2img-images文件夹里。你可以直接拖拽图片到PNG Info,查看它的完整参数,这对复现很有帮助。
整个流程走一遍,你就能体会到文生图的乐趣。我带的学员里,有人头一回就生成出惊艳的图,也有人折腾一下午才出一张能看的。这很正常,AI绘画有随机性,多试几次就能找到感觉。环境搭好,模型装好,提示词写清楚,参数调合理,剩下的就是不断练习。文生图实战没有捷径,每一步都有方法可循。
2.1 提示词结构:主体、动作、环境、风格、画质
我一开始写提示词,基本靠感觉。想到什么词就往上堆,结果出来的图跟我脑子里想的差十万八千里。后来我总结出一个笨办法,但特别管用:把提示词拆成五块来写。主体是谁或者是什么,动作在干什么,环境在哪里,风格像谁的作品,画质要什么级别。这五块写清楚,图起码不会跑偏太远。
举个例子。我上个月想生成一张“女孩在雨天街头撑伞”的图。第一次写的是“a girl with umbrella, rain, street”。出来的图是一个模糊的人影,伞还是歪的。后来我改成:“a young woman wearing a beige trench coat, holding a transparent umbrella, walking on a wet city street, rain drops visible, cinematic style, shot on 35mm film, soft bokeh background, 8k detailed”。主体是young woman,动作是holding umbrella和walking,环境是wet city street,风格是cinematic加35mm film,画质是8k detailed。这张图的质量直接上了一个台阶。
五块结构不一定要按顺序写,但每一块都要照顾到。缺了主体,模型不知道画谁。缺了环境,背景就是一团糊。缺了风格,出来的东西可能像十年前的游戏截图。我习惯把画质关键词放最后,像“masterpiece, best quality, 8k, highly detailed”这类,属于通用增强词。但别加太多,堆多了反而会让画面过饱和或者变得油腻。五块框架是骨架,具体填什么肉,得看你的需求。
2.2 关键词权重、括号语法与负向提示词
权重这个东西,我摸索了好久才搞明白。在WebUI里,你写(word:1.3)就是给这个词加权重,模型会更重视它。写[word]或者(word:0.7)就是减权重。我生成人物特写的时候,会在眼睛或者嘴唇上加权重,比如(detailed eyes:1.2),出来的五官会精细很多。你要是发现某个元素总是被忽略,先别急着改提示词,试试给它加个权重。
括号语法在WebUI和ComfyUI里略有不同。WebUI支持圆括号、方括号、花括号嵌套,花括号一层相当于乘1.05。但我个人不推荐用太多嵌套,记起来麻烦,调试也费劲。直接用(词:数值)最直观清晰。权重的范围我一般控制在0.5到1.5之间。超过1.5容易让画面出现奇怪的扭曲,低于0.5基本等于没写。有一回我手滑写了个(fire:2.0),结果整个画面烧起来了,完全没法看。
负向提示词是另一把钥匙。我最常用的负向词包括“lowres, bad anatomy, bad hands, extra fingers, missing fingers, cropped, worst quality, low quality, jpeg artifacts, blurry”。这些词能挡掉大部分崩坏。生成写实人物时,再加“cartoon, anime, 3d render”。生成二次元时反过来,加“photorealistic, realistic”。负向提示词不是越多越好,写太多会把画面压得很平。我一般控制在十个词以内,根据题材微调。负向词的作用是设底线,不是画天花板。
2.3 文生图提示词技巧:模板化、变量化与迭代方法
每次从零写提示词,效率太低。我后来建了几个模板文件,按题材分类。人物模板长这样:[主体描述], [动作], [服装], [环境], [光线], [风格], [画质]。场景模板是:[地点], [时间], [天气], [氛围], [风格], [画质]。用的时候把方括号里的内容替换掉就行,省去重新组织语言的功夫。模板不是死板的,是给你一个起手式,让你不用每次都面对空白输入框发呆。
变量化是我从编程里借来的思路。比如我想测试同一个场景下不同光线的效果,就把光线部分写成变量:{golden hour, blue hour, neon lights, candle light}。WebUI里用Dynamic Prompts插件,ComfyUI里用文本节点,都能实现变量替换。一次跑四张图,每张光线不同,省时省力。我还会把人物发型、服装颜色、背景元素都做成变量池,随机组合能撞出不少意外惊喜。这种方法特别适合做系列图,风格统一,细节有变化。
迭代方法是我最想强调的一点。别指望一次就写出完美提示词。我的做法是:先写一版,生成四张,找一张最接近预期的。然后固定种子,微调提示词里的两三个词,再生成四张。对比看看变化在哪里。好的方向就保留,坏的方向就回退。这个过程像剥洋葱,一层一层往里走。有时候改十几版才能达到想要的效果。我电脑里有个文件夹叫“提示词迭代记录”,每次重要项目都会存下每一版的提示词和对应图片。回头翻看,能清楚看到自己是怎样一步步接近目标的。
2.4 常见题材提示词范式:人物、场景、产品、概念设计
人物题材我写得最多。写实人物的话,提示词要细到皮肤质感、面部特征、眼神方向。我常用“detailed skin texture, pores visible, natural lighting, sharp focus on eyes”。二次元人物则要强调线条和色彩,比如“clean lineart, vibrant colors, cel shading, anime style”。不管哪种,人物姿态要写清楚:standing, sitting, walking, looking at viewer, profile view。我有次忘了写“looking at viewer”,结果生成的人物全部在看别处,白跑好几轮。
场景题材的重点在空间层次。前景、中景、背景最好都有交代。我写室内场景会用“foreground with a wooden table, midground showing a large window, background with city skyline”。室外场景要写天气和时间,比如“misty morning, soft fog, sun rays piercing through trees”。景别也要指定,wide shot、medium shot、close-up,出来的构图完全不同。我习惯在场景提示词里加一两个人物作为比例参照,画面会更有故事感。
产品图讲究干净和质感。背景通常用纯色或者渐变,光线用柔光箱效果。我常用“product photography, studio lighting, softbox, clean background, sharp details, commercial shot”。产品本身要写材质:matte, glossy, metallic, transparent。概念设计就自由多了。我一般会混合多个风格词,比如“cyberpunk meets art nouveau, intricate details, concept art, trending on artstation”。概念设计不怕夸张,怕的是没特点。我会加一些非常具体的元素描述,比如“floating islands connected by glowing chains”,让模型有明确的方向。
2.5 提示词问题诊断:崩坏、畸变、风格偏离与语义冲突
崩坏是最常见的问题。人脸扭曲、手指多根、肢体错位,这些基本靠负向提示词和ADetailer插件解决。我会在负向里写“bad anatomy, extra fingers, fused fingers, mutated hands”。如果还崩,就降低CFG Scale,或者换一个更擅长人物的模型。有时候崩坏是因为分辨率太低,512x512生成全身像,脸部只有几十个像素,模型根本画不出细节。这种情况开高分辨率修复,或者直接生成768x768以上。
风格偏离挺让人头疼。你写“watercolor painting”,出来却像油画。原因可能是模型本身偏向某种风格,或者风格词权重不够。我会把风格词提前,比如“watercolor painting, soft washes, paper texture, a girl in a garden”。把风格放在主体前面,模型会优先考虑它。另一个办法是换模型,用专门训练过水彩风格的checkpoint。语义冲突是提示词自己打架。比如“daylight”和“night”同时出现,模型不知道听谁的。还有“realistic”和“anime style”放一起,出来的图会四不像。我每次写完提示词会通读一遍,看有没有互相矛盾的词。有的话就删掉一个,或者用权重区分主次。诊断问题的过程就是理解模型的过程,你越懂它,它越听话。
3.1 采样器、迭代步数与CFG Scale的实战影响
采样器列表第一次摆在面前的时候,我盯着那一串名字看了很久。Euler、Euler a、DPM++ 2M、DPM++ 2M Karras、DPM++ SDE Karras、DDIM、LMS、Heun……每个名字都像暗号。我当时心想,随便选一个不就行了。后来的经历告诉我,选错采样器,同一组提示词出来的图能差出一个档次。我花了三天时间,固定提示词和种子,把WebUI里所有采样器跑了一遍,出图存在同一个文件夹里对比。结果很直观。
Euler a出来的画面偏柔和,线条圆润,二次元插画用它特别顺手。DPM++ 2M Karras的细节明显更锐利,写实人像的皮肤毛孔和发丝都能立起来。DPM++ SDE Karras带一点胶片颗粒感,概念设计和大场景用它有电影味。我现在打开WebUI的第一件事就是确认采样器。写实类走DPM++ 2M Karras,二次元走Euler a,场景概念走DPM++ SDE Karras。这三条是我试出来的舒适区。
迭代步数我犯过一个典型的新手错误。我以为步数越高细节越丰富,直接把滑块拉到150。出图等了快两分钟,画面反而糊了,像蒙了一层雾。模型在20到30步之间就基本收敛了,多出来的步数只是在原地打转,有时候还会把已经画好的细节磨平。我现在的设定是写实28步,二次元20步,概念设计35步。低于15步会明显粗糙,高于40步收益极小。步数这个参数,够用就好,不是越多越好。
CFG Scale是我调整最频繁的一个值。它控制模型对提示词的听话程度。默认7,很多人从来不改。我试过才知道,写实人像在CFG 5到6之间皮肤最自然,不会出现那种塑料感。二次元可以拉到7到9,线条更硬朗,颜色更艳。CFG超过12之后,画面开始发焦,颜色溢出,像烤过头的面包。CFG低于3,模型基本不听提示词,自己画自己的。我现在写实用5.5,二次元用7.5,概念设计用8。换采样器的时候CFG的甜点区会漂移,我会重新跑一组对比确认。
3.2 分辨率、宽高比、批次与随机种子控制
分辨率这个坑我掉进去过。SD 1.5的原生训练分辨率是512x512,SDXL是1024x1024。我早期直接生成1920x1080的图,出来的人有两个头,腿从肩膀那里长出来,场面相当惊悚。模型没见过那么大的画布,它不知道多出来的像素该往哪里填内容。我现在的流程是先用原生分辨率出图,确认构图和内容没问题,再用高分辨率修复放大。直接生成大图这件事,我基本不做了。
宽高比影响的是构图逻辑。16:9适合风景和电影感画面,9:16适合手机壁纸和竖版海报,1:1适合头像和产品图。我在提示词里会加“wide shot”或者“vertical composition”来配合宽高比设置,让模型知道画面往哪个方向延展。SDXL在1024x1024附近表现最稳,SD 1.5在512到768之间比较安全。超过这个范围,崩坏概率会明显上升。我有一次生成2048x2048的图,画面直接变成了抽象画,什么东西都认不出来。
批次控制是我做系列图时候的效率工具。Batch count和Batch size是两个不同的概念。Batch count是分几轮跑,Batch size是一轮同时跑几张。Batch size设太高会爆显存,我一般设1到4。Batch count可以设大一些,8或者16,用来做筛选。我的习惯是一次出8张,从里面挑1到2张继续迭代。这样比一张一张出再一张一张看要快很多,尤其适合测试新提示词的时候。
随机种子是我做复现实验的锚点。种子固定了,同样的参数和提示词就能得到同样的图。我每次找到一个满意的构图,第一件事就是记下种子值。后面微调提示词的时候,固定种子能让我清楚看到变化是哪个词带来的,而不是种子随机跳造成的。种子设为-1就是完全随机,每次都不一样。固定种子加微调参数,构图基本稳定,细节会跟着参数变。这个特性在调试的时候特别顺手。不记种子的话,回头想复现一张图真的会抓狂,我经历过那种翻遍文件夹找不到的感觉。
3.3 Checkpoint、LoRA、Embedding与风格迁移
Checkpoint是模型的主心骨,它决定了出图的基本风格和画质天花板。我电脑里存了十几个Checkpoint,按题材分文件夹放。写实类用Realistic Vision和ChilloutMix,二次元用Anything V5和Counterfeit,概念设计用DreamShaper和ReV Animated。每个模型的脾气不一样,有的擅长人脸,有的擅长建筑,有的对提示词特别敏感。换模型就像换镜头,同样的场景拍出来味道完全不同。我建议先把一个模型用熟,摸清它的长处和短板,再慢慢扩展。
LoRA是我最常用的微调工具。它像给模型戴上一副特定风格的眼镜。文件不大,几十到几百MB,加载快,对显存影响小。我常用LoRA来固定人物长相、服装风格或者画风。想生成一个特定的IP角色,直接用对应的LoRA,比写几百个提示词描述外貌要准得多。LoRA权重一般设在0.6到1.0之间。多个LoRA叠加的时候总权重别超过1.5,不然画面会打架。我试过同时挂三个LoRA,出来的图四种画风在抢地盘,完全没法用。
Embedding通常用来做负向提示。最出名的是EasyNegative和BadHands,它们把常见的崩坏特征打包成一个词。我在负向提示词里加EasyNegative之后,手指崩坏的概率肉眼可见地降低。Embedding也可以做正向风格控制,但效果不如LoRA直接。我现在的工作流是Checkpoint定基调,LoRA调风格,Embedding防崩坏,三者配合出图质量比较稳定。
风格迁移是我最近玩得比较多的方向。用图生图加低重绘幅度,把参考图的风格迁移到新图上。或者用IP-Adapter提取参考图的风格特征再注入生成过程。我试过把一张水彩画的风格搬到人物肖像上,效果比纯提示词写“watercolor”自然得多。风格迁移的关键在重绘幅度,太高会丢掉原图特征,太低又迁不过去。0.4到0.6之间是我试出来比较平衡的范围。这个领域每隔几个月就有新工具冒出来,保持关注就好。
3.4 高分辨率修复、放大与细节增强策略
高分辨率修复是我出图的固定步骤。原生分辨率出图之后细节往往不够,Hires.fix能把图放大两到四倍,同时用第二个采样器重绘细节。我常用的设置是放大倍数2,Hires steps 15到20,Denoising strength 0.4到0.55。Denoising太低放大后画面糊,太高原图构图会被改掉。0.5左右是我试过比较稳的值。放大算法写实类用R-ESRGAN 4x+,二次元和插画用4x-UltraSharp,这两个搭配我用得最顺手。
放大之后还有细节增强的空间。Ultimate SD Upscale脚本能把图切成小块分别放大再拼回去,处理4K以上的大图很管用。缺点是速度慢,切块边缘可能出现接缝。我一般会在拼接后加一步轻微降噪把接缝磨掉。ControlNet Tile能在放大的同时锁住画面结构,我用Tile加Ultimate SD Upscale的组合做过一张8K的概念场景,细节保留得相当完整。放大的顺序我固定为Hires.fix先放两倍,再ADetailer修脸和手,最后Ultimate SD Upscale做终放大。跳过Hires.fix直接上Ultimate,脸部细节会丢得厉害,放得越大越糊,这个顺序我试过很多次才定下来。
ADetailer插件是我用得最多的修复工具。它能自动检测人脸和手部,单独对这些区域做高分辨率重绘。全身像的脸部崩坏用ADetailer修一遍基本能看。手部修复效果差一些,但比不修强。FaceID这类插件可以固定人物面部特征,做系列图的时候特别有用。面部一致性是AI绘画的老大难问题,多张图里同一个人长得不一样,客户一眼就能看出来。FaceID加LoRA的组合目前是我找到的比较好的方案,还在继续试新的方法。
3.5 参数组合实验与可复现出图记录
参数组合实验我每周都会做。固定提示词和种子,只改一个参数,跑一组对比图。这周测CFG就只跑CFG,跑5、6、7、8、9五个值,每个值出四张。下周测采样器就只换采样器。这种单变量实验听起来有点笨,但真的能帮你建立对参数的直觉。我有个表格记着不同题材下的常用组合。写实人像:DPM++ 2M Karras,28步,CFG 5.5,Hires Denoising 0.45。二次元:Euler a,20步,CFG 7.5,Hires Denoising 0.5。概念设计:DPM++ SDE Karras,35步,CFG 8,Hires Denoising 0.55。表格还在慢慢更新,每次实验有新发现就加一行。
可复现出图记录是我最推荐养成的习惯。每次出图,我把提示词、负向提示词、模型名、LoRA名和权重、采样器、步数、CFG、种子、分辨率、Hires设置全部记下来,存在一个文本文件里,和图片放同一个文件夹。图片文件名里也带上种子和模型简称。这样三个月后回头看,任何一张图我都能完整复现。PNG Info功能可以直接从图里读这些信息,前提是保存为PNG格式而且没有经过二次压缩。我吃过一次亏,把图发到微信再保存回来,PNG Info全没了,种子和参数都找不回来。从那以后原图一律存PNG,分享用JPG副本。
记录的目的不只是复现,更是积累。翻看半年前的记录,能清楚看到自己在参数理解上的变化。哪些参数是真的有效,哪些是心理作用,数据摆在那里不会骗人。我还会在记录里加一栏主观评价,给每张图打分写一句感受。比如“CFG 5.5这张皮肤质感最好,背景有点糊”或者“CFG 8的二次元线条最锐利,颜色偏饱和”。这些主观感受攒多了就会变成你自己的参数直觉。教程里的数值只是参考,你的眼睛和项目需求才是最终标准。我现在的很多常用参数,都是靠这种笨办法一点点试出来的。
4.1 图生图、局部重绘与Inpainting修复
我最早接触图生图,起因是一张构图很好的图但风格不对。当时想改成油画风,直接写提示词出来总是差口气。后来把原图扔进img2img,重绘幅度调到0.45,加了个油画LoRA,出来的效果比纯文生图自然多了。重绘幅度这个参数挺微妙。0.3以下基本只改表面,像加了个滤镜。0.7以上原图结构全散,跟重新生成差不多。我现在改风格基本在0.4到0.6之间。改细节比如换衣服颜色,0.25到0.35就够。每张图的重绘幅度甜点区不一样,我会先跑一张0.5看看,再上下微调。
局部重绘是我修手和脸的常用手段。一张图其他地方都满意,就手指多了一根。这时候用Inpainting把手指区域涂黑,重绘幅度开0.6到0.8,提示词只写“perfect hand, five fingers”。Masked content选original,让模型知道周围环境长什么样。选latent noise会完全重新画,适合换背景。我修过一张海报,人物背景杂乱,用Inpainting把背景全涂了,提示词写“clean studio background”,重绘幅度0.75,出来的背景干净利落。Inpainting的蒙版边缘要留一点羽化,不然拼接处会有硬边。WebUI里有Soft edge选项,我一般开到8到12像素。
修复这件事我踩过不少坑。ADetailer能自动检测脸和手,方便是方便,但它有时候会把好脸也修坏。我现在的流程是全局出图,用ADetailer过一遍,之后手动检查,有问题的局部再用Inpainting精修。精修的时候我会把图片放大到200%再画蒙版,细节更准。手部修复至今是个难点,模型对结构理解不够。我试过用ControlNet Depth辅助手部重绘,效果有提升,但还没到完美。每次修手都像碰运气,多试几张总能碰到好的。
4.2 ControlNet结构控制:姿态、边缘、深度与线稿
ControlNet刚出来的时候我装了但没怎么用,觉得节点太多太麻烦。后来接了一个需要固定人物姿势的项目,纯靠提示词怎么写都控制不住。逼得我回去啃ControlNet。OpenPose是我第一个上手的。找一张参考图,提取骨架,再用同样的骨架生成新人物。权重设0.8,引导时机从0开始,结束在0.8左右。出来的姿势和参考图基本一致。权重超过1.2画面会僵硬,人物像木偶。低于0.5又控制不住,姿势会漂。0.7到1.0是我常用的范围。
Canny和Lineart是线稿控制的双子星。Canny抓边缘,适合建筑、产品这类硬边物体。Lineart适合手绘线稿、漫画。我用Lineart把一张草图变成精细插画,权重0.6,重绘幅度0.7,细节保留得挺好。Depth控制景深和空间关系,适合大场景。我做过一张室内设计图,用Depth提取原图深度,生成新风格时空间结构不崩。Scribble涂鸦模式我用来做创意草图,几根线就能生成完整画面,适合头脑风暴阶段。每个ControlNet模型文件不一样,下载的时候看清是SD1.5还是SDXL。
多个ControlNet叠加是进阶玩法。我试过OpenPose加Depth,一个控姿势一个控空间。权重分配要小心。OpenPose权重0.8,Depth权重0.5,两个同时开。权重加起来太大画面会过拟合,像复印。引导时机也要错开,OpenPose从0到0.8,Depth从0到0.6,让模型先学姿势再学深度。我还在试Canny加IP-Adapter的组合,Canny控结构,IP-Adapter控风格。这套组合拳打好了,出图可控性提升一大截。ControlNet的预处理器选择也重要,比如OpenPose有openpose_full和openpose_hand,后者对手指细节更敏感。我一般用full,需要手指的时候换hand。
4.3 多模型协作与ComfyUI/WebUI工作流搭建
我用了大半年WebUI,后来被ComfyUI的灵活性吸引。WebUI像傻瓜相机,点几下出图,适合快速测试。ComfyUI像单反,每个节点都要自己连,但能搭出非常复杂的工作流。我一开始看那些连线头大,硬着头皮搭了第一个文生图流程,发现其实跟WebUI的逻辑一样,只是拆成了节点。后来搭了一个多模型协作的流程:Checkpoint出基础图,LoRA加风格,ControlNet修结构,再进Hires.fix放大,末尾用ADetailer修脸。整个流程一键跑完,省去手动切换的麻烦。
多模型协作的关键是分清每个模型管什么。Checkpoint定基调,LoRA调风格,ControlNet控结构,IP-Adapter传参考。我在ComfyUI里把这些节点串起来,中间加一些图像处理节点,比如裁剪、缩放、蒙版。有一次做系列角色图,用同一个Checkpoint加角色LoRA,再用OpenPose固定姿势,出来的图一致性很高。ComfyUI的工作流可以保存成JSON文件,分享给团队成员,大家用同一套参数出图,风格统一。我现在把常用工作流存了五六个,按项目类型分类。
WebUI和ComfyUI我都在用。快速试提示词用WebUI,批量生产和复杂流程用ComfyUI。ComfyUI的节点报错有时候很隐晦,我得一个个查。但搭好之后效率很高。我建议先熟悉WebUI的基本操作,再转ComfyUI。直接上手ComfyUI容易懵。我现在搭工作流会先画个草图,把节点关系理清再连线。团队协作的时候,我会把工作流和模型列表一起打包,附上说明文档。新人拿到就能跑,不用从头配环境。
4.4 批量生成、自动筛选与提示词队列管理
批量生成是我做项目必备的技能。WebUI的X/Y/Z plot脚本能同时扫描多个参数,比如CFG从5到9,采样器换三种,一次跑出几十张对比图。我每周会跑一两次参数扫描,看看新模型或者新LoRA的甜点区。提示词队列管理我用文本文件,每行一条提示词,WebUI的prompt from file功能读取后依次生成。生成的时候我设batch count为1,让它一条一条跑,避免显存爆炸。跑完一批图,我会先人工快速过一遍,把明显崩坏的删掉。
自动筛选帮我省了很多时间。我写了一个Python脚本,调用CLIP模型给每张图打分,按提示词相关性和美学评分排序。分数高的图自动移到“精选”文件夹,分数低的进“待定”。这个脚本不完美,有时候会把一些有创意的图筛掉,但作为初筛工具够用了。我还会用图片的PNG Info提取参数,存成CSV,方便后续分析。哪些参数组合出图率高,哪些提示词容易崩,数据积累多了就能看出规律。
提示词队列我习惯按项目分文件夹。一个项目一个txt文件,里面是排好序的提示词。生成的时候按顺序跑,图片文件名自动带上序号和提示词摘要。这样找图的时候不用翻,看文件名就知道内容。批量生成最怕重复和遗漏,我用一个简单的Python脚本检查队列里有没有重复行,有就标红。生成过程中如果某条提示词连续崩坏,我会把它单独拎出来,调整后再放回队列。队列管理听起来枯燥,但项目大了之后,没有队列就是一团乱。
4.5 API、脚本化与团队协作流程
API是我从手动出图转向自动化的转折点。Automatic1111的API和ComfyUI的API我都用过。Python调API可以传入提示词、参数、模型名,返回图片的base64。我写了一个脚本,读取CSV里的提示词列表,循环调用API,自动保存图片并用参数命名。以前手动点一下午的活,脚本跑半小时就完了。脚本化还能做定时任务,比如半夜跑一批图,早上起来筛选。ComfyUI的API更灵活,可以把整个工作流封装成一个API调用,传入不同的输入参数。
团队协作方面,我们共享一个模型库,放在NAS上,大家通过局域网访问。Checkpoint和LoRA统一命名规范,避免版本混乱。提示词模板放在Git仓库里,每次修改都有记录。ComfyUI工作流文件也进Git,谁改了哪个节点一目了然。出图参数用JSON文件管理,和提示词一起提交。这样任何人拿到仓库都能复现出一样的图。团队里有人负责写提示词,有人负责调参数,有人负责筛选,分工明确。API让流水线成为可能,写词的人提交队列,跑图的人执行脚本,筛选的人用自动评分加人工复核。
交付流程我们定了一套标准。客户需求先转成提示词和参考图,跑第一轮草图,内部评审后挑出方向。第二轮用ControlNet固定构图,加LoRA细化风格。第三轮高分辨率放大和修复。每轮输出都带参数记录,方便追溯。API和脚本化让整个流程可重复、可扩展。团队协作最怕信息不同步,我们用一个共享表格记录每个项目的状态、负责人和文件路径。谁改了什么都写备注。这套流程运行了几个月,效率比单打独斗高很多。版权和合规问题我们也会在交付前过一遍,确保模型和素材的授权没问题。
5.1 商业海报与电商产品图实战
我接的第一个商业海报单子是给一家本地咖啡馆做的。客户要一张开业宣传图,主题是秋天的暖意,预算不高但要求出三版方案。我拿到需求先别急着写提示词,花了一晚上看他们家的产品照片和装修风格。主色调是深棕和暖橙,木质家具多,咖啡杯是手工陶艺。把这些元素记下来,再转化成提示词语言。主体写"wooden table with handcrafted ceramic coffee cup",环境写"cozy autumn cafe interior, warm orange lighting",风格写"photorealistic, shallow depth of field"。第一版出来咖啡杯的把手方向不对,陶艺的质感也偏塑料。用Inpainting把手部区域修了一下,提示词加"matte ceramic texture",重绘幅度0.55,再跑一遍好多了。
电商产品图是另一个路子。我帮朋友做过一批护肤品的场景图,要求白底但不死板,要那种带生活气息的高级感。白底图用纯提示词很难出,背景容易灰或者带杂色。我的做法是用ControlNet Depth控住产品轮廓,再用Inpainting把背景替换成"clean white background with soft shadows"。产品本身的材质和标签文字保持不动。标签上的文字我从来不让AI生成,都是后期用PS贴上去,AI写字目前还是不稳。产品图的光影特别重要,提示词里我会加"studio lighting, softbox, gradient shadow",这些词对质感提升明显。有一次客户要一张矿泉水的图,瓶身的水珠我写了"condensation droplets on glass bottle",出来效果挺逼真,客户以为是实拍。
商业单子交付前我习惯跑一个检查清单。分辨率够不够印刷用,通常要300dpi,我出图至少2048像素宽。色彩模式是RGB还是CMYK,印刷得转CMYK,但转换过程会丢色,我一般给客户RGB和CMYK两个版本。模特或者人物的手和脸要放大到200%看一遍,有畸变就修。产品logo和文字位置对不对,这个错一次就废。最后一次交付我打包一个文件夹,里面有成品图、参数记录txt、和一张预览图。参数记录很重要,客户后续要改尺寸或者微调,我能快速复现。
5.2 人物肖像、IP角色与游戏概念设计实战
人物肖像是文生图里最难讨好的品类。我做过一批虚拟主播的形象设计,客户要求"二次元但不要太幼态,要有成熟的气质"。这种模糊需求我会先出十张草图让客户挑方向。挑出来两三张后,再往细节走。脸部我用ADetailer加Inpainting反复修,眼睛的高光和瞳孔细节决定了整个角色的神采。发型的处理有个小技巧,提示词里加"detailed hair strands, individual hair rendering",出来的头发不会糊成一片。服装部分用LoRA固定风格,我找了一个韩系插画的LoRA,权重0.7,出来的配色和笔触客户很满意。
IP角色设计要考虑一致性。同一个角色要在不同场景里出现,脸型、发色、服装不能变。我试过纯提示词控制,效果很差,每次都有偏差。后来用角色LoRA加OpenPose,姿势可以换,脸和衣服保持一致。训练角色LoRA需要准备二十到三十张图,最好是同一角色不同角度。训练参数我一般设dim 32,alpha 16,学习率1e-4,跑1500到2000步。第一次训练出来过拟合严重,背景都带进了LoRA。后来把训练图的背景全抠干净再训,效果好很多。现在做系列IP图,我会先训一个角色LoRA,再搭配不同场景提示词,效率比每次重写提示词高多了。
游戏概念设计我参与过一个独立游戏的前期。客户要的是"东方奇幻风格的环境概念图"。这种图不光要好看,还要有叙事性。我会在提示词里加故事元素,比如"abandoned temple overgrown with vines, broken stone statues, misty morning light"。构图用ControlNet Depth控制,先画一个简单的3D草图导入,让AI在结构上发挥。有一张图客户特别满意,是一座悬空的塔楼,藤蔓缠绕,远处有飞鸟。提示词里我写了"floating pagoda, cascading vines, flock of birds in distance, ethereal atmosphere"。这种图交付的时候我会附上分层PSD,方便美术后续细化。概念设计阶段出图不追求完美,追求的是方向准确和氛围到位。
5.3 自媒体配图、插画与分镜实战
自媒体配图讲究快和多。我给一个公众号做头图,一周要出七张,风格统一但内容不同。我的做法是搭一个ComfyUI工作流模板,固定Checkpoint和LoRA,只变提示词里的主体和环境。比如这周主题是职场,我就把主体换成"office desk", "commuter train", "meeting room",风格和色调保持一致。批量跑的时候用提示词队列,一个txt文件七行,跑完自动按序号命名。出的图我会挑一张最好的精修,其他的微调亮度对比度就能用。自媒体图尺寸有讲究,公众号头图是900x383,小红书是3:4,这些比例我提前在参数里设好,避免后期裁剪。
插画是我自己最喜欢的品类。给一篇关于城市孤独感的文章配图,我试了很多提示词都不对味。后来换了个思路,用Scribble涂鸦模式先画几根线,勾出一个坐在窗边的人的轮廓,再让AI去填充细节。出来的图有一种手绘的随意感,比纯文生图有温度。插画的风格控制我用Embedding比较多,负向Embedding压掉不想要的笔触,正向Embedding加特定画风。有一张图我用了三个Embedding叠加,出来的效果像水彩和铅笔的混合,挺特别。自媒体插画不用太精细,但要有辨识度。我会在角落留一点个人风格的小元素,比如固定的配色或者线条处理方式。
分镜是最近接的一个活,给一个短视频做故事板。分镜图不需要高精度,但要能传达镜头语言。我用ControlNet OpenPose固定人物姿势,Depth控制镜头景深,快速出草图。每个镜头跑三到四张,挑构图最清楚的。分镜的提示词我写得很简洁,比如"wide shot, two people arguing in kitchen, tense atmosphere",细节留给后续。交付的时候我按镜头顺序编号,附上每个镜头的运动说明,比如"camera slowly pushes in"。客户对着分镜图拍视频,沟通成本低很多。分镜阶段出图我通常用低步数,20步左右,CFG 5到6,速度快,反正后面不用这些图做成品。
5.4 版权、伦理、合规与商用风险规避
版权这块我吃过一次亏。早期不懂,用了一个标注"free"的LoRA做商业单子,后来发现那个LoRA是用某画师的作品训练的,画师本人没授权。虽然最后没出事,但吓出一身汗。现在我商用项目只用自己训练的LoRA,或者明确标注可商用的。Checkpoint也一样,很多模型是基于LAION数据集训练的,里面有些图有版权争议。商用交付前我会查一下模型的授权协议。大模型像SDXL基础版可以商用,但某些微调版可能有限制。客户如果要求独家版权,我会提前说明AI生成图的版权状态,让他们心里有数。
伦理问题我遇到过一次。客户想要一张"看起来很真实的新闻照片",用来做内容配图。我拒绝了。AI生成图冒充实拍,尤其是新闻场景,风险太大。还有一次是人物肖像,客户给了一张真人照片让我做风格迁移。我问他有没有本人授权,他说没有。这种情况我不接。AI换脸和风格迁移涉及肖像权,没有明确授权我不碰。现在我的原则是:涉及真人的项目必须有书面授权,不生成可能误导公众的图片,不做暴力色情内容。这些底线写在合作前的沟通里,避免后面扯皮。
合规方面我关注平台政策。很多图库和社交媒体对AI生成图有标注要求。我交付商用图的时候会附一个说明,写清楚是AI生成,用的什么模型和参数。客户如果要在特定平台上发布,我会查一下那个平台的AI内容政策。有一次给一个电商客户做产品图,平台要求AI生成的产品图必须标注"图片仅供参考"。我在交付文件里加了这个提示。国内对AI生成内容的监管越来越细,我会定期看一下新规。合规不是限制,是保护。出事了再补救,成本比提前做好高得多。
5.5 性能优化、常见报错排查与持续迭代路线
性能优化我最大的感受是显存管理。我一开始用8G显存的卡,出1024x1024的图经常爆显存。后来学会了几招。出图前先卸载不用的模型,WebUI里有"Unload VAE"和"Unload Checkpoint"的选项。批量生成的时候把batch size设小,用batch count代替。Hires.fix分两步跑,先出小图再放大,比直接出大图省显存。ComfyUI的节点式流程可以精确控制什么时候加载什么模型,显存利用率比WebUI高。我现在用12G的卡,出2048的图基本没问题,但批量跑还是会边跑边清缓存。xformers和SDP attention这两个加速选项我都是开着的,速度提升明显。
报错排查我踩过的坑能写一本书。最常见的是CUDA out of memory,解决方法是降分辨率、关Hires.fix、减小batch。但有时候显存够也报这个错,那是显存碎片化了,重启WebUI就好。第二个常见的是"ModuleNotFoundError",缺Python包,pip install装上就行。有一回报错说某个节点找不到,我查了半天发现是ComfyUI的自定义节点没更新。还有一次出图全黑,原因是VAE没加载对,换了VAE文件就好了。我把常见报错和解决方法记在一个txt里,遇到问题先查记录。新报错就复制错误信息去搜,通常GitHub的issue里有人遇到过。
持续迭代这件事我给自己定了节奏。每周抽两个小时看新模型和新插件,有合适的就测试一下。每月回顾一次自己的提示词库,把常用的整理成模板,把不好用的删掉。每季度更新一次工作流,把新的技术和自己积累的经验整合进去。我不追最新的东西,但也不停在原地。有个习惯我觉得挺有用,就是每次出图都保存参数记录,时间长了就有一个自己的数据库。哪些参数组合出图率高,哪些提示词容易崩,翻记录就能看出来。AI绘画这个领域变化快,今天好用的方法明天可能就过时了。保持学习,保持记录,保持输出,这是我能想到的最稳的迭代路线。