ComfyUI 初探与 VRChat Avatar 图片生成
最近注意到几个 VRC 好友在用 ComfyUI 生成自己 avatar 的角色图,效果看起来挺好,于是我也在春节假期里把这套流程从头跑了一遍。这篇主要是记录一下做了什么,里面不少信息来自我和 AI 的来回讨论,所以它更接近一篇实践日志而非教程, 正确性并无保证。

上手 ComfyUI 并了解基础概念
如果你在 AI 生图刚火起来那段时间玩过图,那么对 stable-diffusion-webui 应该不会陌生。ComfyUI 本质上也是同类工具,只不过从“写一大段提示词直接出图”,变成了“把整个生成流程拆成节点来搭”。这种设计的好处是灵活,也更方便自己控制细节,所以它能做的事情远不止文生图。
几个月前我也装了 ComfyUI , 但刚打开发现对这些节点是什么,怎么连线都毫无概念,初见觉得非常难用于是就搁置到一边。但最近花了两天去学习,觉得整体还是很清晰,只想自己生成图片玩并不需要了解太多信息,从最简化的流搭起一切都非常顺利。ComfyUI 有个我很喜欢的设计:输出图像的元数据里会带上对应工作流的 JSON 信息,只要把图片重新拖回 ComfyUI,往往就能把那张图对应的工作流还原出来。这对保存和分享都很方便。
这里需要提到的是,我一开始试着导入 Civitai(C 站) 上别人分享的图片工作流,但发现很多都非常复杂,塞了大量自定义节点和模型,并不是“拖进来就能立刻用”的状态。后来又去 B 站看了一些教程,发现很多内容其实是在教整合包的使用,工作流本身也掺了不少对新手来说不关键的东西。
对我来说,更合适的起点还是先有一个最小可用工作流,再根据自己的需求逐步加节点、挑模型、补插件,而不是一上来就用一个巨大的整合包。
于是我选择了官方的文生图基础示例作为起点,再把LoRA 使用示例也过了一遍。走完这两步之后,至少对几个核心模块有了基本概念,后面再借助 AI 去补术语,理解起来就轻松很多,比如:
- CLIP、VAE、Latent、LoRA、K 采样器
- 模型类型、文件格式、checkpoint 等
在这个基础上,我拿一个新出的 Anima 模型,再搭一个质量修饰用的 LoRA,就已经能生成下面这样的图了(图里带了元信息):

这里用的工作流基本就是官方 LoRA 示例,再加上 AI 根据我模型照片反推出来的一版提示词。

模型生态
在继续往下折腾之前,我觉得需要对当前能用的基础模型有个大概认识。这些模型在 C 站里通常就是 checkpoint,按我的理解就是一套已经打包好的全家桶,里面通常会带上 diffusion model、VAE 等关键组件。它们可以直接在 Civitai 模型页 里按条件筛选:

不同谱系的模型,通常也会优先搭配同体系训练出来的 LoRA。比如图里排位比较靠前的 WAI-illustrious-SDXL - v16.0,就是在 Illustrious-XL - v0.1 这个基础模型上做出来的微调版本,在画质和画风上进行增强,同时也比较适合继续接 Illustrious 体系的 LoRA。简单试了一圈之后,我后面基本就决定用这个模型。
Illustrious-XL 本身是一套基于 Stable Diffusion XL(SDXL)继续深调出来的图像生成模型,偏向高质量二次元和插画风格。它的提示词体系也比较靠近 Danbooru 标签,所以下面两个工具比较有用:
- newtextdoc1111/ComfyUI-Autocomplete-Plus:ComfyUI 插件,自动补全并显示标签详情
- Danbooru 标签超市:中文站,但数据库偏旧,只能当参考
上文用到的 Anima 预览版只有 3.9G,单靠模型本身就已经能出一些不错的图。问题在于它和 Illustrious 不是一套体系,所以现阶段可用的 LoRA 和训练参考都还比较少;如果目标是在这个时间点做自己的角色 Lora,它不算合适。虽然它的开源协议目前还有争议,但正式版和后续生态还是挺值得期待。
角色一致性方案
由于这次我玩 AI 生图的主要目标就是生成自己的 avatar 图片,控制角色一致性方面了解到的有以下方法:
提示词与参数控制 (Prompt & Seed)
- 角色特征描述词(Consistent Descriptions):尽量把发型、瞳色、服装和特定配饰写得详细,并在后续提示词里保持一致。
- 固定随机种子(Fixed Seed):在提示词不大变的情况下,固定 Seed 能把基础构图和主要特征尽量稳住,再通过微调颜色、表情之类的内容去做小变化。
由于我的 avatar 一个比较明显的特征就是平平的耳朵,所以上文第一张图里我用了下面这段 prompt,通过让狐耳下垂去做一个接近的替代:
1girl, solo, (flat chest:1.3), petite, little girl, (slightly larger head proportion:1.1), skyblue hair, long hair, blue eyes
(fox ears, ears down:1.2), animal ear fluff, (fluffy fox tail:1.4)
轻量化微调:LoRA 方案(推荐)
在可选的几种方案里,LoRA 是最容易落地,也最适合“想在不同场景里持续生成同一个原创角色”的做法。
- 原理: 准备 15-30 张同一角色的图片,通过低秩自适应(Low-Rank Adaptation)技术训练一个小模型,体积通常从几十 MB 到上百 MB 不等。
- 优点: 能比较稳定地锁定脸部特征、发型、体型,甚至部分画风特征。
由于 LoRA 训练本身也会顺带记住一些画风,所以混合多来源的 avatar 素材会更合适一些,比如人设约稿、自己跑出来觉得不错的 AI 图、用 nano banana 生成的其他风格图片等。
图像引导与参考:Reference-based
这种方案不需要自己训练模型,而是通过“喂”参考图给 AI 来生成指定人设的图片。我自己还没真正上手试过。
- IP-Adapter(Stable Diffusion): 这是一个注入式插件。通过 IP-Adapter-FaceID 或 Plus 之类的模型,可以把一张参考图当成“视觉提示词”,让结果尽量贴近参考人物。
人物 LoRA 训练
决定训练自己的 avatar LoRA 后,基本流程就是三步:准备数据集、给图片打标、然后炼丹。看了一圈教程之后我选的是秋叶的 SD-Trainer 来做打标和训练: Akegarasu/lora-scripts
数据集准备
我的第一版数据集主要由下面几部分构成:
- 同一个人物穿不同衣服,在 VRChat 不同世界里的拍照(约 35 张)
- 上传一版无任何衣服的模型,在 MMD 房里拍,获取裸体不同姿势的照片(约 60 张),因为好获取所以拍得偏多
- 在 Unity 里播放动作动画后截出来的少量图片(约 5 张)

图片收集完之后,第一步就是预处理:尽量把人物裁成主体,并放到合适的分辨率。分辨率和比例这件事其实不用专门处理,训练器本身已经带了图像处理能力,开启 ARB 桶选项后,图片会自动按合适比例参与训练。但手动整理一遍也会更省心一些。这里我用的是 BIRME - Bulk Image Resizing Made Easy (Online & Free),先把图片批量处理到适合 SDXL 训练的 1K 分辨率。
数据集打标与训练
相关教程在 B 站很多,但这件事本身还是有点“炼丹”,不同人的经验差异也很大,所以这里就不多做说明。打标我是先用 SD-Trainer 内置的 tagger 跑一遍 Danbooru 标签,再手动清理。
【AI绘画】最佳画风/人物模型训练!保姆式LoRA模型训练教程 一键包发布
由于我这个 avatar 最核心的特征其实就是发型和兽耳元素,所以在处理标签时,我先把 crazt 放在最前面作为 trigger word,让 LoRA 尽量把我的 avatar 和这个词绑定起来。然后再去掉那些本来就应该由角色特征自己承载的标签,比如 hair、fox/cat ear、hair color,同时也把 tagger 误识别出来的其他已有角色名删掉。这样清完之后,基本就是一个能继续往下训的状态了。
衣服相关的 tag 我反而不建议全删,因为“让角色特征和衣服解绑”本来就是我准备这批素材时的目标之一。后面如果想让这个 LoRA 生成的人物换不同衣服,就不至于被训练集里的服装绑得太死。
再往后,也可以把数据集打包丢给 GPT,或者本地用 CLI / Codex 之类的工具做一次额外分析,让它给一些删标签或补标签的建议。不过这一步主要是当参考,千万不要照单全收,它在这类细节上很容易给错建议。
在训练集自动打标时,我用的是 wd-eva02-large-tagger-v3 配合默认阈值,主要原因是它在当时那批可选项里比较新,参数量也比较大。同时我也在这里额外加上了自己的人设 trigger word crazt:

训练时我比较建议每个 epoch 都存一次,并启用预览图。这样训练结束后,就可以结合训练器内置的 TensorBoard 去看 loss / epoch 曲线,再和预览图一起对照,挑几个看起来比较合适的阶段做横向比较。比如下面这次训练里,我最后选的是大概 80 epoch 左右保存下来的那个 LoRA。

对比模型效果时,可以用 jags111/efficiency-nodes-comfyui 里的 XY Plot 批量测试不同模型和不同强度,再从里面挑一个顺眼的。按我目前的感受,LoRA 强度大概在 0.6 到 0.8 这个区间时,通常还能稳住自己的人设;再往上拉,后面出图时就比较容易出现明显的质量问题,和其他 LoRA 直接混用时也更容易崩。
下图里也能看出来,随着 Weight 慢慢加到一个合理区间,人物特征才开始稳定显现。这个阶段多配几组提示词、多试几轮权重范围,通常就能把自己最顺手的点位找出来。

结尾
拿到自己的人物 LoRA 之后,就可以尝试很多玩法。这时候用 AI 工具去转写、改写别人分享的 prompt,就是个很省力的做法。比如我现在常用的是这一份:SD Prompt - crazt。平时也可以从 C 站或者生图社区群组里捞一些 prompt,再按自己的角色和偏好去改。
另外也可以继续叠一些风格化 LoRA 来玩,比如:
- NffaStyle - v1.0 | Illustrious LoRA | Civitai
- Dogmastyle - v9.0 | Illustrious LoRA | Civitai
- 薄塗り / USNR STYLE - USNR_STYLE_ILL_V1.0 | Illustrious LoRA | Civitai
在这个阶段我也发现,自己的人物 LoRA 跟这些风格化 LoRA 直接混着用时,很容易把图跑崩,所以后来我改成了一个两段式的 upscale 流程:
- Part 1:WAI-Illustrious 混合人物 LoRA,先生成底图,并找到一个合适的固定 Seed,作为下一阶段的基础
- Part 2:WAI-Illustrious 混合风格化 LoRA,再去重采样放大后的 Latent 画布;这一步的提示词也可以继续按自己想要的风格微调

这个工作流我自己用下来感觉还行,简单能用但不一定正确。但是 Upscale 插件、ControlNet、高清修复、蒙版,以及 LoRA 训练调参这些坑,我都还没尝试。春节假期先告一段落,后面有空再继续玩。
下面是一张附带了上图工作流的原始图片:

祝看到这里的朋友新年快乐,2026万事顺利!