Veo 3 y Sora sitúan la generación de texto a vídeo en el mismo listón de calidad donde estaba el texto a imagen hace dieciocho meses. El inconveniente: ambos proveedores restringen el acceso tras listas de espera, limitaciones por región y flujos de facturación a medida que no encajan con el resto de tu stack de IA.
Esta guía recorre cómo hacer tu primera llamada a la API de Veo 3 y Sora a través de Brievio — los modelos genuinos, sin lista de espera, con autenticación compatible con OpenAI, facturados por segundo de vídeo generado y con resultados servidos desde una URL permanente. Tiempo total: unos cinco minutos.
Configuración
- Regístrate en brievio.com/app/signup. Recibes 2 $ de crédito al registrarte — suficiente para un par de clips de prueba de 5 segundos.
- Crea una clave en /app/keys. Empieza por
sk-brievio-. - Expórtala:
export BRIEVIO_API_KEY=sk-brievio-....
Texto a vídeo con Veo 3
Veo 3 es actualmente el mejor modelo de texto a vídeo del mercado para planos cinematográficos — entiende el lenguaje de cámara (travelling, push-in, rack focus), produce una iluminación estable entre cortes y maneja correctamente el movimiento a 24fps. Las generaciones tardan de 30 segundos a unos minutos; la respuesta HTTP es síncrona — configura un timeout de cliente amplio.
import requests, os, time
KEY = os.environ["BRIEVIO_API_KEY"]
resp = requests.post(
"https://api.brievio.com/v1/video/generations",
headers={"Authorization": f"Bearer {KEY}"},
json={
"model": "veo-3",
"prompt": "A drone shot pulling back from a quiet mountain lake at dawn, mist rising off the water. Cinematic, 24fps, soft golden light.",
"duration": 8,
"aspect_ratio": "16:9",
"resolution": "1080p",
},
timeout=600, # las generaciones tardan de 30 s a varios minutos
)
resp.raise_for_status()
data = resp.json()
print(data["data"][0]["url"])La respuesta sigue el estilo de OpenAI: { data: [{ url: '...' }] }. La URL es permanente, servida desde files.brievio.com — descárgala una vez a tu propio almacenamiento si necesitas alojamiento a largo plazo. El clip es la salida genuina de Veo 3, no una copia recodificada ni con marca de agua.
Imagen a vídeo
Fijar el resultado con una imagen suele ser donde consigues una calidad de producción. Veo 3 admite dos modos de imagen:
image_mode: "frame"— una sola imagen es el primer fotograma; dos imágenes son el primero + el último fotograma. Es el valor por defecto paraimage_url.image_mode: "reference"— hasta 3 referencias de estilo para mantener la coherencia de personaje / vestuario sin forzar fotogramas.
# imagen a vídeo: pasa una image_url para fijar el primer fotograma.
resp = requests.post(
"https://api.brievio.com/v1/video/generations",
headers={"Authorization": f"Bearer {KEY}"},
json={
"model": "veo-3",
"prompt": "She smiles, then walks out of frame to the left",
"image_url": "https://files.brievio.com/<your-upload>.jpg",
"image_mode": "frame", # una imagen => primer fotograma
"duration": 6,
"aspect_ratio": "9:16", # vertical, nativo para móvil
},
timeout=600,
)
print(resp.json()["data"][0]["url"])Si todavía no tienes una URL pública para tu imagen de anclaje, envía los bytes a /v1/files y Brievio aloja el archivo por ti en files.brievio.com:
# Si no tienes una URL pública, sube los bytes; Brievio aloja el archivo.
with open("anchor.jpg", "rb") as f:
up = requests.post(
"https://api.brievio.com/v1/files",
headers={"Authorization": f"Bearer {KEY}"},
files={"file": f},
)
image_url = up.json()["url"] # URL permanente en files.brievio.comSora y otros modelos
La misma forma de endpoint funciona para todos los modelos de vídeo del catálogo — pasa el slug del modelo correspondiente:
veo-3— cinematográfico, 1080p, admite imagen a vídeo.sora-2— Sora de OpenAI.seedance-1-5-pro,seedance-2-0-pro— ByteDance, muy potentes en el movimiento de personajes.
Consulta /models para ver la lista en vivo y el precio por segundo de cada uno.
Desde Node / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.BRIEVIO_API_KEY,
baseURL: "https://api.brievio.com/v1",
});
// /v1/video/generations no está en la forma del SDK de OpenAI, pero el mismo
// header de autenticación funciona — llámalo con fetch:
const resp = await fetch(
"https://api.brievio.com/v1/video/generations",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.BRIEVIO_API_KEY}`,
},
body: JSON.stringify({
model: "sora-2",
prompt: "A red origami crane unfolding into a paper plane and flying away through a window",
duration: 5,
resolution: "1080p",
}),
},
);
const { data } = await resp.json();
console.log(data[0].url);Modelo de precios
Los modelos de vídeo facturan por segundo de salida, no por token. Brievio publica la tarifa por segundo en /pricing para cada modelo de vídeo — con un precio justo por debajo de la lista oficial. Un clip habitual de Veo 3 a 1080p de 8 segundos cuesta unos pocos céntimos. Las generaciones fallidas (4xx / 5xx) nunca se facturan.
Lista de comprobación para producción
- Configura un timeout HTTP de 10 minutos. El gateway sondea el upstream hasta 540 s y devuelve un 504 si el modelo sigue trabajando pasado ese tiempo. Para trabajos muy largos, reintenta — las generaciones son idempotentes por prompt.
- Guarda la URL del resultado. Aunque las URL de files.brievio.com son permanentes, tu producto debería tener su propia copia en el almacenamiento que tú controlas.
- Gestiona los 429 con backoff. Los modelos de vídeo dependen de la GPU; una breve contención es normal. El header retry-after se respeta cuando está presente.
- Cachea por hash del prompt si tiene sentido. El mismo prompt + seed + modelo devuelve un vídeo casi idéntico — pagar dos veces por él es un desperdicio.
Dudas: contact@brievio.com. El equipo detrás del gateway lee todos los correos y responde en menos de 24 horas.