Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:Wan 2.7 - API de imagen a video

Última actualización: Oct 12, 2026

El modelo de imagen a video Wan 2.7 admite entradas multimodales (texto, imágenes, audio y video) y realiza tres tareas: de primer fotograma a video, de primer y último fotograma a video, y continuación de video.

Referencias: Guía del usuario

NotaLa nueva API de imagen a video (modelo wan2.7) admite las tres tareas. La API anterior de imagen a video desde el primer fotograma (wan2.6 y anteriores) solo admite la conversión de primer fotograma a video.

Disponibilidad

El modelo, la URL del endpoint y la clave de API deben pertenecer a la misma región. Las llamadas entre regiones fallarán.

NotaEl código de ejemplo en este tema aplica a la región de 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.

HTTP

ImportanteEsta API utiliza el nuevo protocolo de imagen a video y solo admite el modelo wan2.7.

Las tareas de imagen a video suelen tardar de 1 a 5 minutos, por lo que la API utiliza invocación asíncrona. El flujo de trabajo consta de dos pasos: crear una tarea y luego sondear el resultado.

Paso 1: Crear una tarea y obtener el ID de tarea

Singapore

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

Beijing

POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/video-generation/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

Generación de video desde el primer fotograma

Genere un video basado en una imagen de primer fotograma y audio.


# 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/video-generation/video-synthesis' \
        -H 'X-DashScope-Async: enable' \
        -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
        -H 'Content-Type: application/json' \
        -d '{
        "model": "wan2.7-i2v-2026-04-25",
        "input": {
            "prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of the rap, with no other dialogue or noise.",
            "media": [
                {
                    "type": "first_frame",
                    "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"
                },
                {
                    "type": "driving_audio",
                    "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"

                }
            ]
        },
        "parameters": {
            "resolution": "720P",
            "duration": 10,
            "prompt_extend": true,
            "watermark": true
        }
    }'

Generación de video desde el primer y último fotograma

Proporcione un primer fotograma y un último fotograma para generar un video.


# 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/video-generation/video-synthesis' \
        -H 'X-DashScope-Async: enable' \
        -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
        -H 'Content-Type: application/json' \
        -d '{
        "model": "wan2.7-i2v-2026-04-25",
        "input": {
            "prompt": "Realistic style, a small black cat looks up at the sky curiously. The camera angle gradually rises from eye level, finally capturing its curious gaze from a top-down view.",
            "media": [
                {
                    "type": "first_frame",
                    "url": "https://wanx.alicdn.com/material/20250318/first_frame.png"
                },
                {
                    "type": "last_frame",
                    "url": "https://wanx.alicdn.com/material/20250318/last_frame.png"
                }
            ]
        },
        "parameters": {
            "resolution": "720P",
            "duration": 10,
            "prompt_extend": false,
            "watermark": true
        }
    }'

Continuación de video

Genere contenido posterior basado en un clip de video inicial.


# 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/video-generation/video-synthesis' \
        -H 'X-DashScope-Async: enable' \
        -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
        -H 'Content-Type: application/json' \
        -d '{
        "model": "wan2.7-i2v-2026-04-25",
        "input": {
            "prompt": "A girl takes a selfie in the mirror, then leaves with her backpack.",
            "media": [
                {
                    "type": "first_clip",
                    "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260129/hfugmr/wan-r2v-role1.mp4"
                }
            ]
        },
        "parameters": {
            "resolution": "720P",
            "duration": 10,
            "prompt_extend": true,
            "watermark": true
        }
    }'

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. Para obtener una lista de modelos y sus precios, consulte Precios de modelos.

Ejemplo: wan2.7-i2v-2026-04-25.

input object (Obligatorio)

Información básica de entrada, incluido el prompt.

Propiedades

prompt string (Opcional)

Prompt de texto que describe los elementos y las características visuales del video generado.

Se admiten chino e inglés. Hasta 5,000 caracteres.

Cada carácter chino o letra cuenta como un carácter. El texto que exceda el límite se trunca automáticamente.

Ejemplo: Un gatito corre sobre el césped.

Para obtener más información sobre cómo usar prompts, consulte la Guía de prompts de texto a video/imagen a video.

negative_prompt string (Opcional)

Describe el contenido que se debe excluir del video.

Se admiten chino e inglés. Máximo 500 caracteres. El texto que exceda el límite se trunca automáticamente.

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

media array (Obligatorio)

Materiales de referencia (imágenes, audio y video) para la generación de video.

Cada elemento es un objeto multimedia con campos type y url.

Combinaciones de recursos

Solo las siguientes combinaciones de recursos son válidas. Las combinaciones no válidas devuelven un error.

  • Generación de video desde el primer fotograma:

    • Primer fotograma: first_frame
    • Primer fotograma + audio: first_frame+driving_audio
  • Generación de video desde el primer y último fotograma:

    • Primer fotograma + último fotograma: first_frame+last_frame
    • Primer fotograma + último fotograma + audio: first_frame+last_frame+driving_audio
  • Continuación de video:

    • Continuación del primer clip de video: first_clip
    • Continuación del primer clip de video + último fotograma: first_clip+last_frame

Propiedades

type string (Obligatorio)

El tipo de recurso multimedia. Valores válidos:

  • first_frame
  • last_frame
  • driving_audio
  • first_clip

Límite: Cada type puede aparecer como máximo una vez en la matriz media. Por ejemplo, no puede pasar dos recursos first_frame.

url string (Obligatorio)

La URL del recurso multimedia (imagen, audio o video).

Pasar una imagen (type=first_frame o last_frame)

URL o datos codificados en Base64 para la imagen del primer o último fotograma.

Límites de imagen:

  • Formato: JPEG, JPG, PNG (canal alfa no compatible), BMP, WEBP.
  • Resolución: El ancho y el alto deben estar en el rango de [240, 8000] píxeles.
  • Relación de aspecto: de 1:8 a 8:1.
  • Tamaño de archivo: hasta 20 MB.

Formatos de entrada admitidos:

  1. URL pública:

  2. Una cadena de imagen codificada en Base64:

    • Formato de datos: data:{MIME_type};base64,{base64_data}.

    • Ejemplo: data:image/png;base64,GDU7MtCZzEbTbmRZ...... (El ejemplo está truncado con fines demostrativos).

      Formato de datos codificado en Base64

      Formato: data:{MIME_type};base64,{base64_data} .

      • {base64_data}: La cadena codificada en Base64 del archivo de imagen.
      • {MIME_type}: El tipo Multipurpose Internet Mail Extensions (MIME) de la imagen, que debe corresponder al formato del archivo.

Pasar audio (type=driving_audio)

URL del archivo de audio.

  • Con audio: El modelo lo utiliza como fuente de control para la sincronización labial y el tiempo de las acciones.
  • Sin audio: El modelo genera automáticamente música de fondo o efectos de sonido coincidentes.

Límites de audio:

  • Formato: wav, mp3.
  • Duración: de 2 s a 30 s.
  • Tamaño de archivo: hasta 15 MB.
  • Truncamiento: Si la duración del audio excede el valor de duration (por ejemplo, 5 s), el audio se trunca automáticamente a los primeros 5 segundos y el resto se descarta. Si la duración del audio es menor que la duración del video, la parte del video que exceda la duración del audio estará en silencio. Por ejemplo, si el audio tiene 3 s de duración y el video tiene 5 s, los primeros 3 segundos del video de salida tendrán sonido y los últimos 2 segundos estarán en silencio.

Formatos de entrada admitidos:

  1. URL pública:

Pasar un video (type=first_clip)

URL del archivo de video. El modelo genera una continuación basada en el contenido del video. El parámetro duration controla la duración total máxima de la salida.

Por ejemplo, si duration=15 y el video de entrada tiene 3 s de duración, el modelo genera una continuación de 12 s. El video de salida final tiene 15 s de duración y se factura por 15 s.

Límites de video:

  • Formato: mp4, mov.
  • Duración: de 2 s a 10 s.
  • Resolución: El ancho y el alto deben estar en el rango de [240, 4096] píxeles.
  • Relación de aspecto: de 1:8 a 8:1.
  • Tamaño de archivo: hasta 100 MB.

Formatos de entrada admitidos:

  1. URL pública:

parameters object (Opcional)

Parámetros de procesamiento de video: resolución, duración, reescritura de prompts y marcas de agua.

Propiedades

resolution string (Opcional)

ImportanteLa resolución afecta directamente el costo. Antes de realizar la llamada, consulte los Precios de modelos.

Nivel de resolución para el video generado. Controla el recuento total de píxeles.

El modelo escala automáticamente el video a un recuento total de píxeles cercano al nivel seleccionado. La relación de aspecto de salida sigue al material de entrada (primer fotograma o primer clip de video). Para más detalles, consulte las preguntas frecuentes.

Los valores válidos son 720P y 1080P. Valor predeterminado: 1080P.

duration integer (Opcional)

ImportanteLa duración afecta directamente el costo. La facturación es por segundo. Antes de realizar la llamada, consulte los Precios de modelos.

Duración del video generado en segundos. El rango válido depende del modelo:

Valores válidos: un número entero de 2 a 15. Valor predeterminado: 5.

prompt_extendboolean (Opcional)

Indica si se debe habilitar la reescritura de prompts. Cuando está habilitada, un modelo reescribe el prompt de entrada para mejorar los resultados en prompts cortos, pero aumenta el tiempo de procesamiento.

  • true (predeterminado)
  • false

watermark boolean (Opcional)

Si se debe agregar una marca de agua "AI Generated" en la esquina inferior derecha del video.

  • false (predeterminado)
  • true

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.

Parámetros de respuesta

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"
}

output object

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.

Paso 2: Consultar el resultado por ID de tarea

Singapore

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

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

Consultar resultado de la tarea

Reemplace {task_id} con el valor task_id devuelto por la llamada a la API anterior. El task_id es válido para consultas durante 24 horas. Reemplace {WorkspaceId} con su ID de espacio de trabajo real.

curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Encabezados

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.

Parámetros de respuesta

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": "2ca1c497-f9e0-449d-9a3f-xxxxxx",
    "output": {
        "task_id": "af6efbc0-4bef-4194-8246-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-09-25 11:07:28.590",
        "scheduled_time": "2025-09-25 11:07:35.349",
        "end_time": "2025-09-25 11:17:11.650",
        "orig_prompt": "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxx"
    },
    "usage": {
        "duration": 15,
        "input_video_duration": 0,
        "output_video_duration": 15,
        "video_count": 1,
        "SR": 720
    }
}

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"
    }
}

outputobject

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.

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. Calculadas solo para tareas exitosas.

Propiedades

input_video_duration integer

Duración del video de entrada, en segundos.

output_video_duration integer

Duración del video de salida, en segundos.

duration integer

Duración total del video utilizada para la facturación.

SR integer

Resolución del video de salida. Ejemplo: 720.

video_count integer

Número de videos de salida. Fijo en 1.

request_id string

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

SDK de DashScope

Los nombres de los parámetros del SDK coinciden con los de la API HTTP. La estructura de parámetros se encapsula según las convenciones del lenguaje.

Las tareas de imagen a video suelen tardar de 1 a 5 minutos. El SDK encapsula el proceso de invocación asíncrona HTTP y admite llamadas tanto síncronas como asíncronas.

El tiempo real de procesamiento depende de la cola de tareas y la carga del servicio. Espere el resultado.

SDK de Python

ImportanteAsegúrese de que la versión del SDK de Python de DashScope sea no inferior a 1.25.16 antes de ejecutar el siguiente código.

Si la versión es demasiado antigua, pueden producirse errores como "url error, please check url!". Para obtener más información, consulte Instalar el SDK para actualizarlo.

Configure dashscope.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'

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.

Llamada síncrona

Ejemplo de solicitud
# -*- coding: utf-8 -*-
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
import os

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If you have not configured the environment variable, replace the following line with: api_key="sk-xxx"
# API keys vary by region. For more information, see https://www.alibabacloud.com/help/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

media = [
    {
        "type": "first_frame",
        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"
    },
    {
        "type": "driving_audio",
        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"
    }
]

def sample_sync_call():
    print('----Synchronous call, please wait a moment----')
    rsp = VideoSynthesis.call(
        api_key=api_key,
        model="wan2.7-i2v-2026-04-25",
        media=media,
        resolution="720P",
        duration=10,
        watermark=True,
        prompt="An urban fantasy art scene featuring a dynamic graffiti character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night, lit by a single street lamp. This creates a cinematic atmosphere with high energy and amazing detail. The video's audio consists entirely of the rap, with no other dialogue or noise.",
    )
    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()
Ejemplo de respuesta

La video_url es válida durante 24 horas. Descargue el video a la brevedad.

{
    "status_code": 200,
    "request_id": "ac5faf37-ddfa-9720-a0c5-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "b97c6d86-ad73-4bb7-80ff-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
        "submit_time": "2026-04-13 10:45:47.597",
        "scheduled_time": "2026-04-13 10:45:56.342",
        "end_time": "2026-04-13 10:47:26.273",
        "orig_prompt": "An urban fantasy art scene. A dynamic graffiti character. A boy made of spray paint comes to life on a concrete wall. He performs a fast-paced English rap song while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere with high energy and incredible detail. The audio consists solely of the rap, with no other dialogue or background noise."
    },
    "usage": {
        "video_count": 1,
        "duration": 10,
        "input_video_duration": 0,
        "output_video_duration": 10,
        "SR": 720
    }
}

Llamada asíncrona

Ejemplo de solicitud
# -*- coding: utf-8 -*-
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
import os

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If the environment variable is not set, replace the following line with: api_key="sk-xxx"
# API keys vary by region. To obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

media = [
    {
        "type": "first_frame",
        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png"
    },
    {
        "type": "driving_audio",
        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3"
    }
]

def sample_async_call():
    # Submit an asynchronous task. Information about the task is returned immediately.
    rsp = VideoSynthesis.async_call(
        api_key=api_key,
        model="wan2.7-i2v-2026-04-25",
        media=media,
        resolution="720P",
        duration=10,
        watermark=True,
        prompt="A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of the rap, with no other dialogue or noise.",
    )
    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))

    # Query the task status.
    status = VideoSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.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.
    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()
Ejemplo de respuesta
  1. Ejemplo de respuesta para crear una tarea
{
    "status_code": 200,
    "request_id": "6dc3bf6c-be18-9268-9c27-xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "task_id": "686391d9-7ecf-4290-a8e9-xxxxxx",
        "task_status": "PENDING",
        "video_url": ""
    },
    "usage": null
}
  1. Ejemplo de respuesta para consultar el resultado de una tarea

    La video_url es válida durante 24 horas. Descargue el video a la brevedad.

{
    "status_code": 200,
    "request_id": "ac5faf37-ddfa-9720-a0c5-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "b97c6d86-ad73-4bb7-80ff-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
        "submit_time": "2026-04-13 10:45:47.597",
        "scheduled_time": "2026-04-13 10:45:56.342",
        "end_time": "2026-04-13 10:47:26.273",
        "orig_prompt": "An urban fantasy art scene. A dynamic graffiti character. A boy made of spray paint comes to life on a concrete wall. He performs a fast-paced English rap song while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere with high energy and incredible detail. The audio consists solely of the rap, with no other dialogue or background noise."
    },
    "usage": {
        "video_count": 1,
        "duration": 10,
        "input_video_duration": 0,
        "output_video_duration": 10,
        "SR": 720
    }
}

SDK de Java

ImportanteAsegúrese de que la versión del SDK de Java de DashScope sea no inferior a 2.22.14 antes de ejecutar el siguiente código.

Si la versión es demasiado antigua, pueden producirse errores como "url error, please check url!". Para obtener más información, consulte Instalar el SDK para actualizarlo.

Configure Constants.baseHttpApiUrl según la región del modelo:

Singapore

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

Beijing

Constants.baseHttpApiUrl = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"

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

Llamada síncrona

Una llamada síncrona se bloquea hasta que se completa la generación del video y se devuelve el resultado.

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

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.ArrayList;
import java.util.List;

public class Image2Video {

    static {
        // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If the environment variable is not configured, replace the following line with: apiKey="sk-xxx"
    // API keys are region-specific. To obtain an API key, visit: https://www.alibabacloud.com/help/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void syncCall() {
        VideoSynthesis videoSynthesis = new VideoSynthesis();
        final String prompt = "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.";
        List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>(){{
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png")
                    .type("first_frame")
                    .build());
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3")
                    .type("driving_audio")
                    .build());
        }};
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-i2v-2026-04-25")
                        .prompt(prompt)
                        .media(media)
                        .watermark(true)
                        .duration(10)
                        .resolution("720P")
                        .build();
        VideoSynthesisResult result = null;
        try {
            System.out.println("---Sync call, please wait...----");
            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. Descargue el video a la brevedad.

{
    "request_id": "78178b55-8399-9823-8173-xxxxxx",
    "output": {
        "task_id": "be457e1b-8a79-47ed-aeff-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
        "orig_prompt": "An urban fantasy art scene featuring a dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He rapidly sings an English rap song while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. A single street lamp provides the light, creating a high-energy cinematic atmosphere with incredible detail. The audio consists entirely of his rap, with no other dialogue or background noise.",
        "submit_time": "2026-04-13 10:57:36.795",
        "scheduled_time": "2026-04-13 10:57:46.280",
        "end_time": "2026-04-13 10:59:16.338"
    },
    "usage": {
        "video_count": 1,
        "duration": 10,
        "input_video_duration": 0,
        "output_video_duration": 10,
        "SR": 720
    },
    "status_code": 200,
    "code": "",
    "message": ""
}

Llamada asíncrona

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

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.ArrayList;
import java.util.List;

public class Image2Video {

    static {
        // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If the environment variable is not configured, replace the following line with: apiKey = "sk-xxx"
    // API keys are region-specific. To obtain an API key, see https://www.alibabacloud.com/help/model-studio/get-api-key
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    public static void asyncCall() {
        VideoSynthesis videoSynthesis = new VideoSynthesis();
        final String prompt = "A scene of urban fantasy art. A dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He sings an English rap song at high speed while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. The light comes from a single street lamp, creating a cinematic atmosphere full of high energy and amazing detail. The audio of the video consists entirely of his rap, with no other dialogue or noise.";
        List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>(){{
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/wpimhv/rap.png")
                    .type("first_frame")
                    .build());
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250925/ozwpvi/rap.mp3")
                    .type("driving_audio")
                    .build());
        }};
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-i2v-2026-04-25")
                        .prompt(prompt)
                        .media(media)
                        .watermark(true)
                        .duration(10)
                        .resolution("720P")
                        .build();
        VideoSynthesisResult result = null;
        try {
            System.out.println("--- Starting the asynchronous call. Please wait... ---");
            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. Ejemplo de respuesta para crear una tarea
{
    "request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
    "output": {
        "task_id": "7277e20e-aa01-4709-xxxxxxxx",
        "task_status": "PENDING"
    }
}
  1. Ejemplo de respuesta para consultar el resultado de una tarea

    La video_url es válida durante 24 horas. Descargue el video a la brevedad.

{
    "request_id": "78178b55-8399-9823-8173-xxxxxx",
    "output": {
        "task_id": "be457e1b-8a79-47ed-aeff-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
        "orig_prompt": "An urban fantasy art scene featuring a dynamic graffiti art character. A boy made of spray paint comes to life on a concrete wall. He rapidly sings an English rap song while striking a classic, energetic rapper pose. The scene is set under an urban railway bridge at night. A single street lamp provides the light, creating a high-energy cinematic atmosphere with incredible detail. The audio consists entirely of his rap, with no other dialogue or background noise.",
        "submit_time": "2026-04-13 10:57:36.795",
        "scheduled_time": "2026-04-13 10:57:46.280",
        "end_time": "2026-04-13 10:59:16.338"
    },
    "usage": {
        "video_count": 1,
        "duration": 10,
        "input_video_duration": 0,
        "output_video_duration": 10,
        "SR": 720
    },
    "status_code": 200,
    "code": "",
    "message": ""
}

Códigos de error

Si una llamada al modelo falla y devuelve un mensaje de error, consulte Códigos de error para resolver el problema.

FAQ

P: ¿Cómo genero un video con una relación de aspecto específica, como 3:4?

R: La relación de aspecto de salida está determinada por el material de entrada (imagen del primer fotograma o primer clip de video), pero no se garantiza que coincida exactamente. Puede producirse una ligera variación.

El siguiente ejemplo explica la lógica utilizando una imagen de primer fotograma como entrada:

  • ¿Por qué ocurre la desviación?
    • Lógica de ejecución: El sistema utiliza la relación de aspecto de la imagen de entrada como referencia, combinada con los píxeles totales objetivo para el nivel resolution. Dado que la codificación de video requiere que el ancho y el alto sean múltiplos de 16, el sistema ajusta la salida a la resolución válida más cercana.
    • Ejemplo de cálculo: Una imagen de entrada de 750 x 1000 píxeles (relación 3:4 = 0.75) con resolución "720P" (~920,000 píxeles totales) produce una salida de 816 x 1104 píxeles (relación ~0.739, ~900,000 píxeles totales).
  • Recomendaciones:

    • Control de entrada: Utilice un primer fotograma o clip de video que coincida con su relación de aspecto objetivo.
    • Posprocesamiento: Para requisitos estrictos de relación de aspecto, recorte el video o agregue barras negras después de la generación.

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

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.