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.0062 * steps. With 1000 steps, your request will cost $6.20.
Fine-tune your training parameters and start right now.
/extend-prefix)The /extend-prefix endpoint trains a LoRA for the LTX 2.3 model that continues a video forward in time. During training, the first N frames of each clip are kept as a clean "prefix" and the model learns to generate everything that follows. At inference you supply an opening clip and the model produces the continuation in the learned style.
Key features:
Provide a single .zip archive (linked via training_data_url) of plain videos:
.mp4, .mov, .avi, .mkv.txt with the same base name as each video (optional but recommended).Images are rejected (there is nothing to extend over time on a still). If you enable audio extension, every training clip — and every validation clip — must contain an audio track. Aim for at least 10 clips. 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.
With with_audio enabled, audio is required on every clip. Joint audio extension requires every training clip and every validation clip to contain an audio track; if any lacks one, the request is rejected (HTTP 422). With with_audio off, audio is ignored and the output is silent.
training_data_url (required)Type: string
URL to the .zip archive of videos.
trigger_phraseType: string
Default: ""
Phrase prepended to captions during training; include it at inference.
rankType: integer (8, 16, 32, 64, 128)
Default: 32
LoRA capacity.
number_of_stepsType: integer
Default: 2000 (range 100–20000)
Number of optimization steps.
learning_rateType: number
Default: 0.0002
Optimization step size.
conditioning_framesType: integer
Default: 9 (range 9–121)
Number of leading frames kept as the clean prefix the model continues from. Must be ≡ 1 (mod 8) (e.g. 9, 17, 25). It must be short enough that there is a continuation left to generate — i.e. the prefix cannot cover the whole number_of_frames (or validation_number_of_frames) clip.
| Value | Behavior |
|---|---|
| 9 | Short prefix — the model generates most of the clip (default) |
| 17–25 | Longer context window before the generated continuation |
number_of_framesType: integer
Default: 89 (range 9–121)
Frames per training clip. Must satisfy frames % 8 == 1 (other values are snapped down to the nearest valid count) and must be larger than the prefix window.
frame_rateType: integer
Default: 24 (range 8–60)
Target frames per second.
resolutionType: string (low, medium, high)
Default: medium
| 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 (16:9, 1:1, 9:16)
Default: 1:1
auto_scale_inputType: boolean
Default: false
Fit videos to the target frame count and frame rate.
split_input_into_scenesType: boolean
Default: true
Split long clips into scenes before training.
split_input_duration_thresholdType: number
Default: 30.0 (range 1.0–60.0)
Duration above which a clip is eligible for scene splitting.
with_audioType: boolean
Default: false
Set true to jointly extend audio and video — the model continues both from the same opening window so they stay in sync. Requires every training clip and every validation clip to contain an audio track. Default (false) produces a video-only, silent extension.
audio_normalizeType: boolean
Default: true
Peak-normalize audio for consistent loudness (used when audio extension is enabled).
audio_preserve_pitchType: boolean
Default: true
Preserve pitch when fitting audio to video duration.
validationType: array
Default: [] (max 2 entries)
Validation samples, each an object with:
prompt (string) — the text prompt.video_url (string, required) — a video to extend forward. Its first conditioning_frames frames are used as the prefix.The validation clip must be at least conditioning_frames long (at the validation frame rate).
validation_negative_promptType: string
Default: a built-in quality negative prompt.
validation_number_of_framesType: integer
Default: 89 (range 9–121)
Must be larger than the prefix window so there is a continuation to preview.
validation_frame_rateType: integer
Default: 24 (range 8–60)
validation_resolutionType: string
Default: high
validation_aspect_ratioType: string
Default: 1:1
stg_scaleType: number
Default: 1.0 (range 0.0–3.0)
debug_datasetType: boolean
Default: false
Return an archive of the preprocessed data for inspection.
lora_file — the trained LoRA weights (.safetensors).config_file — JSON describing the trigger phrase and training type.video — combined validation reel (when validation samples were provided).debug_dataset — preprocessed-data archive, only when debug_dataset is enabled.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.
conditioning_frames frames are held clean as the prefix and the model learns to generate the rest. With audio extension on, the matching opening audio window conditions the audio so it continues in sync. Validation previews run at intervals..zip is unpacked; macOS __MACOSX metadata folders are ignored.auto_scale_input they are resampled to the target frame rate/count.conditioning_frames frames of each clip are kept clean as conditioning; the remainder is the generation target. This happens automatically — you do not need to mark anything.Good caption: a car accelerating down a straight road
Weak caption: car
At inference, supply an opening clip at least conditioning_frames long, use the same caption style and trigger phrase, and match the audio setting (audio-on extension expects an audio track).
json{ "training_data_url": "https://example.com/clips.zip", "trigger_phrase": "", "rank": 32, "number_of_steps": 2000, "learning_rate": 0.0002, "conditioning_frames": 9, "number_of_frames": 89, "frame_rate": 24, "resolution": "medium", "aspect_ratio": "1:1", "with_audio": false, "validation": [ { "prompt": "a car accelerating down a road", "video_url": "https://example.com/opening.mp4" } ] }
conditioning_frames for more context.conditioning_frames long, or lower conditioning_frames.with_audio is true, every training and validation clip must have an audio track.rank, more clips.conditioning_frames not ≡ 1 (mod 8) (use 9, 17, 25, ...).