Ltx 2 19b Control API Documentation

Ltx 2 19b Control API Documentation

Playground

Try it on WaveSpeedAI!

LTX-2 19B ControlNet generates synchronized audio-video (up to 20s) from video input with pose, depth, or canny edge guidance. Supports audio preservation, generation, or removal for flexible video transformation. Ready-to-use REST inference API, best performance, no cold starts, affordable pricing.

Features

LTX-2 ControlNet is a video-to-video transformation model that applies pose, depth, or edge guidance to generate new video content while preserving motion structure from the input. Built on the 19B DiT architecture, it supports synchronized audio handling with options to preserve original audio, generate new audio, or output silent video.


Why Choose This?

  • ControlNet guidance modes Choose from pose, depth, or canny edge detection to guide video generation while preserving motion structure.

  • Flexible audio handling Preserve original audio, generate new synchronized audio, or create silent output.

  • High-fidelity output Leverages the 19B-parameter DiT architecture for detailed, temporally consistent video.

  • Character-driven transformation Use a reference image to drive the appearance while the input video controls motion.

  • Prompt Enhancer Built-in tool to automatically improve your prompts for better results.


Parameters

ParameterRequiredDescription
videoYesInput video providing motion and structure
imageNoReference image for appearance guidance
promptNoText description of desired output
modeNoControl mode: pose (default), depth, or canny
audio_modeNoAudio handling: preserve (default), generate, or none
resolutionNoOutput resolution: 480p, 720p (default), or 1080p
seedNoRandom seed for reproducibility (-1 for random)

Control Modes

ModeDescription
poseSkeleton/pose guidance for human motion (default)
depthDepth map guidance for scene structure
cannyEdge detection guidance for shape preservation

Audio Modes

ModeDescription
preserveKeep original audio from input video (default)
generateCreate new synchronized audio
noneOutput video without audio

How to Use

  1. Upload your video — the input video providing motion structure.
  2. Upload your image (optional) — reference image that defines appearance.
  3. Write your prompt — describe the desired transformation.
  4. Select control mode — pose, depth, or canny based on your needs.
  5. Select audio mode — preserve, generate, or none.
  6. Set resolution — 480p for speed, 720p for balance, 1080p for quality.
  7. Run — submit and download the transformed video.

Pricing

> Billing duration: Input media duration is rounded up to whole seconds. The minimum billed duration is 3 seconds; shorter inputs are billed as 3 seconds. Existing per-5-second rate tables remain unchanged.

Resolution5s10s15s20s (max)
480p$0.15$0.30$0.45$0.60
720p$0.20$0.40$0.60$0.80
1080p$0.30$0.60$0.90$1.20

Billing Rules

  • Base price: $0.20 (720p, 5 seconds)
  • Resolution multiplier: 480p = 0.75×, 720p = 1×, 1080p = 1.5×
  • Minimum charge: 3 seconds
  • Maximum billed duration: 20 seconds
  • Total cost = (duration / 5) × $0.20 × resolution_multiplier

Best Use Cases

  • Character Animation — Animate a character image with motion from reference video.
  • Style Transfer — Apply a reference style to existing video content.
  • Motion Preservation — Maintain motion structure while changing appearance.
  • Video Editing — Transform video subjects while keeping movement.
  • Dance Transfer — Apply dance moves to different characters.

Pro Tips

  • Match the subject pose in your image to the starting pose in the video.
  • Use pose mode for human/character motion, depth for scene structure, canny for edge-based guidance.
  • Preserve audio for lip-sync scenarios, generate for new content.
  • Iterate at 480p, then render final at 720p or 1080p.

Notes

  • Maximum video duration is 20 seconds per job.
  • Videos shorter than 3 seconds are billed as 3 seconds.
  • For best results, ensure the reference image matches the subject type in the video.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "mode": "pose",
  "audio_mode": "preserve",
  "resolution": "720p",
  "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-19b/control" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; 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 type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  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

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
videostringYes-The video for generating the output.
imagestringNo-Optional reference image for appearance guidance. If not provided, the model generates based on the prompt.
promptstringNo-The positive prompt for the generation.
modestringNoposepose, depth, cannyThe control mode for video generation. Pose: skeleton/pose guidance. Canny: edge detection guidance. Depth: depth map guidance.
audio_modestringNopreservepreserve, generate, noneAudio handling mode. Preserve: keep original audio from input video. Generate: create new synchronized audio. None: output video without audio.
resolutionstringNo720p480p, 720p, 1080pThe resolution of the output video.
seedintegerNo-1-The random seed to use for the generation. -1 means a random seed will be used.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.