LTX Video 2 Quickstart
July 16, 2026 ยท View on GitHub
In this example, we'll train an LTX Video 2 LoRA using the LTX-2 video/audio VAEs and a Gemma3 text encoder.
Hardware requirements
LTX Video 2 is a heavy 19B model. It combines:
- Gemma3: The text encoder.
- LTX-2 Video VAE (plus the Audio VAE when conditioning on audio).
- 19B Video Transformer: A large DiT backbone.
This setup is VRAM-intensive, and the VAE pre-caching step can spike memory usage.
- Single-GPU training: Start with
train_batch_size: 1and enable group offload.- Note: The initial VAE pre-caching step can require more VRAM. You may need CPU offloading or a larger GPU just for the caching phase.
- Tip: Set
"offload_during_startup": truein yourconfig.jsonto ensure the VAE and text encoder are not loaded to the GPU at the same time, which significantly reduces pre-caching memory pressure.
- Multi-GPU training: FSDP2 or aggressive Group Offload is recommended if you need more headroom.
- System RAM: 64GB+ is recommended for larger runs; more RAM helps with caching.
Observed performance and memory (field reports)
- Baseline settings: 480p, 17 frames, batch size 2 (minimal video length/resolution).
- RamTorch (incl. text encoder): ~13 GB VRAM used on an AMD 7900XTX.
- NVIDIA 3090/4090/5090+ should see similar or better VRAM headroom.
- No offload (int8 TorchAO): ~29-30 GB VRAM used; 32 GB hardware recommended.
- Peak system RAM: ~46 GB when loading bf16 Gemma3 then quantizing to int8 (~32 GB VRAM).
- Peak system RAM: ~34 GB when loading bf16 LTX-2 transformer then quantizing to int8 (~30 GB VRAM).
- No offload (full bf16): ~48 GB VRAM required for model training without any offload enabled.
- Throughput:
- ~8 sec/step on A100-80G SXM4 (no compile).
- ~16 sec/step on 7900XTX (local run).
- ~30 min for 200 steps on A100-80G SXM4.
Memory offloading (Critical)
For most single-GPU setups training LTX Video 2, you should enable grouped offloading. It is optional but recommended to keep VRAM headroom for larger batches/resolutions.
Add this to your config.json:
View example config
{
"enable_group_offload": true,
"group_offload_type": "block_level",
"group_offload_blocks_per_group": 1,
"group_offload_use_stream": true
}
Prerequisites
Ensure Python 3.12 is installed.
python --version
Installation
pip install 'simpletuner[cuda]'
# CUDA 13 / Blackwell users (NVIDIA B-series GPUs)
pip install 'simpletuner[cuda13]' --extra-index-url https://download.pytorch.org/whl/cu130
See INSTALL.md for advanced installation options.
Setting up the environment
Web interface
simpletuner server
Access at http://localhost:8001.
Manual configuration
Run the helper script:
simpletuner configure
Or copy the example and edit manually:
cp config/config.json.example config/config.json
Configuration parameters
Key settings for LTX Video 2:
model_family:ltxvideo2model_flavour:dev(default),dev-fp4,dev-fp8,2.3-dev, or2.3-distilled.pretrained_model_name_or_path:Lightricks/LTX-2,dg845/LTX-2.3-Diffusers,dg845/LTX-2.3-Distilled-Diffusers, or a local.safetensorsfile.train_batch_size:1. Do not increase this unless you have an A100/H100.validation_resolution:512x768is a safe default for testing.720x1280(720p) is possible but heavy.
validation_num_video_frames: Must be compatible with VAE compression (4x).- For 5s (at ~12-24fps): Use
61or49. - Formula:
(frames - 1) % 4 == 0.
- For 5s (at ~12-24fps): Use
validation_guidance:5.0.ltx2_validation_pipeline_mode: Keeptrained-stagefor normal validation. Usespatial-upscaleto run the LTX-2 two-stage spatial upscaler path: half-resolution latent generation, spatial latent upscaling, then full-resolution re-denoising.spatial-upscalerequires the requestedvalidation_resolutionto be divisible by 64.- Optional overrides:
ltx2_validation_spatial_upsampler_modelandltx2_validation_spatial_upsampler_filename. Defaults areLightricks/LTX-2.3andltx-2.3-spatial-upscaler-x2-1.1.safetensors.
frame_rate: Default is 25.
LTX-2 2.0 flavours ship as a single .safetensors checkpoint that includes the transformer, video VAE, audio VAE, and vocoder.
For LTX-2.3, SimpleTuner loads the matching Diffusers repo selected by model_flavour (2.3-dev or 2.3-distilled).
Optional: VRAM optimizations
If you need more VRAM headroom:
- Musubi block swap: Set
musubi_blocks_to_swap(try4-8) and optionallymusubi_block_swap_device(defaultcpu) to stream the last transformer blocks from CPU. Expect lower throughput but lower peak VRAM. - VAE patch convolution: Set
--vae_enable_patch_conv=trueto enable temporal chunking in the LTX-2 VAE; expect a small speed hit but lower peak VRAM. - VAE temporal roll: Set
--vae_enable_temporal_roll=truefor more aggressive temporal chunking (larger speed hit). - VAE tiling: Set
--vae_enable_tiling=trueto tile VAE encode/decode for large resolutions.
Optional: CREPA temporal regularizer
To reduce flicker and keep subjects stable across frames:
- In Training โ Loss functions, enable CREPA.
- Recommended starting values: Block Index = 8, Weight = 0.5, Adjacent Distance = 1, Temporal Decay = 1.0.
- Keep the default vision encoder (
dinov2_vitg14, size518) unless you need a smaller one (dinov2_vits14+224). - Requires network (or a cached torch hub) to fetch DINOv2 weights the first time.
- Only enable Drop VAE Encoder if you are training entirely from cached latents; otherwise leave it off.
Advanced Experimental Features
Show advanced experimental details
SimpleTuner includes experimental features that can significantly improve training stability and performance.
- Scheduled Sampling (Rollout): reduces exposure bias and improves output quality by letting the model generate its own inputs during training.
โ ๏ธ These features increase the computational overhead of training.
Dataset considerations
Video datasets require careful setup. Create config/multidatabackend.json:
[
{
"id": "my-video-dataset",
"type": "local",
"dataset_type": "video",
"instance_data_dir": "datasets/videos",
"caption_strategy": "textfile",
"resolution": 512,
"video": {
"num_frames": 61,
"min_frames": 61,
"frame_rate": 25,
"bucket_strategy": "aspect_ratio"
},
"repeats": 10
},
{
"id": "text-embeds",
"type": "local",
"dataset_type": "text_embeds",
"default": true,
"cache_dir": "cache/text/ltxvideo2",
"disabled": false
}
]
In the video subsection:
num_frames: Target frame count for training.min_frames: Minimum video length (shorter videos are discarded).max_frames: Maximum video length filter.bucket_strategy: How videos are grouped into buckets:aspect_ratio(default): Group by spatial aspect ratio only.resolution_frames: Group byWxH@Fformat (e.g.,1920x1080@61) for mixed-resolution/duration datasets.
frame_interval: When usingresolution_frames, round frame counts to this interval.
LTX-2 supports video-only training without audio. To enable audio training, add an audio block to your video
dataset configuration:
"audio": {
"auto_split": true,
"sample_rate": 16000,
"channels": 1,
"duration_interval": 3.0,
"allow_zero_audio": false
}
When the audio section is present, SimpleTuner auto-generates an audio dataset from your video files and caches
audio latents alongside video latents. Set audio.allow_zero_audio: true if your videos lack audio streams.
Without an audio section, LTX-2 trains on video only and masks audio loss automatically.
See caption_strategy options and requirements in DATALOADER.md.
Directory setup
mkdir -p datasets/videos
</details>
# Place .mp4 / .mov files here.
# Place corresponding .txt files with same filename for captions.
Login
wandb login
huggingface-cli login
Executing the training
simpletuner train
Notes & troubleshooting tips
Out of Memory (OOM)
Video training is extremely demanding. If you OOM:
- Reduce Resolution: Try 480p (
480x854or similar). - Reduce Frames: Drop
validation_num_video_framesand datasetnum_framesto33or49. - Check Offload: Ensure
--enable_group_offloadis active.
Validation Video Quality
- Black/Noise Videos: Often caused by
validation_guidancebeing too high (> 6.0) or too low (< 2.0). Stick to5.0. - Motion Jitter: Check if your dataset frame rate matches the model's trained frame rate (often 25fps).
- Stagnant/Static Video: The model might be undertrained or the prompt isn't describing motion. Use prompts like "camera pans right", "zoom in", "running", etc.
TREAD training
TREAD works for video too and is highly recommended to save compute.
Add to config.json:
View example config
{
"tread_config": {
"routes": [
{
"selection_ratio": 0.5,
"start_layer_idx": 2,
"end_layer_idx": -2
}
]
}
}
This can speed up training by ~25-40% depending on the ratio.
Lowest VRAM use config (7900XTX)
Field-tested config that prioritizes minimal VRAM usage on LTX Video 2.
View 7900XTX config (lowest VRAM use)
{
"base_model_precision": "int8-quanto",
"checkpoint_step_interval": 100,
"data_backend_config": "config/ltx2/multidatabackend.json",
"disable_benchmark": true,
"dynamo_mode": "",
"evaluation_type": "none",
"hub_model_id": "simpletuner-ltxvideo2-19b-t2v-lora-test",
"learning_rate": 0.00006,
"lr_warmup_steps": 50,
"lycoris_config": "config/lycoris_config.json",
"max_grad_norm": 0.1,
"max_train_steps": 200,
"minimum_image_size": 0,
"model_family": "ltxvideo2",
"model_flavour": "dev",
"model_type": "lora",
"num_train_epochs": 0,
"offload_during_startup": true,
"optimizer": "adamw_bf16",
"output_dir": "output/examples/ltxvideo2-19b-t2v.peft-lora",
"override_dataset_config": true,
"ramtorch": true,
"ramtorch_text_encoder": true,
"report_to": "none",
"resolution": 480,
"scheduled_sampling_reflexflow": false,
"seed": 42,
"skip_file_discovery": "",
"tracker_project_name": "lora-training",
"tracker_run_name": "example-training-run",
"train_batch_size": 2,
"vae_batch_size": 1,
"vae_enable_patch_conv": true,
"vae_enable_slicing": true,
"vae_enable_temporal_roll": true,
"vae_enable_tiling": true,
"validation_disable": true,
"validation_disable_unconditional": true,
"validation_guidance": 5,
"validation_num_inference_steps": 40,
"validation_num_video_frames": 81,
"validation_prompt": "๐ซ is holding a sign that says hello world from ltxvideo2",
"validation_resolution": "768x512",
"validation_seed": 42,
"validation_using_datasets": false
}
Audio-Only Training
LTX-2 supports audio-only training where you train only the audio generation capability without video files. This is useful when you have audio datasets but no corresponding video content.
In audio-only mode:
- Video latents are automatically zeroed out (minimal 64x64 resolution to save memory)
- Video loss is masked (not computed)
- Only audio generation layers are trained
Audio-only mode is automatically detected when your dataset configuration contains only audio datasets (no video or image datasets). You can also explicitly enable it with audio.audio_only: true.
Audio-only dataset configuration
[
{
"id": "my-audio-dataset",
"type": "local",
"dataset_type": "audio",
"instance_data_dir": "datasets/audio",
"caption_strategy": "textfile",
"audio": {
"sample_rate": 16000,
"channels": 2,
"duration_interval": 3.0,
"truncation_mode": "beginning"
},
"repeats": 10
},
{
"id": "text-embeds",
"type": "local",
"dataset_type": "text_embeds",
"default": true,
"cache_dir": "cache/text/ltxvideo2",
"disabled": false
}
]
Key audio settings:
channels: Must be 2 (stereo) for the LTX-2 audio VAEduration_interval: Bucket audio into intervals (e.g., 3.0 seconds). Important for memory management - long audio files create many video frames even though they're zerostruncation_mode: How to handle audio longer than the bucket duration (beginning,end, orrandom)
Supported audio formats
SimpleTuner supports common audio formats (.wav, .flac, .mp3, .ogg, .opus, etc.) as well as container formats that may contain audio-only content (.mp4, .mpeg, .mkv, .webm). Container formats are automatically extracted using ffmpeg.
LoRA targets for audio training
When audio data is detected in your datasets, SimpleTuner automatically adds audio-specific modules to the LoRA targets:
audio_proj_in- Audio input projectionaudio_proj_out- Audio output projectionaudio_caption_projection.linear_1- Audio caption projection layer 1audio_caption_projection.linear_2- Audio caption projection layer 2
This happens automatically for both audio-only training and joint audio+video training.
If you want to override the LoRA targets manually, use --peft_lora_target_modules with a JSON list of module names.
Place your audio files in the instance_data_dir with corresponding .txt caption files.
Validation workflows (T2V vs I2V)
- T2V (text-to-video): Leave
validation_using_datasets: falseand usevalidation_promptorvalidation_prompt_library. - I2V (image-to-video): Set
validation_using_datasets: trueand pointeval_dataset_idat a validation split that provides a reference image. Validation will switch to the image-to-video pipeline and use that image as the conditioner. - S2V (audio-conditioned): With
validation_using_datasets: true, pointeval_dataset_idat a dataset withs2v_datasets(or the defaultaudio.auto_splitbehavior). Validation will load cached audio latents automatically. - Spatial upscale validation: Set
ltx2_validation_pipeline_mode: "spatial-upscale"to validate with the LTX-2 spatial upscaler pass. Stage 1 runs at half resolution, the upsampler doubles video latents, and stage 2 re-denoises at the requested resolution.validation_audio_onlystays on the single-stage path.
Validation adapters (LoRAs)
Lightricks provides several LoRAs that can be applied during validation via validation_adapter_path (single) or
validation_adapter_config (multiple runs). These repos use nonstandard weight filenames, so include the filename
via repo_id:weight_name. See the LTX-2 collection for the latest filenames and related assets:
https://huggingface.co/collections/Lightricks/ltx-2
Lightricks/LTX-2-19b-IC-LoRA-Canny-Control:ltx-2-19b-ic-lora-canny-control.safetensorsLightricks/LTX-2-19b-IC-LoRA-Depth-Control:ltx-2-19b-ic-lora-depth-control.safetensorsLightricks/LTX-2-19b-IC-LoRA-Detailer:ltx-2-19b-ic-lora-detailer.safetensorsLightricks/LTX-2-19b-IC-LoRA-Pose-Control:ltx-2-19b-ic-lora-pose-control.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In:ltx-2-19b-lora-camera-control-dolly-in.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out:ltx-2-19b-lora-camera-control-dolly-out.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left:ltx-2-19b-lora-camera-control-dolly-left.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right:ltx-2-19b-lora-camera-control-dolly-right.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down:ltx-2-19b-lora-camera-control-jib-down.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up:ltx-2-19b-lora-camera-control-jib-up.safetensorsLightricks/LTX-2-19b-LoRA-Camera-Control-Static:ltx-2-19b-lora-camera-control-static.safetensors
Example validation_adapter_config:
{
"validation_adapter_config": [
{ "label": "canny", "path": "Lightricks/LTX-2-19b-IC-LoRA-Canny-Control:ltx-2-19b-ic-lora-canny-control.safetensors" },
{ "label": "pose", "path": "Lightricks/LTX-2-19b-IC-LoRA-Pose-Control:ltx-2-19b-ic-lora-pose-control.safetensors" }
]
}
For faster validation, apply Lightricks/LTX-2-19b-distilled-lora-384:ltx-2-19b-distilled-lora-384.safetensors
as a validation adapter and set validation_guidance: 1 plus validation_num_inference_steps: 8.