Skip to main content
FLUX.2 Klein Training This guide covers how to train LoRAs and finetune FLUX.2 [klein] models on your own datasets. With open weights available under Apache 2.0 (4B) and FLUX Non-Commercial License (9B), you can create custom models tailored to your specific needs.

Overview

FLUX.2 [klein] Base models are ideal for finetuning due to their undistilled architecture, which preserves the full training signal. This makes them perfect for:
  • LoRA Training: Lightweight adapters for style transfer and character consistency
  • Full Finetuning: Complete model adaptation for specialized domains
  • Research: Experimentation with novel training techniques

Why Train FLUX.2 [klein] Models?

Style Transfer

Create custom artistic styles that can be applied to any subject matter. Perfect for consistent branding or artistic projects.

Character Consistency

Train models to generate specific characters or people with consistent features across different scenes and poses.

Domain Specialization

Adapt models for specialized domains like medical imaging, technical illustrations, or specific art movements.

Concept Learning

Teach the model new concepts, objects, or visual patterns not well-represented in the base training data.

Community Tools

Open-source frameworks provide full control over the training process:

Model Variants

Choose the right [klein] variant for your use case:
VariantBest ForLicense
klein 4B BaseQuick iterationsApache 2.0
klein 9B BaseMaximum quality, complex conceptsFLUX Non-Commercial
Base models are undistilled and provide higher output diversity, making them ideal starting points for fine-tuning. The 4B variant is recommended for most users due to lower hardware requirements.

System Requirements

Minimum Hardware

For klein 4B Base Training

  • GPU: NVIDIA with 12GB VRAM (RTX 3060 12GB, RTX 4060 Ti 16GB)
  • RAM: 32GB system memory

For klein 9B Base Training

  • GPU: NVIDIA with 22GB VRAM (RTX 3090, RTX 4090)
  • RAM: 64GB system memory

Training Types

LoRA Training

Low-Rank Adaptation (LoRA) is the most popular training method:
  • βœ… Lightweight (typically 10-200MB)
  • βœ… Fast training (1-3 hours on consumer GPUs)
  • βœ… Easy to share and combine
  • βœ… Minimal hardware requirements
Use cases: Style transfer, character consistency, concept learning

Full Fine-tuning

Complete model adaptation for maximum control:
  • ⚠️ Large file sizes
  • ⚠️ Longer training times (days to weeks)
  • ⚠️ High-end hardware recommended
  • βœ… Maximum flexibility and quality
Use cases: Specialized domains, production deployments, checkpoint training, research

Getting Started

Step-by-Step Training Example

Follow our complete hands-on guide with a real dataset example. Learn how to prepare data, configure training, and use your trained LoRA.

Quick Start Resources

Training Best Practices

Dataset Preparation

  • Use high-resolution images (1024px or higher)
  • Ensure consistent quality across all training images
  • Remove artifacts and low-quality samples
  • Use descriptive, detailed captions
  • Include your trigger word consistently: [trigger]
  • Describe everything visible except the style/concept you want to teach the model
  • Vary poses, angles, and compositions
  • Include different lighting conditions
  • Mix close-ups with full scenes
  • Avoid repetitive backgrounds

Training Parameters

  • LoRA Training: 8e-5 to 1e-4
  • Full Fine-tuning: 1e-5 to 5e-5
  • Lower rates for style, higher for characters
  • Style LoRAs: 1500-2500 steps
  • Character LoRAs: 1500-3000 steps
  • Monitor sample outputs to avoid overfitting
  • Start with 512px for faster iterations
  • Use 1024px or higher for final training
  • Use higher Resolution if you want to capture Macrodetails

Using Your Trained LoRA

After training, you can use your LoRA with various tools:
import torch
from diffusers import Flux2KleinPipeline

pipe = Flux2KleinPipeline.from_pretrained(
    "black-forest-labs/FLUX.2-klein-base-9B", torch_dtype=torch.bfloat16
)
pipe.load_lora_weights("path/to/your_lora.safetensors")
pipe.to("cuda")

image = pipe(
    "a photo of ohwx in a garden on a sunny day",  # Use your trigger word
    num_inference_steps=50,
    guidance_scale=4.0,
).images[0]

Next Steps