Wan 2.6 Image to Video
curl --request POST \
--url https://api.novita.ai/v3/async/wan2.6-i2v \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"input": {
"prompt": "<string>",
"img_url": "<string>",
"template": "<string>",
"audio_url": "<string>",
"negative_prompt": "<string>"
},
"parameters": {
"seed": 123,
"audio": true,
"duration": 123,
"shot_type": "<string>",
"watermark": true,
"resolution": "<string>",
"prompt_extend": true
}
}
'import requests
url = "https://api.novita.ai/v3/async/wan2.6-i2v"
payload = {
"input": {
"prompt": "<string>",
"img_url": "<string>",
"template": "<string>",
"audio_url": "<string>",
"negative_prompt": "<string>"
},
"parameters": {
"seed": 123,
"audio": True,
"duration": 123,
"shot_type": "<string>",
"watermark": True,
"resolution": "<string>",
"prompt_extend": True
}
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
input: {
prompt: '<string>',
img_url: '<string>',
template: '<string>',
audio_url: '<string>',
negative_prompt: '<string>'
},
parameters: {
seed: 123,
audio: true,
duration: 123,
shot_type: '<string>',
watermark: true,
resolution: '<string>',
prompt_extend: true
}
})
};
fetch('https://api.novita.ai/v3/async/wan2.6-i2v', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.novita.ai/v3/async/wan2.6-i2v",
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' => '<string>',
'img_url' => '<string>',
'template' => '<string>',
'audio_url' => '<string>',
'negative_prompt' => '<string>'
],
'parameters' => [
'seed' => 123,
'audio' => true,
'duration' => 123,
'shot_type' => '<string>',
'watermark' => true,
'resolution' => '<string>',
'prompt_extend' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <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/wan2.6-i2v"
payload := strings.NewReader("{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novita.ai/v3/async/wan2.6-i2v")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novita.ai/v3/async/wan2.6-i2v")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>"
}Video Generator
Wan 2.6 Image to Video
POST
/
v3
/
async
/
wan2.6-i2v
Wan 2.6 Image to Video
curl --request POST \
--url https://api.novita.ai/v3/async/wan2.6-i2v \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>' \
--data '
{
"input": {
"prompt": "<string>",
"img_url": "<string>",
"template": "<string>",
"audio_url": "<string>",
"negative_prompt": "<string>"
},
"parameters": {
"seed": 123,
"audio": true,
"duration": 123,
"shot_type": "<string>",
"watermark": true,
"resolution": "<string>",
"prompt_extend": true
}
}
'import requests
url = "https://api.novita.ai/v3/async/wan2.6-i2v"
payload = {
"input": {
"prompt": "<string>",
"img_url": "<string>",
"template": "<string>",
"audio_url": "<string>",
"negative_prompt": "<string>"
},
"parameters": {
"seed": 123,
"audio": True,
"duration": 123,
"shot_type": "<string>",
"watermark": True,
"resolution": "<string>",
"prompt_extend": True
}
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "<authorization>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: '<authorization>'},
body: JSON.stringify({
input: {
prompt: '<string>',
img_url: '<string>',
template: '<string>',
audio_url: '<string>',
negative_prompt: '<string>'
},
parameters: {
seed: 123,
audio: true,
duration: 123,
shot_type: '<string>',
watermark: true,
resolution: '<string>',
prompt_extend: true
}
})
};
fetch('https://api.novita.ai/v3/async/wan2.6-i2v', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.novita.ai/v3/async/wan2.6-i2v",
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' => '<string>',
'img_url' => '<string>',
'template' => '<string>',
'audio_url' => '<string>',
'negative_prompt' => '<string>'
],
'parameters' => [
'seed' => 123,
'audio' => true,
'duration' => 123,
'shot_type' => '<string>',
'watermark' => true,
'resolution' => '<string>',
'prompt_extend' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <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/wan2.6-i2v"
payload := strings.NewReader("{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.novita.ai/v3/async/wan2.6-i2v")
.header("Content-Type", "<content-type>")
.header("Authorization", "<authorization>")
.body("{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.novita.ai/v3/async/wan2.6-i2v")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = '<authorization>'
request.body = "{\n \"input\": {\n \"prompt\": \"<string>\",\n \"img_url\": \"<string>\",\n \"template\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"negative_prompt\": \"<string>\"\n },\n \"parameters\": {\n \"seed\": 123,\n \"audio\": true,\n \"duration\": 123,\n \"shot_type\": \"<string>\",\n \"watermark\": true,\n \"resolution\": \"<string>\",\n \"prompt_extend\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>"
}AI-based image-to-video service. Generate high-quality video content from input images and text prompts, providing professional video generation capabilities: ready-to-use REST inference API, best performance, zero cold start, and affordable pricing.
This is an asynchronous API; only the task_id will be returned. You should use the task_id to request the Task Result API to retrieve the video generation results.
Request Headers
string
obrigatório
Supports:
application/jsonstring
obrigatório
Bearer authentication format, for example: Bearer {{API Key}}.
Request Body
object
obrigatório
Ocultar properties
Ocultar properties
string
Text prompt that describes the expected elements and visual characteristics in the generated video. Supports both Chinese and English. Each Chinese character/letter counts as one character. The excess part will be automatically truncated.Length limit: 0 - 2000
string
obrigatório
URL of the input image or Base64-encoded data. Supports HTTP or HTTPS protocol. For local files, you can upload to obtain a temporary URL. Image limitations: formats: JPEG, JPG, PNG (transparent channels not supported), BMP, WEBP; resolution: width and height range [360, 2000] (pixels); file size: no more than 10MB. Input image notes: 1. Use a public URL - HTTP or HTTPS supported; for local files, upload to obtain a temporary URL, e.g. https://cdn.translate.alibaba.com/r/wanx-demo-1.png. 2. Provide the Base64-encoded image string - format: data:;base64,; e.g. data:image/png;base64,GDU7MtCZEbTbmRZ… (string truncated for display). See documentation for more.
string
Name of video effect template. If not filled, no effects are used. Different templates support different special effects. Please query the template list before calling to avoid failure.
string
Audio file URL, which the model will use to generate the video. Supports HTTP or HTTPS protocol. Audio limitations: format wav/mp3; duration 3–30s; file size up to 15MB. If the audio is longer than duration (5s or 10s), only the first 5 or 10 seconds are used, the rest is discarded. If the audio is shorter than the video, the excess part of the video will be silent. For example, for a 3s audio and a 5s video, the first 3 seconds have sound, the last 2 seconds are silent.
string
Negative prompt: describes what content should NOT appear in the video. Supports both Chinese and English, up to 500 characters. Excess content is truncated.Length limit: 0 - 500
object
Ocultar properties
Ocultar properties
integer
Random seed. Range is [0, 2147483647]. If not specified, the system generates a random seed. To improve reproducibility, it is recommended to set a fixed seed. Note: since generation is probabilistic, even with the same seed, results may differ.Value range: [0, 2147483647]
boolean
padrão:true
Controls whether to add audio. Priority: audio_url > audio. Only works when audio_url is empty, see audio settings. true: (default) add audio automatically; false: no audio track in the video.
integer
padrão:5
Duration (in seconds) of the generated video. Duration affects cost; please check model pricing before use.Optional values:
5, 10, 15string
padrão:"multi"
Video generation mode. single: single shot; multi: multi-shot.Optional values:
single, multiboolean
padrão:false
Add watermark at lower-right corner of the video (text fixed as “AI Generated”). false: (default) no watermark; true: watermark added.
string
padrão:"1080P"
Target resolution for the generated video. Supports 720P and 1080P.Optional values:
720P, 1080Pboolean
padrão:true
Whether to enable intelligent prompt rewriting. If enabled, a large language model rewrites the prompt for improved results (especially effective for short prompts, at the cost of additional time). true: (default) enabled; false: not enabled.
Response
string
obrigatório
Use the task_id to request the Task Result API to retrieve the generated outputs.
Última modificação em 15 de maio de 2026
⌘I