# Novita AI Wan 2.5 Preview Image to Video API | Generate videos from images and text

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-wan-2.5-i2v-preview

# Wan 2.5 Preview Image to Video

POST

/

v3

/

async

/

wan-2.5-i2v-preview

Try it

Wan 2.5 Preview Image to Video

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/async/wan-2.5-i2v-preview \
--header 'Authorization: ' \
--header 'Content-Type: ' \
--data '
{
"input": {
"prompt": "",
"negative_prompt": "",
"img_url": "",
"audio_url": ""
},
"parameters": {
"resolution": "",
"duration": 123,
"prompt_extend": true,
"audio": true,
"seed": 123
}
}
'
```

```
import requests

url = "https://api.novita.ai/v3/async/wan-2.5-i2v-preview"

payload = {
"input": {
"prompt": "",
"negative_prompt": "",
"img_url": "",
"audio_url": ""
},
"parameters": {
"resolution": "",
"duration": 123,
"prompt_extend": True,
"audio": True,
"seed": 123
}
}
headers = {
"Content-Type": "",
"Authorization": ""
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

```
const options = {
method: 'POST',
headers: {'Content-Type': '', Authorization: ''},
body: JSON.stringify({
input: {
prompt: '',
negative_prompt: '',
img_url: '',
audio_url: ''
},
parameters: {
resolution: '',
duration: 123,
prompt_extend: true,
audio: true,
seed: 123
}
})
};

fetch('https://api.novita.ai/v3/async/wan-2.5-i2v-preview', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
```

```
"https://api.novita.ai/v3/async/wan-2.5-i2v-preview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
'prompt' => '',
'negative_prompt' => '',
'img_url' => '',
'audio_url' => ''
],
'parameters' => [
'resolution' => '',
'duration' => 123,
'prompt_extend' => true,
'audio' => true,
'seed' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: ",
"Content-Type: "
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
```

```
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.novita.ai/v3/async/wan-2.5-i2v-preview"

payload := strings.NewReader("{\n \"input\": {\n \"prompt\": \"\",\n \"negative_prompt\": \"\",\n \"img_url\": \"\",\n \"audio_url\": \"\"\n },\n \"parameters\": {\n \"resolution\": \"\",\n \"duration\": 123,\n \"prompt_extend\": true,\n \"audio\": true,\n \"seed\": 123\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Content-Type", "")
req.Header.Add("Authorization", "")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
```

```
HttpResponse response = Unirest.post("https://api.novita.ai/v3/async/wan-2.5-i2v-preview")
.header("Content-Type", "")
.header("Authorization", "")
.body("{\n \"input\": {\n \"prompt\": \"\",\n \"negative_prompt\": \"\",\n \"img_url\": \"\",\n \"audio_url\": \"\"\n },\n \"parameters\": {\n \"resolution\": \"\",\n \"duration\": 123,\n \"prompt_extend\": true,\n \"audio\": true,\n \"seed\": 123\n }\n}")
.asString();
```

```
require 'uri'
require 'net/http'

url = URI("https://api.novita.ai/v3/async/wan-2.5-i2v-preview")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = ''
request["Authorization"] = ''
request.body = "{\n \"input\": {\n \"prompt\": \"\",\n \"negative_prompt\": \"\",\n \"img_url\": \"\",\n \"audio_url\": \"\"\n },\n \"parameters\": {\n \"resolution\": \"\",\n \"duration\": 123,\n \"prompt_extend\": true,\n \"audio\": true,\n \"seed\": 123\n }\n}"

response = http.request(request)
puts response.read_body
```

200

```
{
"task_id": ""
}
```

Wan 2.5 Preview Image-to-Video model supports generating videos of 5 or 10 seconds based on the initial frame image and text. New audio capabilities: supports automatic dubbing, or you can provide a custom audio file.

This is an asynchronous API; only the task_id will be returned. You should use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the video generation results.

##

[​](#request-headers)

Request Headers

[​](#param-content-type)

Content-Type

string

required

Supports: `application/json`

[​](#param-authorization)

Authorization

string

required

Bearer authentication format, for example: Bearer {{API Key}}.

##

[​](#request-body)

Request Body

[​](#param-input)

input

object

required

Basic input information, such as prompts.

Hide properties

[​](#param-prompt)

prompt

string

required

Text prompt. Supports both English and Chinese, with a maximum length of 2000 characters, and any excess will be automatically truncated.Example value: A small cat running on the grass.

[​](#param-negative-prompt)

negative_prompt

string

Negative prompt, used to describe content that should be avoided in the video, allowing for restrictions on the video content.Supports both English and Chinese, with a maximum length of 500 characters. Any excess will be automatically truncated.Example value: Low resolution, errors, worst quality, low quality, incomplete, extra fingers, disproportionate, etc.

[​](#param-img-url)

img_url

string

required

The URL of the initial frame image used for video generation.The URL must be publicly accessible and support HTTP or HTTPS protocols.Image restrictions:

- Image formats: JPEG, JPG, PNG (no support for transparency), BMP, WEBP.

- Image resolution: The width and height of the image should be within the range of [360, 2000] pixels.

- File size: No more than 10MB.

[​](#param-audio-url)

audio_url

string

URL of the audio file that the model will use to generate the video. See audio settings for usage instructions.Audio restrictions:

- Format: wav, mp3.

- Duration: 3-30s.

- File size: No more than 15MB.

Overflow handling: If the audio length exceeds the duration value (5 seconds or 10 seconds), the first 5 seconds or 10 seconds will be automatically truncated, and the rest will be discarded. If the audio length is shorter than the video duration, the part beyond the audio length will be silent video. For example, if the audio is 3 seconds and the video duration is 5 seconds, the output video will have sound for the first 3 seconds and be silent for the last 2 seconds.

[​](#param-parameters)

parameters

object

Video processing parameters, such as specifying the output video resolution and duration.

Hide properties

[​](#param-resolution)

resolution

string

The resolution tier of the generated video.

Options: `480P`, `720P`, `1080P`. Default value: `1080P`.

[​](#param-duration)

duration

integer

Specifies the duration of the generated video. Supported values: `5` or `10` seconds.Default value: `5`.

[​](#param-prompt-extend)

prompt_extend

bool

Whether to enable intelligent prompt rewriting. When enabled, a large model is used to intelligently rewrite the input prompt. This significantly improves the generation effect for shorter prompts but increases processing time.

- `true`: Default value, enable intelligent rewriting.

- `false`: Do not enable intelligent rewriting.

Example value: true.

[​](#param-audio)

audio

boolean

Used to control whether to add audio.Parameter priority: audio_url > audio, only takes effect when audio_url is empty.

- `true`: Default value, automatically add audio to the video.

- `false`: Do not add audio, output silent video.

Example value: true.

[​](#param-seed)

seed

integer

Random seed, used to control the randomness of the model’s generated content. The value range is `[0, 2147483647]`.If not provided, the algorithm automatically generates a random number as the seed. To maintain relatively stable generated content, you can use the same seed parameter value.Example value: 12345.

##

[​](#response)

Response

[​](#param-task-id)

task_id

string

required

Use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the generated outputs.

Last modified on January 14, 2026
