Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:Referencia de API de imagen a video de primer y último fotograma de Wan (2.2)

Última actualización: Oct 12, 2026

El modelo Wan 2.2 genera un video con transición suave a partir de un primer fotograma, un último fotograma y un prompt de texto.

Documentos relacionados: Guía del usuario

Notas de uso

Para garantizar llamadas exitosas a la API, su modelo, URL de endpoint y clave de API deben estar en la misma región. Las llamadas entre regiones fallarán.

NotaLos ejemplos de código en este tema aplican a Singapur.

ImportanteAlibaba Cloud Model Studio ha lanzado dominios específicos de espacio de trabajo para las regiones de China (Beijing) y Singapur. Los nuevos dominios dedicados ofrecen un rendimiento superior y una mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar a los nuevos dominios:

  • China (Pekín): de https://dashscope.aliyuncs.com a https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapur: de https://dashscope-intl.aliyuncs.com a https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} es su ID de espacio de trabajo, que se encuentra en la página Workspace Details de la consola de Alibaba Cloud Model Studio. El dominio existente permanece totalmente funcional.

Llamada HTTP

Debido a que las tareas de imagen a video son operaciones de larga duración que típicamente toman de 1 a 5 minutos, la API utiliza una llamada asíncrona. El proceso implica dos pasos principales: crear una tarea y luego sondear el resultado.

Paso 1: Crear una tarea

Singapore

POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

China (Beijing)

POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Nota

  • Después de crear la tarea, utilice el task_id devuelto para consultar el resultado. El task_id es válido durante 24 horas. No cree tareas duplicadas. En su lugar, utilice el sondeo para recuperar el resultado.
  • Para obtener orientación para principiantes, consulte Llamar a APIs con Postman o cURL.

Parámetros de solicitud

Encabezados de solicitud

Content-Type string (Requerido)

El tipo de contenido de la solicitud. Debe ser application/json.

Authorization string (Requerido)

Autentica la solicitud con una clave API de Model Studio. Ejemplo: Bearer sk-xxxx.

X-DashScope-Async string (Requerido)

Habilita el procesamiento asíncrono. Las solicitudes HTTP solo admiten llamadas asíncronas. Debe ser enable.

ImportanteSi falta este encabezado de solicitud, se devuelve el error "current user api does not support synchronous calls".

Cuerpo de la solicitud

model string (Obligatorio)

El nombre del modelo. Ejemplo: wan2.2-kf2v-flash.

Para obtener más detalles, consulte la consola de Model Studio.

input object (Obligatorio)

Contiene la entrada principal para la tarea, como el prompt.

Propiedades

prompt string (Opcional)

El prompt de texto. Admite tanto chino como inglés. La longitud máxima es de 800 caracteres. Tanto los caracteres chinos como las letras cuentan como un solo carácter. El texto que exceda este límite se truncará.

Si hay cambios significativos en el sujeto o la escena entre el primer y el último fotograma, recomendamos describir el proceso de transición, como el movimiento de la cámara (por ejemplo, "la cámara se mueve hacia la izquierda") o el movimiento del sujeto (por ejemplo, "una persona corre hacia adelante").

Ejemplo: "Un pequeño gato negro mira al cielo con curiosidad. La cámara se eleva gradualmente desde el nivel de los ojos y finalmente captura su mirada curiosa desde una vista cenital."

Para obtener consejos sobre cómo escribir prompts efectivos, consulte la Guía de prompts para texto a video e imagen a video.

negative_prompt string (Opcional)

Un prompt negativo que describe el contenido a excluir del video, lo cual ayuda a restringir la salida.

Admite tanto chino como inglés. La longitud máxima es de 500 caracteres. El texto que exceda este límite se truncará.

Ejemplo: "baja resolución, error, peor calidad, baja calidad, deformado, dedos extra, malas proporciones".

first_frame_url string (Obligatorio)

La URL de la imagen del primer fotograma. La relación de aspecto del video de salida coincidirá con la de la imagen del primer fotograma.

La URL debe ser una dirección accesible públicamente que admita el protocolo HTTP o HTTPS.

Requisitos de imagen:

  • Formato: JPEG, JPG, PNG (canal alfa no compatible), BMP, WEBP.
  • Resolución: El ancho y el alto deben estar entre 240 y 8,000 píxeles.
  • Tamaño de archivo: No más de 10 MB.

last_frame_url string (Obligatorio)

La URL de la imagen del último fotograma.

La URL debe ser una dirección accesible públicamente que admita el protocolo HTTP o HTTPS.

Requisitos de imagen:

  • Formato: JPEG, JPG, PNG (canal alfa no compatible), BMP, WEBP.
  • Resolución: El ancho y el alto deben estar entre 240 y 8,000 píxeles. La resolución del último fotograma puede ser diferente a la del primero, y sus resoluciones o relaciones de aspecto no necesitan coincidir.
  • Tamaño de archivo: No más de 10 MB.

parameters object (Opcional)

Parámetros de procesamiento de video.

Propiedades

resolution string (Opcional)

ImportanteEl parámetro de resolución afecta directamente al costo. Para el mismo modelo, la jerarquía de costos es 1080P > 720P > 480P. Confirm los precios en la consola de Model Studio antes de realizar una llamada.

La resolución del video generado. Este parámetro ajusta la definición (píxeles totales) sin cambiar su relación de aspecto.

El valor predeterminado y los valores disponibles para este parámetro dependen del parámetro del modelo, como se describe a continuación:

  • wan2.2-kf2v-flash: Los valores posibles son 480P, 720P y 1080P. El valor predeterminado es 720P.
  • wan2.1-kf2v-plus: El único valor posible es 720P. El valor predeterminado es 720P.

Ejemplo: 720P

duration integer (Opcional)

ImportanteEl parámetro de duración afecta directamente al costo, que se factura por segundo. Confirm los precios en la consola de Model Studio antes de realizar una llamada.

Este valor está fijado en 5.

prompt_extendbool (Opcional)

Especifica si se debe habilitar la reescritura de prompts. Cuando está habilitado, un modelo de lenguaje grande (LLM) reescribe inteligentemente el prompt de entrada. Esto puede mejorar significativamente los resultados para prompts cortos, pero aumenta la latencia.

  • true: Valor predeterminado. Habilita la reescritura de prompts.
  • false: Deshabilita la reescritura de prompts.

Ejemplo: true

watermark bool (Opcional)

Especifica si se debe agregar una marca de agua con el texto "AI-generated" en la esquina inferior derecha del video.

  • false: Valor predeterminado. No agrega una marca de agua.
  • true: Agrega una marca de agua.

Ejemplo: false

seed integer (Opcional)

La semilla de número aleatorio debe ser un entero en el rango [0, 2147483647].

Si no se especifica, se genera una semilla aleatoria. Una semilla fija mejora la reproducibilidad.

Dado que la generación del modelo es probabilística, la misma semilla no garantiza resultados idénticos.

Primer y último fotograma

Genera un video basado en un primer fotograma, un último fotograma y un prompt.

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-kf2v-flash",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view."
    },
    "parameters": {
        "resolution": "480P",
        "prompt_extend": true
    }
}'

Prompt negativo

Utilice el parámetro negative_prompt para excluir ciertos elementos, como personas, del video generado.

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.1-kf2v-plus",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "negative_prompt": "people"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true
    }
}'

Parámetros de respuesta

output object

La información de salida de la tarea.

Propiedades

task_id string

El ID de la tarea. Válido para consultas durante 24 horas.

task_status string

El estado de la tarea.

Valores de enumeración

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: La tarea no existe o se desconoce su estado.

request_id string

Identificador único de solicitud para rastreo y solución de problemas.

code string

Código de error. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.

message string

Mensaje de error detallado. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.

Respuesta exitosa

Guarde el task_id para consultar el estado y el resultado de la tarea.

{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

Respuesta de error

Error en la creación de la tarea. Consulte Códigos de error.

{
    "code": "InvalidApiKey",
    "message": "Invalid API-key provided.",
    "request_id": "7438d53d-6eb8-4596-8835-xxxxxx"
}

Paso 2: Consultar el resultado

Singapore

GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

China (Beijing)

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Nota

  • Recomendación de sondeo: La generación de video tarda varios minutos. Utilice un mecanismo de sondeo con un intervalo razonable, como 15 segundos.
  • Transición de estado de la tarea: PENDING → RUNNING → SUCCEEDED o FAILED.
  • Enlace de resultado: Después de que una tarea tenga éxito, se devuelve una URL de video válida durante 24 horas. Descargue y guarde el video en un almacenamiento permanente, como OSS.
  • task_idvalidez: 24 horas. Después de este período, las consultas devuelven el estado de la tarea como UNKNOWN.

Parámetros de solicitud

Encabezados de solicitud

Authorization string (Requerido)

Autentica la solicitud con una clave API de Model Studio. Ejemplo: Bearer sk-xxxx.

Parámetros de ruta

task_id string (Obligatorio)

El ID de la tarea.

Consultar resultado de la tarea

Reemplace 86ecf553-d340-4e21-xxxxxxxxx con su task_id real.

Las claves de API son diferentes para cada región. Para más información, consulte Obtener una clave de API.

Si utiliza un modelo en la región de China (Pekín), reemplace base_url con https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx, donde {WorkspaceId} es su ID de espacio de trabajo real.

curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"

Parámetros de respuesta

outputobject

La información de salida de la tarea.

Propiedades

task_id string

El ID de la tarea. Válido para consultas durante 24 horas.

task_status string

El estado de la tarea.

Valores de enumeración

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN: La tarea no existe o se desconoce su estado.
Transiciones de estado durante el sondeo:
  • PENDING → RUNNING → SUCCEEDED o FAILED.
  • El estado inicial de la consulta suele ser PENDING o RUNNING.
  • Cuando el estado cambia a SUCCEEDED, la respuesta contiene la URL del video generado.
  • Si el estado es FAILED, revise el mensaje de error y reintente la tarea.

submit_time string

La hora en que se envió la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

La hora en que se ejecutó la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.

end_time string

La hora en que se completó la tarea. La hora está en UTC+8 y el formato es YYYY-MM-DD HH:mm:ss.SSS.

video_url string

URL del video generado. Se devuelve solo cuando task_status es SUCCEEDED.

Válido durante 24 horas. El video está en formato MP4 con codificación H.264.

orig_prompt string

El prompt de entrada original, correspondiente al parámetro de solicitud prompt.

actual_prompt string

El prompt optimizado utilizado cuando la reescritura de prompts está habilitada. No se devuelve cuando está deshabilitada.

code string

Código de error. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.

message string

Mensaje de error detallado. Se devuelve solo para solicitudes fallidas. Consulte Códigos de error.

usage object

Estadísticas de uso de la tarea. Solo se facturan las tareas exitosas.

Propiedades

video_duration integer

La duración del video generado en segundos, que siempre es 5. Fórmula de facturación: Costo = Segundos de video × Precio unitario.

video_count integer

El número de videos generados. Este valor es fijo en 1.

video_ratio string

Este valor actualmente solo es devuelto por el modelo 2.1. La relación de aspecto del video generado, que es fija en standard.

SR integer

Este valor actualmente solo es devuelto por el modelo 2.2. El nivel de resolución del video generado. Los valores posibles son 480, 720 y 1080.

request_id string

Identificador único de solicitud para rastreo y solución de problemas.

Tarea exitosa

Las URL de video son válidas solo durante 24 horas y luego se eliminan automáticamente. Guarde los videos generados de inmediato.

{
    "request_id": "ec016349-6b14-9ad6-8009-xxxxxx",
    "output": {
        "task_id": "3f21a745-9f4b-4588-b643-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-04-18 10:36:58.394",
        "scheduled_time": "2025-04-18 10:37:13.802",
        "end_time": "2025-04-18 10:45:23.004",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?xxxxx",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its fur is smooth, and its whiskers are clearly visible. The background is a simple light-colored wall, highlighting the cat's black silhouette. A close-up shot emphasizes the changes in the cat's expression and the details of its eyes."
    },
    "usage": {
        "video_duration": 5,
        "video_count": 1,
        "SR": 480
    }
}

Tarea fallida

Cuando una tarea falla, task_status es FAILED con un código de error y un mensaje. Consulte Códigos de error.

{
    "request_id": "e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-a0c6a421c010",
        "task_status": "FAILED",
        "code": "InvalidParameter",
        "message": "The size is not match xxxxxx"
    }
}

Consulta de tarea caducada

El task_id es válido durante 24 horas. Después de este período, las consultas devuelven el siguiente error.

{
    "request_id": "a4de7c32-7057-9f82-8581-xxxxxx",
    "output": {
        "task_id": "502a00b1-19d9-4839-a82f-xxxxxx",
        "task_status": "UNKNOWN"
    }
}

Llamadas del SDK de DashScope

Los nombres de los parámetros del SDK son en gran medida consistentes con la API HTTP, y la estructura de los parámetros sigue las convenciones de cada lenguaje de programación.

Dado que las tareas de imagen a video son de larga duración (típicamente 1–5 minutos), el SDK maneja las llamadas HTTP asíncronas internamente, admitiendo tanto métodos de llamada síncronos como asíncronos.

El tiempo real de procesamiento depende del número de tareas en la cola y del rendimiento del servicio. Por favor, tenga paciencia.

Llamadas del SDK de Python

ImportanteAntes de ejecutar el siguiente código, asegúrese de que su versión del SDK de Python de DashScope sea al menos1.23.8.

Las versiones anteriores pueden provocar errores como "url error, please check url!". Consulte Instalar SDK para actualizar.

Configure base_http_api_url según la región del modelo:

Singapore

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Beijing

dashscope.base_http_api_url = 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1'

Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

Código de ejemplo

Llamada síncrona

Este ejemplo demuestra una llamada síncrona con dos métodos de entrada de imagen: una URL pública y una ruta de archivo local.

Ejemplo de solicitud
import os
from http import HTTPStatus
# DashScope SDK >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Get the DashScope API key (which is your Model Studio API key) from an environment variable.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Image input method (choose one) ==========
# [Method 1] Use a public image URL
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Method 2] Use a local file path (file:// + file path)
# Use an absolute path:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Or use a relative path:
# first_frame_url = "file://" + "./first_frame.png"              # Use your actual path.
# last_frame_url = "file://" + "./last_frame.png"                # Use your actual path.

def sample_sync_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.call(api_key=api_key,
                              model="wan2.2-kf2v-flash",
                              prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                              first_frame_url=first_frame_url,
                              last_frame_url=last_frame_url,
                              resolution="720P",
                              prompt_extend=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_sync_call_kf2v()
Ejemplo de respuesta

La video_url es válida durante 24 horas. Por favor, descargue el video dentro de este periodo.

{
    "status_code": 200,
    "request_id": "a37fafc3-907c-96f3-95a6-5b2a8268a3fd",
    "code": null,
    "message": "",
    "output": {
        "task_id": "4dba0092-da13-42b2-afb1-0f7b8a0f4643",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-05-23 15:50:12.404",
        "scheduled_time": "2025-05-23 15:50:12.443",
        "end_time": "2025-05-23 15:54:56.502",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its ears are pricked, and its whiskers are clearly visible. The background is a simple, light-colored wall that highlights the cat's black fur and focused expression. A close-up shot emphasizes the change in the cat's gaze and posture."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Llamada asíncrona

Este ejemplo demuestra una llamada asíncrona, que devuelve inmediatamente un ID de tarea. Luego debe sondear el estado de la tarea o esperar a que la tarea se complete.

Ejemplo de solicitud
import os
from http import HTTPStatus
# DashScope SDK >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Get the DashScope API key (which is your Model Studio API key) from an environment variable.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Image input method (choose one) ==========
# [Method 1] Use a public image URL
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Method 2] Use a local file path (file:// + file path)
# Use an absolute path:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Or use a relative path:
# first_frame_url = "file://" + "./first_frame.png"              # Use your actual path.
# last_frame_url = "file://" + "./last_frame.png"                # Use your actual path.

def sample_async_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model="wan2.2-kf2v-flash",
                                    prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                                    first_frame_url=first_frame_url,
                                    last_frame_url=last_frame_url,
                                    resolution="720P",
                                    prompt_extend=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("task_id: %s" % rsp.output.task_id)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

    # Get the task information, including the task status.
    status = VideoSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)  # check the task status
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # Wait for the task to complete. This method polls the fetch endpoint at intervals until the task is finished.
    rsp = VideoSynthesis.wait(task=rsp, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_async_call_kf2v()
Ejemplo de respuesta
  1. Respuesta tras la creación de la tarea
{
    "status_code": 200,
    "request_id": "c86ff7ba-8377-917a-90ed-xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "PENDING",
        "video_url": ""
    },
    "usage": null
}
  1. Ejemplo de respuesta para una tarea completada

La video_url es válida durante 24 horas. Por favor, descargue el video dentro de este periodo.

{
    "status_code": 200,
    "request_id": "efa545b3-f95c-9e3a-a3b6-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-02-12 11:03:30.701",
        "scheduled_time": "2025-02-12 11:06:05.378",
        "end_time": "2025-02-12 11:12:18.853",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's fur is jet-black and glossy, its eyes are large and bright with golden pupils. It looks up with its ears pricked, appearing exceptionally focused. After the camera moves up, the cat turns to face the camera, its eyes filled with curiosity and alertness. The background is simple, highlighting the cat's detailed features. A close-up shot with soft, natural light."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Llamadas del SDK de Java

ImportanteAntes de ejecutar el siguiente código, asegúrese de que su versión del SDK de Java de DashScope sea al menos2.20.9.

Las versiones anteriores pueden provocar errores como "url error, please check url!". Consulte Instalar SDK para actualizar.

Código de ejemplo

Llamada síncrona

Este ejemplo demuestra una llamada síncrona con dos métodos de entrada de imagen: URL pública y ruta de archivo local.

Ejemplo de solicitud
// Copyright (c) Alibaba, Inc. and its affiliates.

// DashScope SDK >= 2.20.1
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.HashMap;
import java.util.Map;

public class Kf2vSyncIntl {

    static {
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Get the DashScope API key (which is your Model Studio API key) from an environment variable.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Image input method (choose one):
     *
     * [Method 1] Public URL
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

     /**
     * [Method 2] Local file path (file://+absolute path or file:///+absolute path)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";  // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows

    public static void syncCall() {

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Making a synchronous call. This may take a moment.
            result = videoSynthesis.call(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        syncCall();
    }
}
Ejemplo de respuesta

La video_url es válida durante 24 horas. Por favor, descargue el video dentro de este periodo.

{
    "request_id": "e6bb4517-c073-9c10-b748-dedb8c11bb41",
    "output": {
        "task_id": "984784fe-83c1-4fc4-88c7-52c2c1fa92a2",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Llamada asíncrona

Este ejemplo demuestra una llamada asíncrona, que devuelve inmediatamente un ID de tarea. Luego debe sondear el estado de la tarea o esperar a que la tarea se complete.

Ejemplo de solicitud
// Copyright (c) Alibaba, Inc. and its affiliates.

// DashScope SDK >= 2.20.1
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.HashMap;
import java.util.Map;

public class Kf2vAsync {

    static {
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // Get the DashScope API key (which is your Model Studio API key) from an environment variable.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Image input method (choose one):
     *
     * [Method 1] Public URL
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

    /**
     * [Method 2] Local file path (file://+absolute path or file:///+absolute path)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";   // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows

    public static void asyncCall(){

        // Set parameters.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Making an asynchronous call.
            result = videoSynthesis.asyncCall(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));

        String taskId = result.getOutput().getTaskId();

        System.out.println("taskId=" + taskId);

        try {
            result = videoSynthesis.wait(taskId, apiKey);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
        System.out.println(JsonUtils.toJson(result.getOutput()));
    }

    public static void main(String[] args){
        asyncCall();
    }
}
Ejemplo de respuesta
  1. Respuesta tras la creación de la tarea
{
    "request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
    "output": {
        "task_id": "7277e20e-aa01-4709-xxxxxxxx",
        "task_status": "PENDING"
    }
}
  1. Ejemplo de respuesta para una tarea completada

La video_url es válida durante 24 horas. Por favor, descargue el video dentro de este periodo.

{
    "request_id": "1625235c-c13e-93ec-aff7-xxxxxxxx",
    "output": {
        "task_id": "464a5e46-79a6-46fd-9823-xxxxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Limitaciones

  • Retención de datos: La tarea task_id y el video video_url se conservan durante 24 horas, después de las cuales no se pueden consultar ni descargar.
  • Soporte de audio: El servicio genera únicamente videos silenciosos. Para generar audio, utilice síntesis de voz.
  • Moderación de Contenido: La Moderación de Contenido revisa todos los prompts de entrada, imágenes y videos de salida. Si algún contenido viola las políticas de uso, el servicio devuelve un error "IPInfringementSuspect" o "DataInspectionFailed". Para más detalles, consulte Códigos de error.

Códigos de error

Si falla una llamada al modelo, consulte Códigos de error para solucionar problemas.

FAQ

P: ¿Cómo generar una relación de aspecto específica?

R: La relación de aspecto del video de salida depende de la imagen del primer fotograma (first_frame_url). Sin embargo, no se puede garantizar una relación exacta (como una 3:4 estricta), y puede desviarse ligeramente.

  • ¿Por qué se desvía la relación de aspecto?

    El modelo utiliza la relación de aspecto de la imagen de entrada como base y calcula la resolución válida más cercana basada en los píxeles totales de la configuración de resolution seleccionada. Debido a que el ancho y el alto del video deben ser múltiplos de 16, el modelo realiza ajustes menores a la resolución final.

    • Por ejemplo, si proporciona una imagen de entrada de 750×1000 (una relación de aspecto de 3:4 o 0.75) y establece resolution en "720P" (apuntando a aproximadamente 920,000 píxeles), la salida real podría ser 816×1104 (una relación de aspecto de aproximadamente 0.739, con unos 900,000 píxeles).
  • Recomendaciones:
    • Imagen de entrada: Para obtener mejores resultados, utilice una imagen de primer fotograma que coincida con su relación de aspecto objetivo.
    • Posprocesamiento: Si se requiere una relación de aspecto estricta, utilice una herramienta de edición de video para recortar el video generado o agregar barras negras.

P: ¿Cómo obtengo la lista blanca de nombres de dominio para el almacenamiento de videos?

R: Los videos generados por los modelos se almacenan en OSS. La API devuelve una URL pública temporal. Para configurar una lista blanca de firewall para esta URL de descarga, tenga en cuenta lo siguiente: El almacenamiento subyacente puede cambiar dinámicamente. Este tema no proporciona una lista blanca fija de nombres de dominio de OSS para evitar problemas de acceso causados por información obsoleta. Si tiene requisitos de control de seguridad, póngase en contacto con su gerente de cuenta para obtener la lista más reciente de nombres de dominio de OSS.