Ir al contenido principal

El image-to-video de Wan 3.0 Pro Prime anima un cuadro de apertura a 1080p, 2K o 4K durante 2 a 30 segundos, con audio generado. Un último cuadro opcional fija el final, y 2K y 4K se amplían desde un render nativo 1080p.

Desde $0.234/s10 % por debajo del precio de lista de referencia

Playground

Enviar una solicitud

Inicio rápido

Los ejemplos usan las definiciones públicas de parámetros del endpoint seleccionado. Sustituye la clave de API y los medios de ejemplo, y envía la solicitud desde tu servidor.

SDK e integraciones
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticación de API

Guarda la clave de API en la variable de entorno del servidor SPICY_API_KEY. Usa autenticación Bearer y Content-Type: application/json en las solicitudes JSON.

Authorization: Bearer $SPICY_API_KEY
Resultado de ejemploUsar este ejemplo
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "alibaba/wan-3.0-pro-prime/image-to-video",
  "input": {
    "aspect_ratio": "adaptive",
    "duration_seconds": 5,
    "image_url": "https://example.com/reference.png",
    "resolution": "1080p"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generado a partir del esquema de entrada de este modelo: el mismo con el que la API valida cada solicitud.

Parámetros de entrada

Incluye estos campos en el objeto input del cuerpo de la solicitud. Los nombres y tipos coinciden con la API. No supongas un valor predeterminado si no está indicado.

image_urlstringObligatorio

El fotograma de apertura, que se usa tal cual como primer fotograma, y el verdadero techo de calidad del plano. De él se heredan el vestuario, el cuerpo, el decorado y la dirección de la luz, así que al prompt solo le queda cargar con el movimiento. JPEG, PNG sin transparencia, BMP o WEBP; de 240 a 8000 px por lado, relación de aspecto de hasta 8:1 y 20 MB como máximo.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
format:"uri"
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
seedintegerOpcional

De 0 a 2147483647. Déjala fija mientras ajustas resolución o duración; si no, cada repetición cambia dos cosas a la vez.

Valor predeterminado
Sin especificar
Restricciones
minimum:0
maximum:2147483647
enable_prompt_expansionbooleanOpcional

Activa por defecto en esta familia. Rellena briefs flojos y reescribe los detallados, así que desactívala en cuanto tu prompt sea una descripción de plano precisa.

Valor predeterminado
true
generate_audiobooleanOpcional

Activo por defecto. El sonido se genera con la imagen y llega dentro del mismo archivo. Ponlo en false cuando el anuncio lo musicalice un compositor.

Valor predeterminado
true
duration_secondsintegerOpcionalAfecta al precio

Cualquier número entero de 2 a 30, 5 por defecto, o -1 para la duración inteligente, en la que el modelo elige la longitud: se reservan de entrada los 30 segundos máximos y se cobra la duración realmente entregada. Encuentra el plano a 5 segundos y 1080p antes de gastarte en él un render de 30 segundos en 4K.

Valor predeterminado
5
Valores permitidos
-123456789101112131415161718192021222324252627282930
aspect_ratiostringOpcional

adaptive sigue al fotograma de apertura. Fija una proporción solo cuando el formato de entrega lo exija.

Valor predeterminado
"adaptive"
Valores permitidos
"16:9""4:3""1:1""3:4""9:16""adaptive"
resolutionstringOpcionalAfecta al precio

1080p, 2k o 4k, 1080p por defecto. Un render nativo de Wan 3.0 Prime llega como máximo a 1080p, así que los escalones por encima —2k y 4k— se entregan ampliando ese render en lugar de renderizarse de forma nativa a ese tamaño: los píxeles de más salen de la ampliación y nunca son mejores que el render que hay debajo. Aquí no hay escalón de 480p ni de 720p; para esos tamaños, usa Wan 3.0 o Wan 3.0 Prime.

Valor predeterminado
"1080p"
Valores permitidos
"1080p""2k""4k"
last_image_urlstringOpcional

Opcional, y solo junto con image_url. El clip termina exactamente en esta imagen —se usa como último fotograma, no como una orientación suelta—, así que ponla cuando el plano tenga que aterrizar en una composición fija, por ejemplo un producto de vuelta en su ángulo principal. Mismos límites de archivo que image_url.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
format:"uri"
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstringOpcional

Aquí es opcional. Úsalo para el movimiento y la cámara; repetir lo que ya se ve en el fotograma invita al modelo a redibujarlo.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:20000

Seguir la tarea

HTTP 202 significa que la tarea se aceptó, no que haya terminado. Guarda el taskId devuelto y consulta esa tarea. No crees otra mientras esperas el resultado.

Solicitud aceptada
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

La respuesta de aceptación incluye la estimación para que tu aplicación pueda mostrar el mismo importe en el historial de tareas y en la facturación.

Consultar la tarea
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Empieza consultando cada 2 segundos aproximadamente y ve espaciando los intentos. Párate en un estado final. Si se cae la conexión, consulta el taskId original. Vuelve a crear la tarea solo con la clave de idempotencia y el cuerpo originales.

O recibe el resultado por callback
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Pasa callBackUrl al crear la tarea y recibirás el registro terminado por POST, sin un bucle de consultas de estado. Cada entrega lleva X-Webhook-Timestamp, X-Webhook-Signature y X-Webhook-Payload-Version. La firma es un HMAC-SHA256 en base64 sobre taskId.timestamp.sha256(body), así que debes verificarla con los bytes originales: si analizas el JSON y vuelves a serializarlo, los bytes cambian y la verificación falla. Las entregas fallidas se reintentan, de modo que el mismo taskId puede llegar dos veces; haz que tu manejador sea idempotente. Responde 2xx primero y haz el trabajo después: un manejador lento se trata como una entrega fallida.

Leer el resultado

Procesa output solo cuando state sea succeeded. Si falla, consulta errorCode, errorMessage y request_id. Los costos y estados de ejemplo no representan una factura real.

Ejemplo de respuesta completada
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "alibaba/wan-3.0-pro-prime/image-to-video",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Para cada archivo disponible, abre o descarga assets[].url directamente, sin la cabecera Authorization de la API. El enlace firmado expira en expiresAt: vuelve a consultar la tarea para renovarlo mientras el archivo siga dentro del periodo de conservación. Un archivo pendiente o no disponible no trae URL. Trata los enlaces firmados como datos privados.

SDK e integraciones

Usa SpicyAPI en tu app, terminal, asistente de IA o flujo visual. Elige una guía de configuración.

Úsalo en ComfyUI

Instala los nodos de SpicyAPI desde ComfyUI Manager o con el comando de abajo y busca Wan 3.0 Pro Prime · Image To Video en el lienzo. El nodo tiene las mismas opciones que esta página y muestra su precio antes de ejecutarse.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi