mcpField
C
comfyui-lora-training

comfyui-lora-training

github.com/mckruz创意与媒体92557 次安装32 周前更新
代码仓库

关于 comfyui-lora-training

指导为 ComfyUI 工作流准备角色 LoRA 数据集、配置训练并评估结果,包含 FLUX、SDXL、低显存设置及故障排查建议。

主要功能

  1. 01准备并标注角色数据集
  2. 02配置 FLUX 和 SDXL 训练
  3. 03调整低显存训练设置
  4. 04用一致提示词比较检查点
  5. 05排查训练问题

适用场景

  1. 01为系列作品训练角色一致性
  2. 02选择 LoRA 训练或零样本生成
  3. 03识别过拟合或身份漂移
  4. 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-1520-3050+
分辨率512x5121024x1024-
格式PNG/高质量 JPEGPNG-
内容多样性检查清单
  • 多种角度(正面、3/4 侧面、侧面、背面)
  • 多种表情(中性、微笑、严肃、大笑等)
  • 不同的光照条件(影棚、自然光、戏剧性光照)
  • 多样的背景(或透明/纯色背景)
  • 多种服装/场景
  • 一些特写,一些中景
  • 如果使用 3D 渲染图:加入风格变化(见下文)
3D 渲染图预处理

问题:直接使用 3D 渲染图训练会将「3D」美学固化到模型中。

解决方案:先生成风格变化:

  1. 使用不同的风格提示词,通过 img2img 处理每张渲染图
  2. 混合使用:60% 风格变化图,40% 原始渲染图
  3. 这样能教会模型识别身份,而非风格

用于生成变化的风格提示词:

"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:可能已经过拟合

通过视觉对比,选择身份一致性与提示词灵活性平衡最佳的检查点。

训练后集成

  1. 将最佳检查点复制到 {ComfyUI}/models/loras/
  2. 更新角色配置:
    lora:
      trained: true
      model_file: "sage_character_flux.safetensors"
      trigger_word: "sage_character"
      best_strength: 0.8
    
  3. 在完整工作流中测试:LoRA(0.7-0.9)+ PuLID/IP-Adapter(0.5-0.7)
  4. 在角色的 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