Saltar al contenido

Generación de video

El video se genera de forma asíncrona: creas un job, consultas su estado hasta que termine y luego descargas el resultado. Generar un clip toma desde decenas de segundos hasta varios minutos. Entre los modelos de video están veo-3.1-generate-preview, veo-3.1-fast-generate-preview, seedance-2-0, kling-v3-0, grok-imagine-video-1-5 y wan-2-6-t2v; consulta la página de modelos para ver las duraciones, tamaños y precio de cada uno.

1. Crea un job

curl https://api.inferray.com/v1/videos \
  -H "Authorization: Bearer $INFERRAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-fast-generate-preview",
    "prompt": "A paper boat drifting across a quiet pond at sunrise",
    "seconds": 8,
    "size": "1280x720"
  }'
{
  "id": "video_7f3a...",
  "object": "video",
  "model": "veo-3.1-fast-generate-preview",
  "status": "queued",
  "progress": 0,
  "created_at": 1767225600,
  "completed_at": null,
  "error": null
}
CampoQué hace
modelObligatorio. Un modelo de video.
promptObligatorio. Lo que debe mostrar el video.
secondsDuración. Cada modelo ofrece un conjunto fijo, por ejemplo 4, 6, 8 o 10.
sizeTamaño de salida como widthxheight, entre los tamaños que ofrece el modelo.
audiofalse para un clip sin audio, en los modelos que admiten ambas opciones. Los clips sin audio suelen ser más baratos.
imageUn primer fotograma para animar, en los modelos que admiten image-to-video.

2. Consulta el estado

curl https://api.inferray.com/v1/videos/$VIDEO_ID \
  -H "Authorization: Bearer $INFERRAY_API_KEY"

status pasa de queued a in_progress y termina como completed o failed (o expired). Consulta cada 10–20 segundos con backoff en lugar de hacerlo en un bucle continuo; las consultas son gratuitas.

3. Descarga el video

Una vez que el job esté en completed:

curl https://api.inferray.com/v1/videos/$VIDEO_ID/content \
  -H "Authorization: Bearer $INFERRAY_API_KEY" \
  --output video.mp4

Descárgalo pronto y guárdalo tú mismo; los videos terminados no se conservan indefinidamente. Volver a leer el estado o el contenido no genera un nuevo cobro.

En código

const headers = { Authorization: `Bearer ${process.env.INFERRAY_API_KEY}`, "Content-Type": "application/json" };
const base = "https://api.inferray.com/v1/videos";

let job = await (await fetch(base, {
  method: "POST",
  headers,
  body: JSON.stringify({ model: "veo-3.1-fast-generate-preview", prompt: "A paper boat drifting across a pond", seconds: 8 }),
})).json();

while (job.status === "queued" || job.status === "in_progress") {
  await new Promise((resolve) => setTimeout(resolve, 15_000));
  job = await (await fetch(`${base}/${job.id}`, { headers })).json();
}

if (job.status !== "completed") throw new Error(job.error?.message ?? job.status);
const video = await fetch(`${base}/${job.id}/content`, { headers });

Propiedad y precios

Un ID de job pertenece al proyecto cuya key lo creó; las keys de otros proyectos reciben un 404. El video se cobra por segundo de salida, según la resolución y si tiene audio, y el precio se muestra en la página de cada modelo. Antes de que un job comience, tu saldo debe cubrir su precio estimado; un job que falla no se cobra.

Usa una Idempotency-Key al crear jobs, para que una solicitud reintentada devuelva el job que ya iniciaste en lugar de pagar por un segundo.