Generación de video
Los agentes de OpenClaw pueden generar videos a partir de prompts de texto, imágenes de referencia o videos existentes. Se admiten catorce backends de proveedores, cada uno con distintas opciones de modelo, modos de entrada y conjuntos de funciones. El agente elige automáticamente el proveedor adecuado según tu configuración y las API keys disponibles.
La herramienta video_generate solo aparece cuando hay disponible al menos un proveedor de generación de video. Si no la ves en las herramientas de tu agente, configura una API key de proveedor o agents.defaults.videoGenerationModel.
OpenClaw trata la generación de video como tres modos de ejecución:
generate para solicitudes de texto a video sin medios de referencia
imageToVideo cuando la solicitud incluye una o más imágenes de referencia
videoToVideo cuando la solicitud incluye uno o más videos de referencia
Los proveedores pueden admitir cualquier subconjunto de esos modos. La herramienta valida el
modo activo antes del envío e informa los modos admitidos en action=list.
Inicio rápido
- Configura una API key para cualquier proveedor compatible:
export GEMINI_API_KEY="your-key"
- Opcionalmente, fija un modelo predeterminado:
openclaw config set agents.defaults.videoGenerationModel.primary "google/veo-3.1-fast-generate-preview"
- Pídele al agente:
Genera un video cinematográfico de 5 segundos de una langosta amigable surfeando al atardecer.
El agente llama a video_generate automáticamente. No se necesita lista de permitidos de herramientas.
Qué sucede cuando generas un video
La generación de video es asíncrona. Cuando el agente llama a video_generate en una sesión:
- OpenClaw envía la solicitud al proveedor y devuelve inmediatamente un ID de tarea.
- El proveedor procesa el trabajo en segundo plano (normalmente entre 30 segundos y 5 minutos, según el proveedor y la resolución).
- Cuando el video está listo, OpenClaw reactiva la misma sesión con un evento interno de finalización.
- El agente publica el video terminado de vuelta en la conversación original.
Mientras un trabajo está en curso, las llamadas duplicadas a video_generate en la misma sesión devuelven el estado actual de la tarea en lugar de iniciar otra generación. Usa openclaw tasks list o openclaw tasks show <taskId> para comprobar el progreso desde la CLI.
Fuera de las ejecuciones de agentes respaldadas por sesión (por ejemplo, invocaciones directas de herramientas), la herramienta recurre a la generación en línea y devuelve la ruta final del medio en el mismo turno.
Ciclo de vida de la tarea
Cada solicitud de video_generate pasa por cuatro estados:
- queued — tarea creada, en espera de que el proveedor la acepte.
- running — el proveedor está procesando (normalmente entre 30 segundos y 5 minutos, según el proveedor y la resolución).
- succeeded — video listo; el agente se reactiva y lo publica en la conversación.
- failed — error del proveedor o tiempo de espera agotado; el agente se reactiva con detalles del error.
Comprueba el estado desde la CLI:
openclaw tasks list
openclaw tasks show <taskId>
openclaw tasks cancel <taskId>
Prevención de duplicados: si ya hay una tarea de video queued o running para la sesión actual, video_generate devuelve el estado de la tarea existente en lugar de iniciar una nueva. Usa action: "status" para comprobarlo explícitamente sin activar una nueva generación.
Proveedores compatibles
| Proveedor | Modelo predeterminado | Texto | Imagen de ref. | Video de ref. | API key |
|---|
| Alibaba | wan2.6-t2v | Sí | Sí (URL remota) | Sí (URL remota) | MODELSTUDIO_API_KEY |
| BytePlus (1.0) | seedance-1-0-pro-250528 | Sí | Hasta 2 imágenes (solo modelos I2V; primer y último fotograma) | No | BYTEPLUS_API_KEY |
| BytePlus Seedance 1.5 | seedance-1-5-pro-251215 | Sí | Hasta 2 imágenes (primer y último fotograma mediante rol) | No | BYTEPLUS_API_KEY |
| BytePlus Seedance 2.0 | dreamina-seedance-2-0-260128 | Sí | Hasta 9 imágenes de referencia | Hasta 3 videos | BYTEPLUS_API_KEY |
| ComfyUI | workflow | Sí | 1 imagen | No | COMFY_API_KEY o COMFY_CLOUD_API_KEY |
| fal | fal-ai/minimax/video-01-live | Sí | 1 imagen | No | FAL_KEY |
| Google | veo-3.1-fast-generate-preview | Sí | 1 imagen | 1 video | GEMINI_API_KEY |
| MiniMax | MiniMax-Hailuo-2.3 | Sí | 1 imagen | No | MINIMAX_API_KEY |
| OpenAI | sora-2 | Sí | 1 imagen | 1 video | OPENAI_API_KEY |
| Qwen | wan2.6-t2v | Sí | Sí (URL remota) | Sí (URL remota) | QWEN_API_KEY |
| Runway | gen4.5 | Sí | 1 imagen | 1 video | RUNWAYML_API_SECRET |
| Together | Wan-AI/Wan2.2-T2V-A14B | Sí | 1 imagen | No | TOGETHER_API_KEY |
| Vydra | veo3 | Sí | 1 imagen (kling) | No | VYDRA_API_KEY |
| xAI | grok-imagine-video | Sí | 1 imagen | 1 video | XAI_API_KEY |
Algunos proveedores aceptan variables de entorno adicionales o alternativas para API keys. Consulta las páginas de proveedores individuales para más detalles.
Ejecuta video_generate action=list para inspeccionar en tiempo de ejecución los proveedores, modelos y
modos de ejecución disponibles.
Matriz de capacidades declaradas
Este es el contrato explícito de modos usado por video_generate, las pruebas de contrato
y el barrido compartido en vivo.
| Proveedor | generate | imageToVideo | videoToVideo | Canales compartidos en vivo hoy |
|---|
| Alibaba | Sí | Sí | Sí | generate, imageToVideo; videoToVideo se omite porque este proveedor necesita URLs de video remotas http(s) |
| BytePlus | Sí | Sí | No | generate, imageToVideo |
| ComfyUI | Sí | Sí | No | No está en el barrido compartido; la cobertura específica del flujo de trabajo vive con las pruebas de Comfy |
| fal | Sí | Sí | No | generate, imageToVideo |
| Google | Sí | Sí | Sí | generate, imageToVideo; el videoToVideo compartido se omite porque el barrido actual de Gemini/Veo respaldado por búfer no acepta esa entrada |
| MiniMax | Sí | Sí | No | generate, imageToVideo |
| OpenAI | Sí | Sí | Sí | generate, imageToVideo; el videoToVideo compartido se omite porque esta ruta de organización/entrada actualmente necesita acceso del lado del proveedor a inpaint/remix |
| Qwen | Sí | Sí | Sí | generate, imageToVideo; videoToVideo se omite porque este proveedor necesita URLs de video remotas http(s) |
| Runway | Sí | Sí | Sí | generate, imageToVideo; videoToVideo se ejecuta solo cuando el modelo seleccionado es runway/gen4_aleph |
| Together | Sí | Sí | No | generate, imageToVideo |
| Vydra | Sí | Sí | No | generate; imageToVideo compartido se omite porque el veo3 incluido es solo de texto y el kling incluido requiere una URL de imagen remota |
| xAI | Sí | Sí | Sí | generate, imageToVideo; videoToVideo se omite porque este proveedor actualmente necesita una URL MP4 remota |
Parámetros de la herramienta
Obligatorios
| Parámetro | Tipo | Descripción |
|---|
prompt | string | Descripción de texto del video que se va a generar (obligatoria para action: "generate") |
Entradas de contenido
| Parámetro | Tipo | Descripción |
|---|
image | string | Una sola imagen de referencia (ruta o URL) |
images | string[] | Varias imágenes de referencia (hasta 9) |
imageRoles | string[] | Sugerencias opcionales de rol por posición en paralelo a la lista combinada de imágenes. Valores canónicos: first_frame, last_frame, reference_image |
video | string | Un solo video de referencia (ruta o URL) |
videos | string[] | Varios videos de referencia (hasta 4) |
videoRoles | string[] | Sugerencias opcionales de rol por posición en paralelo a la lista combinada de videos. Valor canónico: reference_video |
audioRef | string | Un solo audio de referencia (ruta o URL). Se usa, por ejemplo, para música de fondo o referencia de voz cuando el proveedor admite entradas de audio |
audioRefs | string[] | Varios audios de referencia (hasta 3) |
audioRoles | string[] | Sugerencias opcionales de rol por posición en paralelo a la lista combinada de audios. Valor canónico: reference_audio |
Las sugerencias de rol se reenvían al proveedor tal como están. Los valores canónicos provienen
de la unión VideoGenerationAssetRole, pero los proveedores pueden aceptar cadenas de rol
adicionales. Los arreglos *Roles no deben tener más entradas que la
lista de referencias correspondiente; los errores por desfase se rechazan con un error claro.
Usa una cadena vacía para dejar una posición sin establecer.
Controles de estilo
| Parámetro | Tipo | Descripción |
|---|
aspectRatio | string | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, o adaptive |
resolution | string | 480P, 720P, 768P, o 1080P |
durationSeconds | number | Duración objetivo en segundos (redondeada al valor compatible más cercano del proveedor) |
size | string | Sugerencia de tamaño cuando el proveedor la admite |
audio | boolean | Activa el audio generado en la salida cuando se admite. Distinto de audioRef* (entradas) |
watermark | boolean | Activa o desactiva la marca de agua del proveedor cuando se admite |
adaptive es un valor centinela específico del proveedor: se reenvía tal cual a
los proveedores que declaran adaptive en sus capacidades (por ejemplo, BytePlus
Seedance lo usa para detectar automáticamente la proporción a partir de las
dimensiones de la imagen de entrada). Los proveedores que no lo declaran exponen
el valor mediante details.ignoredOverrides en el resultado de la herramienta para que la omisión sea visible.
Avanzado
| Parámetro | Tipo | Descripción |
|---|
action | string | "generate" (predeterminado), "status", o "list" |
model | string | Reemplazo de proveedor/modelo (por ejemplo, runway/gen4.5) |
filename | string | Sugerencia de nombre de archivo de salida |
providerOptions | object | Opciones específicas del proveedor como objeto JSON (por ejemplo, {"seed": 42, "draft": true}). Los proveedores que declaran un esquema tipado validan las claves y los tipos; las claves desconocidas o incompatibilidades hacen que se omita el candidato durante el fallback. Los proveedores sin un esquema declarado reciben las opciones tal como están. Ejecuta video_generate action=list para ver qué acepta cada proveedor |
No todos los proveedores admiten todos los parámetros. OpenClaw ya normaliza la duración al valor compatible más cercano del proveedor, y también remapea sugerencias de geometría traducidas, como de tamaño a relación de aspecto, cuando un proveedor de fallback expone una superficie de control distinta. Los reemplazos realmente incompatibles se ignoran en régimen de mejor esfuerzo y se informan como advertencias en el resultado de la herramienta. Los límites estrictos de capacidad (como demasiadas entradas de referencia) fallan antes del envío.
Los resultados de la herramienta informan la configuración aplicada. Cuando OpenClaw remapea la duración o la geometría durante el fallback del proveedor, los valores devueltos de durationSeconds, size, aspectRatio y resolution reflejan lo que se envió, y details.normalization captura la traducción de solicitado a aplicado.
Las entradas de referencia también seleccionan el modo de ejecución:
- Sin medios de referencia:
generate
- Cualquier imagen de referencia:
imageToVideo
- Cualquier video de referencia:
videoToVideo
- Las entradas de audio de referencia no cambian el modo resuelto; se aplican además del modo que seleccionan las referencias de imagen/video, y solo funcionan con proveedores que declaran
maxInputAudios
Las referencias mixtas de imagen y video no son una superficie de capacidad compartida estable.
Prefiere un tipo de referencia por solicitud.
Fallback y opciones tipadas
Algunas comprobaciones de capacidad se aplican en la capa de fallback en lugar del
límite de la herramienta para que una solicitud que exceda los límites del proveedor principal
todavía pueda ejecutarse en un fallback compatible:
- Si el candidato activo no declara
maxInputAudios (o lo declara como
0), se omite cuando la solicitud contiene referencias de audio, y se
prueba el siguiente candidato.
- Si
maxDurationSeconds del candidato activo está por debajo del
durationSeconds solicitado y el candidato no declara una lista
supportedDurationSeconds, se omite.
- Si la solicitud contiene
providerOptions y el candidato activo
declara explícitamente un esquema tipado de providerOptions, el candidato se
omite cuando las claves proporcionadas no están en el esquema o los tipos de valor no
coinciden. Los proveedores que todavía no han declarado un esquema reciben las
opciones tal como están (paso a través retrocompatible). Un proveedor puede
excluir explícitamente todas las opciones de proveedor declarando un esquema vacío
(capabilities.providerOptions: {}), lo que provoca la misma omisión que una
incompatibilidad de tipos.
La primera razón de omisión en una solicitud se registra con warn para que los operadores vean
cuándo se omitió su proveedor principal; las omisiones posteriores se registran con
debug para mantener silenciosas las cadenas largas de fallback. Si se omiten todos los candidatos,
el error agregado incluye la razón de omisión de cada uno.
Acciones
- generate (predeterminada) — crea un video a partir del prompt dado y de entradas de referencia opcionales.
- status — comprueba el estado de la tarea de video en curso para la sesión actual sin iniciar otra generación.
- list — muestra los proveedores, modelos y sus capacidades disponibles.
Selección de modelo
Al generar un video, OpenClaw resuelve el modelo en este orden:
- Parámetro de herramienta
model — si el agente especifica uno en la llamada.
videoGenerationModel.primary — desde la configuración.
videoGenerationModel.fallbacks — se prueban en orden.
- Detección automática — usa proveedores que tienen autenticación válida, comenzando por el proveedor predeterminado actual y luego los proveedores restantes en orden alfabético.
Si un proveedor falla, se prueba automáticamente el siguiente candidato. Si todos los candidatos fallan, el error incluye detalles de cada intento.
Establece agents.defaults.mediaGenerationAutoProviderFallback: false si quieres
que la generación de video use solo las entradas explícitas de model, primary y fallbacks.
{
agents: {
defaults: {
videoGenerationModel: {
primary: "google/veo-3.1-fast-generate-preview",
fallbacks: ["runway/gen4.5", "qwen/wan2.6-t2v"],
},
},
},
}
Notas sobre proveedores
| Proveedor | Notas |
|---|
| Alibaba | Usa el endpoint asíncrono de DashScope/Model Studio. Las imágenes y videos de referencia deben ser URLs remotas http(s). |
| BytePlus (1.0) | ID del proveedor byteplus. Modelos: seedance-1-0-pro-250528 (predeterminado), seedance-1-0-pro-t2v-250528, seedance-1-0-pro-fast-251015, seedance-1-0-lite-t2v-250428, seedance-1-0-lite-i2v-250428. Los modelos T2V (*-t2v-*) no aceptan entradas de imagen; los modelos I2V y los modelos generales *-pro-* admiten una sola imagen de referencia (primer fotograma). Pasa la imagen por posición o establece role: "first_frame". Los ID de modelo T2V se cambian automáticamente a la variante I2V correspondiente cuando se proporciona una imagen. Claves providerOptions compatibles: seed (number), draft (boolean, fuerza 480p), camera_fixed (boolean). |
| BytePlus Seedance 1.5 | Requiere el Plugin @openclaw/byteplus-modelark. ID del proveedor byteplus-seedance15. Modelo: seedance-1-5-pro-251215. Usa la API unificada content[]. Admite como máximo 2 imágenes de entrada (first_frame + last_frame). Todas las entradas deben ser URLs remotas https://. Establece role: "first_frame" / "last_frame" en cada imagen, o pasa las imágenes por posición. aspectRatio: "adaptive" detecta automáticamente la proporción a partir de la imagen de entrada. audio: true se asigna a generate_audio. providerOptions.seed (number) se reenvía. |
| BytePlus Seedance 2.0 | Requiere el Plugin @openclaw/byteplus-modelark. ID del proveedor byteplus-seedance2. Modelos: dreamina-seedance-2-0-260128, dreamina-seedance-2-0-fast-260128. Usa la API unificada content[]. Admite hasta 9 imágenes de referencia, 3 videos de referencia y 3 audios de referencia. Todas las entradas deben ser URLs remotas https://. Establece role en cada recurso; valores admitidos: "first_frame", "last_frame", "reference_image", "reference_video", "reference_audio". aspectRatio: "adaptive" detecta automáticamente la proporción a partir de la imagen de entrada. audio: true se asigna a generate_audio. providerOptions.seed (number) se reenvía. |
| ComfyUI | Ejecución local o en la nube impulsada por flujos de trabajo. Admite texto a video e imagen a video mediante el grafo configurado. |
| fal | Usa un flujo respaldado por cola para trabajos de larga duración. Solo una imagen de referencia. |
| Google | Usa Gemini/Veo. Admite una imagen o un video de referencia. |
| MiniMax | Solo una imagen de referencia. |
| OpenAI | Solo se reenvía la sustitución de size. Las demás sustituciones de estilo (aspectRatio, resolution, audio, watermark) se ignoran con una advertencia. |
| Qwen | El mismo backend de DashScope que Alibaba. Las entradas de referencia deben ser URLs remotas http(s); los archivos locales se rechazan de entrada. |
| Runway | Admite archivos locales mediante URI de datos. videoToVideo requiere runway/gen4_aleph. Las ejecuciones de solo texto exponen relaciones de aspecto 16:9 y 9:16. |
| Together | Solo una imagen de referencia. |
| Vydra | Usa https://www.vydra.ai/api/v1 directamente para evitar redirecciones que descartan la autenticación. veo3 está incluido solo como texto a video; kling requiere una URL de imagen remota. |
| xAI | Admite texto a video, imagen a video y flujos remotos de edición/extensión de video. |
Modos de capacidad del proveedor
El contrato compartido de generación de video ahora permite que los proveedores declaren capacidades específicas por modo
en lugar de solo límites agregados planos. Las nuevas implementaciones de proveedores
deben preferir bloques de modo explícitos:
capabilities: {
generate: {
maxVideos: 1,
maxDurationSeconds: 10,
supportsResolution: true,
},
imageToVideo: {
enabled: true,
maxVideos: 1,
maxInputImages: 1,
maxDurationSeconds: 5,
},
videoToVideo: {
enabled: true,
maxVideos: 1,
maxInputVideos: 1,
maxDurationSeconds: 5,
},
}
Los campos agregados planos como maxInputImages y maxInputVideos no son
suficientes para anunciar compatibilidad con modos de transformación. Los proveedores deben declarar
generate, imageToVideo y videoToVideo explícitamente para que las pruebas en vivo,
las pruebas de contrato y la herramienta compartida video_generate puedan validar la compatibilidad de modos
de forma determinista.
Pruebas en vivo
Cobertura en vivo opcional para los proveedores empaquetados compartidos:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts
Wrapper del repositorio:
pnpm test:live:media video
Este archivo de pruebas en vivo carga variables de entorno faltantes del proveedor desde ~/.profile, prioriza
las API keys de entorno/en vivo por delante de los perfiles de autenticación almacenados de forma predeterminada, y ejecuta
una prueba segura para lanzamientos de forma predeterminada:
generate para cada proveedor distinto de FAL en el barrido
- prompt de langosta de un segundo
- límite de operación por proveedor desde
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS
(180000 de forma predeterminada)
FAL es opcional porque la latencia de cola del lado del proveedor puede dominar el tiempo de lanzamiento:
pnpm test:live:media video --video-providers fal
Establece OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1 para ejecutar también los modos de transformación declarados
que el barrido compartido puede ejercer de forma segura con medios locales:
imageToVideo cuando capabilities.imageToVideo.enabled
videoToVideo cuando capabilities.videoToVideo.enabled y el proveedor/modelo
acepta entrada de video local respaldada por búfer en el barrido compartido
Hoy el canal compartido en vivo de videoToVideo cubre:
runway solo cuando seleccionas runway/gen4_aleph
Configuración
Establece el modelo predeterminado de generación de video en tu configuración de OpenClaw:
{
agents: {
defaults: {
videoGenerationModel: {
primary: "qwen/wan2.6-t2v",
fallbacks: ["qwen/wan2.6-r2v-flash"],
},
},
},
}
O mediante la CLI:
openclaw config set agents.defaults.videoGenerationModel.primary "qwen/wan2.6-t2v"
Relacionado