关于 comfyui-lora-training
指导为 ComfyUI 工作流准备角色 LoRA 数据集、配置训练并评估结果,包含 FLUX、SDXL、低显存设置及故障排查建议。
主要功能
- 01准备并标注角色数据集
- 02配置 FLUX 和 SDXL 训练
- 03调整低显存训练设置
- 04用一致提示词比较检查点
- 05排查训练问题
适用场景
- 01为系列作品训练角色一致性
- 02选择 LoRA 训练或零样本生成
- 03识别过拟合或身份漂移
- 04将训练好的 LoRA 加入 ComfyUI 工作流
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mckruz/ comfyui-expert --skill comfyui-lora-training安装后在 Claude Code 中输入/comfyui-lora-training确认已加载。
详细介绍
ComfyUI LoRA 训练
引导用户完成角色 LoRA 的数据集准备、训练配置和评估。
何时训练,何时使用零样本
| 场景 | 建议 |
|---|---|
| 需要在多张图像中保持绝对一致 | 训练 LoRA |
| 制作角色系列或持续进行的项目 | 训练 LoRA |
| 快速生成一次性图像 | 使用零样本(InstantID/PuLID) |
| 参考图有限(1-5 张) | 使用零样本 |
| 测试概念 | 先使用零样本;确定采用后再训练 |
训练流程
1. DATASET PREP
|-- Collect/generate 15-30 reference images
|-- Preprocess (crop, resize, diversify styles)
|-- Caption with trigger word + descriptions
|
2. CONFIGURE TRAINING
|-- Select training tool (Kohya/AI-Toolkit/FluxGym)
|-- Set hyperparameters based on model type
|-- Configure checkpointing
|
3. TRAIN
|-- Monitor loss curve
|-- Save checkpoints every 250-500 steps
|
4. EVALUATE
|-- Test each checkpoint with identical prompts
|-- Check identity accuracy, flexibility, overfitting
|-- Select best checkpoint
|
5. INTEGRATE
|-- Copy to ComfyUI models/loras/
|-- Update character profile with trigger word + strength
|-- Test in full workflow (LoRA + identity method)
数据集准备
图像要求
| 项目 | 最低要求 | 最佳 | 最高 |
|---|---|---|---|
| 数量 | 10-15 | 20-30 | 50+ |
| 分辨率 | 512x512 | 1024x1024 | - |
| 格式 | PNG/高质量 JPEG | PNG | - |
内容多样性检查清单
- 多种角度(正面、3/4 侧面、侧面、背面)
- 多种表情(中性、微笑、严肃、大笑等)
- 不同的光照条件(影棚、自然光、戏剧性光照)
- 多样的背景(或透明/纯色背景)
- 多种服装/场景
- 一些特写,一些中景
- 如果使用 3D 渲染图:加入风格变化(见下文)
3D 渲染图预处理
问题:直接使用 3D 渲染图训练会将「3D」美学固化到模型中。
解决方案:先生成风格变化:
- 使用不同的风格提示词,通过 img2img 处理每张渲染图
- 混合使用:60% 风格变化图,40% 原始渲染图
- 这样能教会模型识别身份,而非风格
用于生成变化的风格提示词:
"photorealistic portrait, dslr photo"
"oil painting portrait"
"digital illustration"
"pencil sketch"
"watercolor portrait"
提示词标注规则
触发词:始终将唯一 token 用作第一个词。
- 好:
sage_character、ohwx_sage、sks_person - 不好:
woman、redhead、character(过于通用)
提示词结构:
{trigger}, {subject type}, {clothing}, {pose}, {setting}, {lighting}, {style}
不要描述面部特征(让模型自行学习):
- 不好:「绿眼睛、有雀斑、赤褐色头发、颧骨分明的女人」
- 好:「sage_character,女人,室内肖像,穿着蓝色毛衣」
请描述其他所有内容:服装、姿势、背景、光照、表情。
文件夹结构
dataset/{character_name}/{repeats}_{trigger_word}/
001.png + 001.txt
002.png + 002.txt
...
文件夹命名:10_sage_character = 每个训练轮次中重复使用每张图像 10 次。
训练配置
FLUX LoRA(AI-Toolkit)- 推荐
network:
type: lora
linear: 16 # Rank (16-32 for characters)
linear_alpha: 16 # Alpha = rank for FLUX
train:
batch_size: 1
gradient_accumulation_steps: 4
steps: 1500 # FLUX converges faster
lr: 4e-4 # Higher than SDXL
optimizer: adamw8bit
dtype: bf16
datasets:
- resolution: [1024]
caption_ext: "txt"
sample:
sample_every: 250
prompts:
- "{trigger}, photorealistic portrait"
FLUX 训练说明:
- 收敛速度比 SDXL 快 2-3 倍
- 通常 1000-2000 步就足够
- 留意过拟合(质量会较早进入平台期)
- 标准训练需要 24GB VRAM;SimpleTuner 使用 NF4 量化时需要 9GB
SDXL LoRA(Kohya_ss)- 久经验证
pretrained_model: "RealVisXL_V5.0.safetensors"
network_dim: 32 # Rank (16-64)
network_alpha: 16 # Usually dim/2
resolution: "1024,1024"
train_batch_size: 1
gradient_accumulation_steps: 4
learning_rate: 0.0001 # 1e-4
lr_scheduler: "cosine_with_restarts"
lr_scheduler_num_cycles: 3
max_train_epochs: 10
optimizer_type: "AdamW8bit"
mixed_precision: "bf16"
enable_bucket: true
min_snr_gamma: 5
步数计算:
total_steps = (images x repeats x epochs) / batch_size
Target: 1500-3000 steps for SDXL
Example: 20 images x 10 repeats x 5 epochs / 1 = 1000 steps
低 VRAM 训练(FluxGym / SimpleTuner)
适用于 12-16GB VRAM:
use_8bit_adam: true
gradient_checkpointing: true
cache_latents_to_disk: true
max_data_loader_n_workers: 0
train_batch_size: 1
gradient_accumulation_steps: 8
quantize_base_model: nf4 # SimpleTuner only
评估流程
测试每个检查点
在所有检查点上使用相同的提示词:
Prompt 1: "{trigger}, photorealistic portrait, neutral expression"
Prompt 2: "{trigger}, photorealistic portrait, smiling, outdoor"
Prompt 3: "{trigger}, wearing formal suit, standing, office"
Prompt 4: "a person standing in a park" (WITHOUT trigger - should NOT produce character)
质量指标
训练效果良好:
- 仅凭触发词就能识别角色
- 能对不同的提示词/场景做出响应
- 不会总是生成相同的姿势/表情
- 提示词 4 不会生成该角色
过拟合迹象:
- 不论提示词如何,姿势/表情都完全相同
- 输出中出现训练背景
- 忽略服装/场景提示词
- 提示词 4 会生成该角色(触发效果过强)
选择最佳训练轮次
如果使用 sample_every: 250,训练步数为 1500:
- 检查点 250:通常训练不足
- 检查点 500-750:通常是 FLUX 的最佳区间
- 检查点 1000-1500:可能已经过拟合
通过视觉对比,选择身份一致性与提示词灵活性平衡最佳的检查点。
训练后集成
- 将最佳检查点复制到
{ComfyUI}/models/loras/ - 更新角色配置:
lora: trained: true model_file: "sage_character_flux.safetensors" trigger_word: "sage_character" best_strength: 0.8 - 在完整工作流中测试:LoRA(0.7-0.9)+ PuLID/IP-Adapter(0.5-0.7)
- 在角色的
generation_history中记录成功的设置
将 LoRA 与零样本方法结合
最佳实践:将 LoRA 用作基础身份,再用零样本方法增强。
[Load Checkpoint] → [Load LoRA (0.7-0.9)] → [Apply PuLID/IP-Adapter (0.5-0.7)] → [Generate]
降低两者的权重可以避免冲突,同时强化角色身份。
故障排除
| 问题 | 解决方案 |
|---|---|
| LoRA 未激活 | 检查触发词拼写,并确保在 KSampler 之前加载 |
| 不同角度下身份漂移 | 在数据集中添加更多角度变化,降低 network_dim |
| 过拟合 | 减少训练轮数,增加数据集,降低 network_dim |
| 风格污染 | 提高 caption 多样性,不要在 caption 中描述风格 |
| 质量差/出现伪影 | 检查训练图像是否经过压缩,降低 LR |
参考
references/lora-training.md- 完整参数参考references/models.md- 训练工具下载链接projects/中的角色档案,包含触发词和参考图像
评论
支持 Markdown