Loading playground
Input
Additional Settings
Customize your input with more control.
Result
Idle
Customize your input with more control.
Customize your input with more control.
Hint: Upload a prepared .zip archive or provide a URL. See the field description for the required file layout.
Customize your input with more control.
The cost of training depends on the number of steps. The formula is: 0.006 * steps. With 1000 steps, your request will cost $6.00.
Fine-tune your training parameters and start right now.
/t2v)The /t2v endpoint trains a LoRA adapter for the LTX 2.3 video model on your own clips, so the model learns a new subject, character, object, or visual style that you can then summon at inference time with a text prompt. There is no conditioning asset — the model generates a full video from text alone.
Key features:
Provide a single .zip archive (linked via training_data_url) containing your clips and, optionally, captions:
.mp4, .mov, .avi, .mkv.png, .jpg, .jpeg.txt file with the same base name as each media file (e.g. clip01.mp4 + clip01.txt). Captions are optional but strongly recommended.The archive must contain only videos OR only images — mixed datasets are rejected. Aim for at least 10 files; more is generally better. Files in subfolders are fine — clips with the same name in different subfolders are kept distinct automatically.
Minimum clip length: with auto_scale_input off (the default), each video must already have at least number_of_frames frames (default 89, ≈ 3.7 s at 24 fps). Shorter clips are silently skipped, and if every clip is too short the request fails (422, "All training videos are too short to be trainable"). Turn on auto_scale_input to resample shorter clips to the target frame count instead. This applies to video datasets only; images are single-frame and always usable.
training_data_url (required)Type: string
URL to the .zip archive of training clips (and optional captions). See "Dataset Format" above.
trigger_phraseType: string
Default: ""
A phrase prepended to every caption during training. At inference, including this phrase activates the learned concept. Leave empty when teaching a general style you always want applied.
rankType: integer (one of 8, 16, 32, 64, 128)
Default: 32
LoRA capacity. Higher values can capture more detail but use more memory and are more prone to overfitting on small datasets.
| Value | Use Case |
|---|---|
| 8–16 | Small datasets, subtle styles, lower risk of overfitting |
| 32 | Balanced default |
| 64–128 | Larger datasets or complex subjects with lots of variation |
number_of_stepsType: integer
Default: 2000 (range 100–20000, in steps of 100)
How many optimization steps to run. More steps means more learning but also more time and a higher chance of overfitting.
learning_rateType: number
Default: 0.0002
How aggressively the model updates each step. The default is a sensible starting point; raise it cautiously and lower it if results look unstable or degraded.
number_of_framesType: integer
Default: 89 (range 9–121)
Frames per training clip. Must satisfy frames % 8 == 1 (e.g. 9, 17, 25, 33, 89, 121); other values are snapped down to the nearest valid count automatically. Has no effect on image datasets.
frame_rateType: integer
Default: 24 (range 8–60)
Target frames per second for training clips. LTX 2.3's native rate is 24.
resolutionType: string (one of low, medium, high)
Default: medium
Training resolution bucket. Combined with aspect_ratio this picks the exact pixel size:
| Resolution | 16:9 | 1:1 | 9:16 |
|---|---|---|---|
| low | 512×288 | 512×512 | 288×512 |
| medium | 768×448 | 768×768 | 448×768 |
| high | 960×544 | 960×960 | 544×960 |
aspect_ratioType: string (one of 16:9, 1:1, 9:16)
Default: 1:1
Aspect ratio for training clips. See the table above.
auto_scale_inputType: boolean
Default: false
When true, videos are automatically fit to the target frame count and frame rate. No effect on image datasets.
split_input_into_scenesType: boolean
Default: true
When true, videos longer than the duration threshold are automatically split into separate scenes (shots) before training.
split_input_duration_thresholdType: number
Default: 30.0 (range 1.0–60.0)
Videos longer than this many seconds are eligible for scene splitting.
with_audioType: boolean or null
Default: null (auto-detect)
Controls joint audio-video training, all-or-nothing across the dataset. With null (default, auto-detect), audio is enabled only when every clip has an audio track — if even one clip is silent, the whole run trains video-only. Set true to force audio training (the request fails with a 422 if any clip lacks an audio track), or false to ignore audio even when present.
audio_normalizeType: boolean
Default: true
Peak-normalize audio for consistent loudness across the dataset.
audio_preserve_pitchType: boolean
Default: true
When fitting audio to video duration, keep the original pitch (time-stretch) instead of trimming or padding.
Validation generates preview videos at intervals during training so you can monitor progress. Previews are single-stage approximations and will not perfectly match final production-quality inference.
validationType: array
Default: [] (max 2 entries)
A list of validation prompts. Each entry is an object with:
prompt (string) — the text prompt to preview.validation_negative_promptType: string
Default: a long built-in quality negative prompt.
Negative prompt applied to all validation previews.
validation_number_of_framesType: integer
Default: 89 (range 9–121)
Frame count for validation videos. Snapped to frames % 8 == 1.
validation_frame_rateType: integer
Default: 24 (range 8–60)
Frame rate for validation videos.
validation_resolutionType: string
Default: high
Resolution bucket for validation videos (same buckets as resolution).
validation_aspect_ratioType: string
Default: 1:1
Aspect ratio for validation videos.
stg_scaleType: number
Default: 1.0 (range 0.0–3.0)
Spatio-Temporal Guidance scale for validation previews. 0.0 disables it; 1.0 is recommended.
lora_file — the trained LoRA weights (.safetensors). This is the main artifact.config_file — a small JSON describing the trigger phrase and training type, for setting up inference.video — a combined preview reel of all validation samples (when validation prompts were provided).debug_dataset — a downloadable archive of your preprocessed data, only present when debug_dataset is enabled.debug_datasetType: boolean
Default: false
When enabled, returns an archive of the preprocessed training data so you can verify your videos, images, and captions were processed correctly before committing to a longer run.
A successful run is billed max(100, number_of_steps) billable units. Requests that fail before training completes (input-validation errors / HTTP 422, or dataset-download failures) are billed 0 units.
number_of_steps, running validation previews at intervals..zip is unpacked; macOS __MACOSX metadata folders are ignored..txt of the same base name. Files without a caption train on an empty caption (or just the trigger phrase, if set).auto_scale_input, clips are resampled to the target frame rate and frame count.split_input_into_scenes, clips longer than the threshold are cut into separate shots, each becoming its own training sample.A LoRA is a small set of adapter weights layered on top of the frozen base model. Training only updates these adapters, so the result is a compact file you load alongside the base LTX 2.3 model at inference. The base model's general capabilities are preserved; the LoRA nudges it toward your subject or style.
If all your videos have sound and audio is enabled, the LoRA learns the audio-video relationship, so generated videos can come with a matching soundtrack. Audio is all-or-nothing across the dataset: if any clip is silent, the whole run trains video-only. Leave with_audio at its default to let the trainer enable audio only when every clip has a track.
tronl0g0 a glowing blue logo spinning on a desk.Good caption: a red sports car drives along a coastal highway at sunset
Weak caption: car (too sparse to anchor the concept)
tronlog0) so it does not collide with words the model already knows, and include it in every caption.If split_input_into_scenes is on, one long video becomes several shorter clips that all share the original caption. If different parts of the video show different things, the shared caption may not describe each split accurately. For precise captions, pre-split your clips and disable scene splitting.
Prompt the trained LoRA the same way you captioned it. If you trained with a trigger phrase, include that phrase at inference. If your captions were short and descriptive, short descriptive prompts will behave most predictably.
json{ "training_data_url": "https://example.com/my_dataset.zip", "trigger_phrase": "tronlog0", "rank": 32, "number_of_steps": 2000, "learning_rate": 0.0002, "number_of_frames": 89, "frame_rate": 24, "resolution": "medium", "aspect_ratio": "1:1", "validation": [ { "prompt": "tronlog0 spinning slowly on a dark background" } ] }
number_of_steps, lower rank, or add more varied data.number_of_steps, raise rank, or improve caption quality.