Generate 720p videos from text prompts and images with LTX Video-0.9.7 for consistent, high-quality image-to-video results. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Siap
$0.3per run·~33 / $10
A bearded European man in classical attire, with a profound gaze, depicted in a classical oil painting. The background is a dark void, with light only illuminating his face and shoulders. His expression is serene, but as the camera slowly moves closer, the lighting on his face subtly shifts, as if the painting is breathing. Classical oil painting, chiaroscuro lighting, thick brushstrokes, high resolution, canvas texture, heavy paint texture, rich colors, cinematic. A very slow zoom-in shot.
A confident young tech professional standing in a modern office space, talking to the camera with calm gestures. Soft daylight, clean environment, business casual outfit, focused expression. Center frame, smooth motion
A young woman with a soft face and a hint of anticipation in her eyes is waiting in a quiet station lounge. Soft light streams in from a window, illuminating her face as she looks straight at the camera. Her eyes gently shift, her breathing is steady, and a slow smile gradually forms on her lips. Hyper-realistic, serene, cinematic, 8K, highly detailed skin texture, delicate glint in her eyes, blurred reflections on the window, depth of field. A static frontal close-up shot.
A woman is listening intently, her face in profile to the camera. She is in a dimly lit room with a soft-glowing table lamp in front of her. Her expression is focused and still, then her eyebrows slightly lift, and a knowing smile slowly appears. Hyper-realistic, warm, shallow depth of field, 8K, realistic skin texture, reflection of the lamp in her eyes, light-shadow details on her hair and face, warm color tones. A static side close-up shot.
A young boy with bright, large eyes and smooth black hair, in the style of anime art. The background is a futuristic city street with glowing neon lights. He looks straight at the camera, his expression slowly changing from calm to a shy smile, as a single strand of hair gently sways in the wind. Anime art, cel-shaded, bright colors, high resolution, clean lines, detailed eye highlights, depth of field. A static frontal close-up shot.
A young woman in a sweater is sitting by a window in a cafe. The background shows a blurry barista at work and other patrons chatting, with a warm, soft light filling the space. She gently blows on a steaming cup of coffee, a wisp of steam slowly rising in front of her face as her expression transitions from calm to contemplative. Hyper-realistic, cinematic, warm, 8K, highly detailed texture of the sweater, water droplets and shine on the coffee cup, dynamic effect of the steam, depth of field. A very slow zoom-in shot from her chest to her face.
Arc shot, a ballerina is twirling gracefully in the center of an empty grand ballroom, sunlight streaming through arched windows, dust particles visible in the light, slow motion.
Extreme close-up on a woman's face, her eyes are closed. Rain is dripping from her eyelashes. She slowly opens her eyes. A single tear mixes with the rain and rolls down her cheek. Super slow motion, moody, blue tones, photorealistic.
Close-up shot, a beautiful woman bursts into laughter, throwing her head back slightly, her long hair swinging with the motion, cinematic lighting, bokeh background, photorealistic, detailed skin texture.
Medium shot, a young girl in a yellow raincoat catches a single raindrop on her fingertip, looking at it with wonder, shallow depth of field, London street in the background, slow motion.
LTX-Video v0.97 I2V 720p generates short videos from a single reference image plus a text prompt. Upload an image to anchor the subject and composition, then describe motion, camera movement, lighting, and style to animate the scene. This model is well-suited for cinematic image animation, stylized shots (e.g., oil painting, illustration), and smooth camera moves at 720p.
| Output | Price per run |
|---|---|
| 720p I2V video | $0.30 |
Write prompts like a director’s brief:
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-video-v097/i2v-720p with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Ltx Video v097 I2v 720p below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "1280*720"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-video-v097/i2v-720p" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "$TASK" | jq -r '.urls.get // empty')
if [ -z "$RESULT_URL" ]; then
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
-H "Authorization: Bearer $WAVESPEED_API_KEY")
RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-video-v097/i2v-720p";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "1280*720"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "1280*720"
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-video-v097/i2v-720p", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)Ltx Video v097 I2v 720p is a WaveSpeedAI model for video generation from images, exposed as a REST API on WaveSpeedAI. Generate 720p videos from text prompts and images with LTX Video-0.9.7 for consistent, high-quality image-to-video results. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/ltx-video-v097-i2v-720p.
Ltx Video v097 I2v 720p starts at $0.30 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `image`, `size`, `seed`, `negative_prompt`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/ltx-video-v097-i2v-720p.
Median end-to-end generation time on WaveSpeedAI is around 124 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.