curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "wan2.6-reference-video",
"prompt": "A person dancing",
"video_urls": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4"
]
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "wan2.6-reference-video",
"prompt": "A person dancing",
"video_urls": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'wan2.6-reference-video',
prompt: 'A person dancing',
video_urls: ['https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4']
})
};
fetch('https://api.evolink.ai/v1/videos/generations', 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.evolink.ai/v1/videos/generations",
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([
'model' => 'wan2.6-reference-video',
'prompt' => 'A person dancing',
'video_urls' => [
'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "wan2.6-reference-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 120
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 5,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: wan2.6-reference-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Wan2.6 Video de referencia
- El modelo WAN2.6 (wan2.6-reference-video) admite la generación de video a video con referencia
- Cargue videos de referencia, el modelo extraerá la apariencia del personaje y la voz para generar nuevos videos
- Modo de procesamiento asíncrono, utilice el ID de tarea devuelto para consultar el estado
- Los enlaces de video generados son válidos durante 24 horas, guárdelos de inmediato
- Facturación: Facturación combinada basada en la duración del video de entrada + salida, solo se cobra después de una generación exitosa, sin cargos por fallos
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "wan2.6-reference-video",
"prompt": "A person dancing",
"video_urls": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4"
]
}
'import requests
url = "https://api.evolink.ai/v1/videos/generations"
payload = {
"model": "wan2.6-reference-video",
"prompt": "A person dancing",
"video_urls": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'wan2.6-reference-video',
prompt: 'A person dancing',
video_urls: ['https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4']
})
};
fetch('https://api.evolink.ai/v1/videos/generations', 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.evolink.ai/v1/videos/generations",
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([
'model' => 'wan2.6-reference-video',
'prompt' => 'A person dancing',
'video_urls' => [
'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.evolink.ai/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
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.evolink.ai/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/videos/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"wan2.6-reference-video\",\n \"prompt\": \"A person dancing\",\n \"video_urls\": [\n \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"created": 1757169743,
"id": "task-unified-1757169743-7cvnl5zw",
"model": "wan2.6-reference-video",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 120
},
"type": "video",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 5,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: wan2.6-reference-video",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Autorizaciones
Todas las APIs requieren autenticación Bearer Token
Obtener API Key:
Visita la Página de gestión de API Key para obtener tu API Key
Agregar al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo
wan2.6-reference-video "wan2.6-reference-video"
Prompt que describe el video que desea generar, limitado a 1500 caracteres
1500"A person dancing"
Array de URLs de archivos de video de referencia. Se utiliza para extraer la apariencia del personaje y la voz de los videos de referencia para generar nuevos videos.
Requisitos de URL:
- Admite protocolo HTTP o HTTPS
- Los archivos locales pueden obtener URLs temporales a través de Carga de Archivos
Límites del Array:
- Máximo 3 videos
Requisitos de Video:
- Formato: mp4, mov
- Duración: 2~30 segundos
- Tamaño de archivo: Un solo video no más de 100MB
Reglas de Facturación de Video de Entrada:
- Cada video de referencia se trunca y se suma, la duración total de facturación de entrada tiene un límite de
5segundos - 1 video:
min(video duration, 5s) - 2 videos:
min(video1 duration, 2.5s) + min(video2 duration, 2.5s) - 3 videos:
min(video1 duration, 1.65s) + min(video2 duration, 1.65s) + min(video3 duration, 1.65s) - La calidad
1080ptiene un precio más alto
3[ "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/xxx.mp4" ]
Relación de aspecto del video, por defecto 16:9
Opciones:
720p: Admite16:9(horizontal),9:16(vertical),1:1(cuadrado),4:3,3:41080p: Admite16:9(horizontal),9:16(vertical),1:1(cuadrado),4:3,3:4
"16:9"
Calidad de video, por defecto 720p
Opciones:
720p: Definición estándar, precio estándar, este es el valor por defecto1080p: Alta definición, precio más alto
Nota: Los diferentes niveles de calidad admiten diferentes relaciones de aspecto, consulte el parámetro aspect_ratio
"720p"
Especifica la duración del video generado (en segundos)
Nota:
- Admite cualquier valor entero entre
2~10segundos - Cada solicitud se cobrará previamente según el valor de
duration, el cargo real se basa en la duración del video generado
2 <= x <= 105
Configuración de parámetros del modelo
Show child attributes
Show child attributes
URL de callback HTTPS para la finalización de tareas
Momento del Callback:
- Se activa cuando la tarea se completa, falla o se cancela
- Se envía después de la confirmación de facturación
Restricciones de Seguridad:
- Solo se admite el protocolo HTTPS
- Los callbacks a direcciones IP internas están prohibidos (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La longitud de la URL no debe exceder
2048caracteres
Mecanismo de Callback:
- Tiempo de espera:
10segundos - Hasta
3reintentos después de un fallo (reintentos a1/2/4segundos después del fallo) - El formato de respuesta del callback es consistente con la respuesta de la API de consulta de tareas
- Los códigos de estado 2xx se consideran exitosos, otros códigos de estado activan reintentos
"https://your-domain.com/webhooks/video-task-completed"
Respuesta
Tarea de video creada exitosamente
Marca de tiempo de creación de la tarea
1757169743
ID de tarea
"task-unified-1757169743-7cvnl5zw"
Nombre del modelo real utilizado
"wan2.6-reference-video"
Tipo de tarea
video.generation.task Porcentaje de progreso de la tarea (0-100)
0 <= x <= 1000
Estado de la tarea
pending, processing, completed, failed "pending"
Detalles de la tarea de video
Show child attributes
Show child attributes
Tipo de salida de la tarea
text, image, audio, video "video"
Información de uso y facturación
Show child attributes
Show child attributes