Guía de inicio rápido de Imagen y Video
Guía de inicio rápido de Imagen y Video
Aprende a generar imágenes y vídeos a partir de prompts de texto y contenido multimedia de referencia.
La API de Imagen y Video es asíncrona. Envías una generación y, cuando termina, descargas el resultado desde una URL firmada. Las imágenes y los vídeos tienen rutas de API independientes, pero las estructuras de solicitud y respuesta son las mismas para ambos.
Hay dos formas de obtener el resultado. La entrega mediante webhook es la recomendada y la que usan los ejemplos siguientes: ElevenLabs llama a tu ruta de API en cuanto una generación alcanza un estado final, por lo que no se pierde tiempo esperando. El sondeo es la alternativa si no tienes una ruta de API para recibir una devolución de llamada, y cada ejemplo muestra cómo recurrir a él.
La API de Imagen y Video requiere un plan Pro o superior. Las llamadas desde un espacio de trabajo de un nivel inferior
se rechazan con un error 402 paid_plan_required. Tu clave de API también debe tener el permiso de Imagen y Video o
Flows para el espacio de trabajo.
Genera una imagen
Crea una clave de API
Crea una clave de API aquí, en el panel, que usarás para acceder a la API de forma segura.
Guarda la clave como un secreto gestionado y pásala a los SDK como variable de entorno mediante un archivo .env, o directamente en la configuración de tu aplicación, según prefieras.
Instala el SDK
SDK
CLI
También usaremos la biblioteca dotenv para cargar nuestra clave de API desde una variable de entorno.
Envía la generación
Cada modelo tiene su propia clase de solicitud, y sus campos son los parámetros que acepta ese modelo, por lo que al cambiar de modelo pueden cambiar los campos disponibles. Los campos desconocidos se rechazan en lugar de ignorarse.
webhook solicita que el resultado terminado se entregue a los webhooks de tu espacio de trabajo, por lo que la llamada
devuelve el control en cuanto la generación se pone en cola. Requiere un webhook suscrito a eventos de generación;
consulta webhooks de Imagen y Video para configurarlo u omite el
campo y usa el sondeo en su lugar.
SDK
CLI
La respuesta contiene el ID de la generación y nada más. Una generación recién creada siempre está
pending:
Obtén el resultado
Como la solicitud incluía webhook, ElevenLabs envía un evento flows_generation a tu
ruta de API cuando la generación alcanza completed o failed. Los data del evento son idénticos a
los que devuelve la ruta de API GET, y los webhooks de Imagen y Video explican
cómo implementar el controlador que lo recibe.
Si no tienes una ruta de API para recibir devoluciones de llamada, elimina webhook de la solicitud anterior y usa el sondeo.
Obtén la generación hasta que su estado sea completed o failed, dejando al menos dos segundos
entre solicitudes para una imagen; consulta las pautas de sondeo para conocer los intervalos
que debes usar para cada modalidad.
En ambos casos, una generación completada incluye los mismos campos:
Genera un vídeo
Las generaciones de vídeo usan flows.video y siguen el mismo patrón de envío y recogida. Un vídeo puede tardar
varios minutos, así que este ejemplo usa la entrega mediante webhook con webhook en lugar de esperar
el resultado.
La llamada devuelve el control en cuanto la generación se pone en cola, y el resultado terminado se entrega a todos los
webhooks de tu espacio de trabajo suscritos a eventos de generación. La salida de vídeo es MP4, por lo que la carga completada informa de un
content_mime_type de video/mp4. Consulta los
webhooks de Imagen y Video para configurar un
webhook e implementar el controlador que recibe este evento.
webhook requiere al menos un webhook del espacio de trabajo suscrito a eventos de generación. Sin uno,
la llamada de creación se rechaza en lugar de iniciar una generación cuyo resultado no tiene adónde ir. Elimina
el campo para usar el sondeo con flows.video.get y no sondees más de una vez cada 10
segundos.
Recopilar resultados
Los webhooks y el polling devuelven la misma carga útil, así que la elección depende de cómo esperas a recibirla, no de lo que recibes.
Usa webhooks siempre que puedas. Recurre al polling cuando no tengas dónde recibir una devolución de llamada y, cuando lo hagas, sigue los intervalos que indicamos a continuación.
Elegir destinos de webhook
webhook acepta dos formatos. WebhookTarget_All llega a todos los webhooks suscritos a eventos de generación,
que es la opción predeterminada adecuada porque sigue funcionando aunque los webhooks se roten o sustituyan.
WebhookTarget_Ids limita la entrega a webhooks específicos, para cuando un espacio de trabajo distribuye a varios
consumidores y un trabajo concreto solo debe llegar a uno de ellos:
Todos los ID ya deben estar suscritos a eventos de generación; indicar un webhook no suscrito se rechaza en lugar de ignorarse sin aviso. La carga útil entregada es idéntica a la que devuelve la ruta de API GET, así que un controlador creado para uno sirve para el otro. La guía sobre webhooks explica cómo configurar un webhook, verificar la firma y gestionar el evento.
Pautas para el polling
El tiempo de ejecución de una generación depende del modelo, la resolución y, en el caso del vídeo, la duración, así que haz polling a un intervalo adaptado a lo que has solicitado, en lugar de hacerlo en un bucle fijo:
- Imágenes: no hagas polling más de una vez cada 2 segundos. La mayoría terminan en unos segundos.
- Vídeo: no hagas polling más de una vez cada 10 segundos. Espera minutos, no segundos, y ajusta el
intervalo según
duration_secsyresolution.
Hay dos reglas para ambos casos. Aumenta el intervalo si una generación tarda mucho — duplicarlo hasta aproximadamente un minuto evita que una generación lenta se convierta en cientos de solicitudes. Y establece un límite para el bucle, para que una generación bloqueada termine como un tiempo de espera en tu propio código en lugar de como un bucle ilimitado.
Hacer polling más rápido no aporta nada: el estado de una generación no cambia antes porque lo hayas consultado dos veces. Un polling agresivo y continuado puede devolver respuestas 429, que debes gestionar con una espera exponencial.
Ciclo de vida de una generación
Una generación pasa por cuatro estados. Los dos estados finales contienen campos distintos, así que
depende de status antes de leer el resto de la respuesta.
content_url es una URL firmada que caduca aproximadamente una hora después de devolver la respuesta. Obtén
la generación de nuevo para conseguir una URL actualizada, en lugar de guardar la propia URL firmada.
Gestionar errores
Una generación fallida informa de una categoría failure_reason junto con un error_message legible para las personas:
Las generaciones fallidas no se cobran. Los problemas de parámetros que pueden detectarse de antemano — un campo no compatible, un valor fuera del rango permitido de un modelo o una combinación no válida de entradas de referencia — se rechazan en la solicitud de creación antes de que comience ninguna generación.
Precios
Las generaciones se cobran en créditos. El coste depende del modelo, de los parámetros que elijas, como la resolución y la duración, y de las entradas que proporciones. Una generación cuesta lo mismo mediante la API que en la app de ElevenLabs, donde se muestra el coste antes de enviarla. Consulta Imagen y Video en el playground para saber cómo se presenta el coste de una combinación concreta de modelo y ajustes.
Consulta tus generaciones
Cada ruta de API enumera las generaciones creadas a través de ella, empezando por las más recientes. Los resultados se limitan a tu espacio de trabajo y a esta API, por lo que las generaciones creadas en la app de ElevenLabs no aparecen.
page_size acepta valores de 1 a 100 y el valor predeterminado es 30. Pasa status para devolver solo las generaciones en un
estado del ciclo de vida y model_id para devolver solo las generaciones de un único modelo. Trata next_cursor como
un valor opaco: devuelve el valor exacto y detente cuando has_more sea false.
Modelos disponibles
La API expone un subconjunto de los modelos disponibles en la app de ElevenLabs. Cada modelo acepta solo los parámetros indicados para él; enviar un campo compatible con otro modelo devuelve un error de validación.
Los modelos de ByteDance están desactivados de forma predeterminada y requieren aprobación explícita antes de usarlos. Hasta que se
conceda el acceso, se rechazará una solicitud que indique uno de ellos con un error model_access_denied. Los clientes Enterprise
pueden contactar con soporte para solicitar acceso.
Modelos de imagen
Los modelos GPT Image 2.5 aceptan los valores low, medium, high, xhigh y max para quality, y el valor
predeterminado es high. GPT Image 2 llega hasta high y el valor predeterminado es medium.
Modelos de vídeo
Para consultar las capacidades, la disponibilidad y los precios de los modelos, consulta la visión general de Imagen y Video.