usamaehsan/ltx-2.5
Run usamaehsan/ltx-2.5 with an API
Use one of our client libraries to get started quickly. Clicking on a library will take you to the Playground tab where you can tweak different inputs, see the results, and copy the corresponding code to use in your own project.
Input schema
The fields you can use to run this model with an API. If you don't give a value for a field its default value will be used.
| Field | Type | Default value | Description |
|---|---|---|---|
| prompt |
string
|
Text prompt describing the video
|
|
| image |
string
|
Optional first-frame image (image-to-video)
|
|
| keyframe_2 |
string
|
Optional second keyframe. The video is steered to pass through this image at keyframe_2_at seconds. Leave keyframe_2_at at -1 to pin it to the final frame (first-frame/last-frame interpolation).
|
|
| keyframe_2_at |
number
|
-1
Min: -1 |
Position of keyframe_2 in seconds; -1 = last frame
|
| keyframe_3 |
string
|
Optional third keyframe
|
|
| keyframe_3_at |
number
|
-1
Min: -1 |
Position of keyframe_3 in seconds; -1 = last frame
|
| keyframe_4 |
string
|
Optional fourth keyframe
|
|
| keyframe_4_at |
number
|
-1
Min: -1 |
Position of keyframe_4 in seconds; -1 = last frame
|
| keyframe_strength |
number
|
1
Max: 1 |
How hard the keyframes are enforced. 1.0 locks them exactly; lower values let the model blend, which can look more natural.
|
| generated_keyframes |
integer
|
0
Max: 8 |
Have the model invent this many evenly spaced keyframes before filling in between them. Can improve coherence on long clips. 0 = off.
|
| audio |
string
|
Optional audio track to drive the video. The video is generated against this audio instead of the model inventing its own. When duration is 0 the clip length follows the audio.
|
|
| audio_start_time |
number
|
0
|
Seconds to skip into the audio file
|
| camera_move |
None
|
none
|
Camera motion to impose on the shot. 'none' leaves the camera to the prompt; 'static' actively holds it still.
|
| camera_strength |
number
|
1
Max: 2 |
How strongly the camera move is applied. Above ~1.2 the motion gets more literal at the cost of image quality.
|
| control_video |
string
|
Control-signal video for in-context control. Must be frame-aligned with the shot you want: a depth / pose / canny-edge pass for control_type 'union', or coloured motion splines for 'motion_track'. Ignored unless control_type is set.
|
|
| control_type |
None
|
none
|
Which in-context adapter reads control_video. 'union' handles depth, pose and canny (it infers which from the video itself); 'motion_track' follows drawn point trajectories.
|
| control_strength |
number
|
1
Max: 1 |
How closely the output follows control_video. 1.0 keeps the reference clean and fully authoritative.
|
| reference_image |
string
|
Context image: a person, product, logo or place to put INTO the video, anywhere in the shot (not a frame lock -- use image for that). Best as a reference sheet: one clean panel per element on black, no text. Write the prompt as 'Reference sheet: <what the panels show>' then 'Generated video: <the action>'; a plain prompt is wrapped automatically. Trained at 768x448 landscape. Cannot be combined with control_video.
|
|
| width |
integer
|
768
Min: 256 Max: 1536 |
None
|
| height |
integer
|
1280
Min: 256 Max: 1536 |
None
|
| duration |
number
|
4
Max: 20 |
Clip length in seconds. 0 = auto: follow the audio if one is given, otherwise let the model predict a length from the prompt.
|
| seed |
integer
|
-1
|
-1 = random
|
{
"type": "object",
"title": "Input",
"required": [
"prompt"
],
"properties": {
"seed": {
"type": "integer",
"title": "Seed",
"default": -1,
"x-order": 21,
"description": "-1 = random"
},
"audio": {
"type": "string",
"title": "Audio",
"format": "uri",
"x-order": 10,
"description": "Optional audio track to drive the video. The video is generated against this audio instead of the model inventing its own. When duration is 0 the clip length follows the audio."
},
"image": {
"type": "string",
"title": "Image",
"format": "uri",
"x-order": 1,
"description": "Optional first-frame image (image-to-video)"
},
"width": {
"type": "integer",
"title": "Width",
"default": 768,
"maximum": 1536,
"minimum": 256,
"x-order": 18
},
"height": {
"type": "integer",
"title": "Height",
"default": 1280,
"maximum": 1536,
"minimum": 256,
"x-order": 19
},
"prompt": {
"type": "string",
"title": "Prompt",
"x-order": 0,
"description": "Text prompt describing the video"
},
"duration": {
"type": "number",
"title": "Duration",
"default": 4,
"maximum": 20,
"minimum": 0,
"x-order": 20,
"description": "Clip length in seconds. 0 = auto: follow the audio if one is given, otherwise let the model predict a length from the prompt."
},
"keyframe_2": {
"type": "string",
"title": "Keyframe 2",
"format": "uri",
"x-order": 2,
"description": "Optional second keyframe. The video is steered to pass through this image at keyframe_2_at seconds. Leave keyframe_2_at at -1 to pin it to the final frame (first-frame/last-frame interpolation)."
},
"keyframe_3": {
"type": "string",
"title": "Keyframe 3",
"format": "uri",
"x-order": 4,
"description": "Optional third keyframe"
},
"keyframe_4": {
"type": "string",
"title": "Keyframe 4",
"format": "uri",
"x-order": 6,
"description": "Optional fourth keyframe"
},
"camera_move": {
"enum": [
"none",
"static",
"dolly_in",
"dolly_out",
"dolly_left",
"dolly_right",
"jib_up",
"jib_down"
],
"type": "string",
"title": "camera_move",
"description": "Camera motion to impose on the shot. 'none' leaves the camera to the prompt; 'static' actively holds it still.",
"default": "none",
"x-order": 12
},
"control_type": {
"enum": [
"none",
"union",
"motion_track"
],
"type": "string",
"title": "control_type",
"description": "Which in-context adapter reads control_video. 'union' handles depth, pose and canny (it infers which from the video itself); 'motion_track' follows drawn point trajectories.",
"default": "none",
"x-order": 15
},
"control_video": {
"type": "string",
"title": "Control Video",
"format": "uri",
"x-order": 14,
"description": "Control-signal video for in-context control. Must be frame-aligned with the shot you want: a depth / pose / canny-edge pass for control_type 'union', or coloured motion splines for 'motion_track'. Ignored unless control_type is set."
},
"keyframe_2_at": {
"type": "number",
"title": "Keyframe 2 At",
"default": -1,
"minimum": -1,
"x-order": 3,
"description": "Position of keyframe_2 in seconds; -1 = last frame"
},
"keyframe_3_at": {
"type": "number",
"title": "Keyframe 3 At",
"default": -1,
"minimum": -1,
"x-order": 5,
"description": "Position of keyframe_3 in seconds; -1 = last frame"
},
"keyframe_4_at": {
"type": "number",
"title": "Keyframe 4 At",
"default": -1,
"minimum": -1,
"x-order": 7,
"description": "Position of keyframe_4 in seconds; -1 = last frame"
},
"camera_strength": {
"type": "number",
"title": "Camera Strength",
"default": 1,
"maximum": 2,
"minimum": 0,
"x-order": 13,
"description": "How strongly the camera move is applied. Above ~1.2 the motion gets more literal at the cost of image quality."
},
"reference_image": {
"type": "string",
"title": "Reference Image",
"format": "uri",
"x-order": 17,
"description": "Context image: a person, product, logo or place to put INTO the video, anywhere in the shot (not a frame lock -- use image for that). Best as a reference sheet: one clean panel per element on black, no text. Write the prompt as 'Reference sheet: <what the panels show>' then 'Generated video: <the action>'; a plain prompt is wrapped automatically. Trained at 768x448 landscape. Cannot be combined with control_video."
},
"audio_start_time": {
"type": "number",
"title": "Audio Start Time",
"default": 0,
"minimum": 0,
"x-order": 11,
"description": "Seconds to skip into the audio file"
},
"control_strength": {
"type": "number",
"title": "Control Strength",
"default": 1,
"maximum": 1,
"minimum": 0,
"x-order": 16,
"description": "How closely the output follows control_video. 1.0 keeps the reference clean and fully authoritative."
},
"keyframe_strength": {
"type": "number",
"title": "Keyframe Strength",
"default": 1,
"maximum": 1,
"minimum": 0,
"x-order": 8,
"description": "How hard the keyframes are enforced. 1.0 locks them exactly; lower values let the model blend, which can look more natural."
},
"generated_keyframes": {
"type": "integer",
"title": "Generated Keyframes",
"default": 0,
"maximum": 8,
"minimum": 0,
"x-order": 9,
"description": "Have the model invent this many evenly spaced keyframes before filling in between them. Can improve coherence on long clips. 0 = off."
}
}
}
Output schema
The shape of the response you’ll get when you run this model with an API.
{
"type": "string",
"title": "Output",
"format": "uri"
}