Seedance 2.5 Now Live | Try in Video Generator →

wavespeed-ai/

LTX 2.5 Text-to-Video generates high-fidelity synchronized audio-video content from text prompts, with flexible duration and 720P / 1080P / 2K / 4K output for cinematic videos, social content, ads, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

text-to-video
Input

Idle

$0.5per run·~20 / $10

Next:

ExamplesView all

A young male saxophone player standing under a streetlamp at night in a quiet city square, wearing a dark coat and scarf, holding a golden saxophone, cobblestone ground reflecting the light, full body visible, cinematic music drama style. He lifts the saxophone and begins playing while the camera slowly circles around him. His coat moves lightly in the night breeze, and the glow of the streetlamp reflects off the instrument. Emotional performance, smooth circular camera movement, moody nighttime ambiance.

Related Models

README

LTX-2.5 Text-to-Video

LTX-2.5 Text-to-Video generates synchronized video and audio directly from a text prompt. It supports multiple resolutions, landscape or vertical aspect ratios, and prompt-guided control over scene composition, subject motion, camera movement, and audio direction.

Why Choose This?

  • Text-to-video generation
    Generate videos directly from natural-language prompts.

  • Native audio generation
    Create synchronized audio together with the video output.

  • Multiple resolution options
    Choose from 720p, 1080p, 2k, or 4k depending on quality and cost needs.

  • Landscape and vertical formats
    Use 16:9 for landscape video or 9:16 for vertical content.

  • Controlled duration
    Generate videos from 5 to 20 seconds.

  • Seed control
    Use a fixed seed for more reproducible prompt testing and variation comparison.

Parameters

ParameterRequiredDescription
promptYesText description of the scene, subject, motion, camera movement, visual style, and audio direction.
resolutionNoOutput resolution: 720p, 1080p, 2k, or 4k. Default: 720p.
aspect_ratioNoOutput aspect ratio: 16:9 or 9:16. Default: 16:9.
durationNoVideo length in seconds. Range: 5–20.
seedNoRandom seed. Use -1 for a random seed.

How to Use

  1. Write your prompt — Describe the subject, action, setting, camera movement, lighting, mood, and audio direction.
  2. Choose resolution — Select 720p, 1080p, 2k, or 4k.
  3. Choose aspect ratio — Use 16:9 for landscape video or 9:16 for vertical content.
  4. Set duration — Choose a video length from 5 to 20 seconds.
  5. Set seed optional — Use a fixed seed for more reproducible outputs, or -1 for a random seed.
  6. Submit — Generate the final text-to-video output with synchronized audio.

Pricing

Pricing is based on generated video duration and selected resolution.

Native audio is included at every resolution and does not add a separate charge.

ResolutionPer second5s10s20s
720p$0.10$0.50$1.00$2.00
1080p$0.14$0.70$1.40$2.80
2k$0.21$1.05$2.10$4.20
4k$0.33$1.65$3.30$6.60

Best Use Cases

  • Cinematic scene generation — Create short visual scenes from detailed prompts.
  • Social media content — Generate landscape or vertical clips for different platforms.
  • Marketing videos — Produce promotional clips, product scenes, and campaign visuals.
  • Storyboarding — Turn written scene ideas into motion previews.
  • Creative prototyping — Test motion, camera direction, audio style, and pacing from text.
  • Prompt iteration — Compare different visual and audio directions with controlled seeds.

Pro Tips

  • Include subject, setting, action, camera movement, lighting, mood, and audio cues in the prompt.
  • Use 9:16 for vertical mobile content and 16:9 for landscape video.
  • Use shorter durations for quick prompt testing and longer durations when the scene needs more time.
  • Use 720p for lower-cost iteration and higher resolutions for final-quality outputs.
  • Set a fixed seed when comparing prompt variations.
  • Keep the prompt focused on one main scene or action for stronger motion coherence.
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Ltx 2.5 Text To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-2.5/text-to-video 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 2.5 Text To Video below.

HTTP example
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",
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "duration": 5,
    "seed": -1
}
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-2.5/text-to-video" \
  -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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/ltx-2.5/text-to-video";
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",
        "resolution": "720p",
        "aspect_ratio": "16:9",
        "duration": 5,
        "seed": -1
}),
});
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));
}
Python example
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",
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "duration": 5,
    "seed": -1
}

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-2.5/text-to-video", 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 2.5 Text To Video API — Frequently asked questions

What is the Ltx 2.5 Text To Video API?

Ltx 2.5 Text To Video is a WaveSpeedAI model for video generation, exposed as a REST API on WaveSpeedAI. LTX 2.5 Text-to-Video generates high-fidelity synchronized audio-video content from text prompts, with flexible duration and 720P / 1080P / 2K / 4K output for cinematic videos, social content, ads, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Ltx 2.5 Text To Video API?

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-2.5-text-to-video.

How much does Ltx 2.5 Text To Video cost per run?

Ltx 2.5 Text To Video starts at $0.50 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.

What inputs does Ltx 2.5 Text To Video accept?

Key inputs: `prompt`, `aspect_ratio`, `resolution`, `duration`, `seed`. 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-2.5-text-to-video.

How long does Ltx 2.5 Text To Video take to generate?

Median end-to-end generation time on WaveSpeedAI is around 189 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Ltx 2.5 Text To Video outputs commercially?

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.

LTX 2.5 Text to Video API on WaveSpeedAI