Wan 2.2 I2V LoRA Trainer API Documentation

Wan 2.2 I2V LoRA Trainer API Documentation

Playground

Try it on WaveSpeedAI!

Train custom Wan 2.2 I2V LoRA models 10x faster. Action training, motion training, video efect training. From concept to model in minutes, not hours. Upload a ZIP file containing videos to start!

Features

Wan 2.2 I2V (Image-to-Video) LoRA Trainer is a specialized training service for creating custom LoRA models optimized for image-to-video generation. Train personalized models 10x faster using video datasets to achieve action and video effect generation from static images.

Training Architecture

Built on Wan 2.2’s advanced MoE (Mixture of Experts) architecture, the trainer generates two specialized LoRA models:

  • high_noise_lora: Optimized for high-noise denoising timesteps, handling initial motion planning and temporal structure
  • low_noise_lora: Optimized for low-noise denoising timesteps, refining motion details and ensuring smooth transitions

This dual-model approach ensures superior image-to-video conversion quality with consistent temporal coherence.

Training Process

  1. Video Data Upload: Upload a ZIP file containing your training video sequences
  2. Temporal Analysis: The system analyzes motion patterns and temporal relationships
  3. Dual Model Training: Simultaneously trains both high_noise_lora and low_noise_lora models
  4. Motion Optimization: Fine-tunes models for smooth image-to-video transitions
  5. Model Delivery: Receive two specialized LoRA models optimized for I2V generation

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'
{
  "data": "https://github.com/mdn/interactive-examples/archive/refs/heads/main.zip",
  "steps": 100,
  "learning_rate": 0.0002,
  "lora_rank": 32
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/wan-2.2-i2v-lora-trainer" \
  -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
datastringYes--To train a WAN I2V LoRA, you need to upload a zip file containing videos. In addition to videos the archive can contain text files with captions. Each text file should have the same name as the video file it corresponds to.
trigger_wordstringNo--Optional trigger word. If a caption file exists, it is prepended when not already present. If no caption file exists and trigger_word is non-empty, a caption containing only the trigger word is created. Leave empty to enable no-caption training.
stepsintegerNo10050 ~ 1500Number of steps to train the LoRA on.
learning_ratenumberNo0.00020 ~ 1-
lora_rankintegerNo321 ~ 128-

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.