Генерація відео
Агенти OpenClaw можуть створювати відео з текстових запитів, еталонних зображень або наявних відео. Підтримується чотирнадцять бекендів провайдерів, кожен із різними варіантами моделей, режимами введення та наборами функцій. Агент автоматично вибирає відповідного провайдера на основі вашої конфігурації та доступних API-ключів.
Інструмент video_generate з’являється лише тоді, коли доступний принаймні один провайдер генерації відео. Якщо ви його не бачите серед інструментів агента, встановіть API-ключ провайдера або налаштуйте agents.defaults.videoGenerationModel.
OpenClaw розглядає генерацію відео як три режими виконання:
generate для запитів text-to-video без еталонних медіа
imageToVideo, коли запит містить одне або кілька еталонних зображень
videoToVideo, коли запит містить одне або кілька еталонних відео
Провайдери можуть підтримувати будь-яку підмножину цих режимів. Інструмент перевіряє активний режим перед надсиланням і повідомляє про підтримувані режими в action=list.
Швидкий старт
- Встановіть API-ключ для будь-якого підтримуваного провайдера:
export GEMINI_API_KEY="your-key"
- За бажанням закріпіть модель за замовчуванням:
openclaw config set agents.defaults.videoGenerationModel.primary "google/veo-3.1-fast-generate-preview"
- Попросіть агента:
Створи 5-секундне кінематографічне відео дружнього лобстера, який займається серфінгом на заході сонця.
Агент автоматично викликає video_generate. Дозволяти інструмент через allowlist не потрібно.
Що відбувається, коли ви генеруєте відео
Генерація відео є асинхронною. Коли агент викликає video_generate у сесії:
- OpenClaw надсилає запит провайдеру й одразу повертає ID завдання.
- Провайдер обробляє завдання у фоновому режимі (зазвичай від 30 секунд до 5 хвилин залежно від провайдера та роздільної здатності).
- Коли відео готове, OpenClaw пробуджує ту саму сесію внутрішньою подією завершення.
- Агент публікує готове відео назад в оригінальну розмову.
Поки завдання виконується, повторні виклики video_generate у тій самій сесії повертають поточний статус завдання замість запуску нової генерації. Використовуйте openclaw tasks list або openclaw tasks show <taskId>, щоб перевірити прогрес через CLI.
Поза запусками агента, прив’язаними до сесії (наприклад, при прямих викликах інструмента), інструмент переходить до вбудованої генерації та повертає фінальний шлях до медіафайлу в межах того самого ходу.
Життєвий цикл завдання
Кожен запит video_generate проходить через чотири стани:
- queued — завдання створено, очікує, поки провайдер його прийме.
- running — провайдер виконує обробку (зазвичай від 30 секунд до 5 хвилин залежно від провайдера та роздільної здатності).
- succeeded — відео готове; агент пробуджується та публікує його в розмову.
- failed — помилка провайдера або тайм-аут; агент пробуджується з деталями помилки.
Перевіряйте статус через CLI:
openclaw tasks list
openclaw tasks show <taskId>
openclaw tasks cancel <taskId>
Запобігання дублюванню: якщо для поточної сесії вже є відеозавдання у стані queued або running, video_generate повертає статус наявного завдання замість запуску нового. Використовуйте action: "status", щоб явно перевірити стан без запуску нової генерації.
Підтримувані провайдери
| Провайдер | Модель за замовчуванням | Текст | Еталонне зображення | Еталонне відео | API-ключ |
|---|
| Alibaba | wan2.6-t2v | Так | Так (віддалений URL) | Так (віддалений URL) | MODELSTUDIO_API_KEY |
| BytePlus (1.0) | seedance-1-0-pro-250528 | Так | До 2 зображень (лише моделі I2V; перший + останній кадр) | Ні | BYTEPLUS_API_KEY |
| BytePlus Seedance 1.5 | seedance-1-5-pro-251215 | Так | До 2 зображень (перший + останній кадр через роль) | Ні | BYTEPLUS_API_KEY |
| BytePlus Seedance 2.0 | dreamina-seedance-2-0-260128 | Так | До 9 еталонних зображень | До 3 відео | BYTEPLUS_API_KEY |
| ComfyUI | workflow | Так | 1 зображення | Ні | COMFY_API_KEY або COMFY_CLOUD_API_KEY |
| fal | fal-ai/minimax/video-01-live | Так | 1 зображення | Ні | FAL_KEY |
| Google | veo-3.1-fast-generate-preview | Так | 1 зображення | 1 відео | GEMINI_API_KEY |
| MiniMax | MiniMax-Hailuo-2.3 | Так | 1 зображення | Ні | MINIMAX_API_KEY |
| OpenAI | sora-2 | Так | 1 зображення | 1 відео | OPENAI_API_KEY |
| Qwen | wan2.6-t2v | Так | Так (віддалений URL) | Так (віддалений URL) | QWEN_API_KEY |
| Runway | gen4.5 | Так | 1 зображення | 1 відео | RUNWAYML_API_SECRET |
| Together | Wan-AI/Wan2.2-T2V-A14B | Так | 1 зображення | Ні | TOGETHER_API_KEY |
| Vydra | veo3 | Так | 1 зображення (kling) | Ні | VYDRA_API_KEY |
| xAI | grok-imagine-video | Так | 1 зображення | 1 відео | XAI_API_KEY |
Деякі провайдери приймають додаткові або альтернативні змінні середовища для API-ключів. Докладніше дивіться на окремих сторінках провайдерів.
Запустіть video_generate action=list, щоб під час виконання переглянути доступних провайдерів, моделі та режими виконання.
Оголошена матриця можливостей
Це явний контракт режимів, який використовують video_generate, контрактні тести та спільний live sweep.
| Провайдер | generate | imageToVideo | videoToVideo | Спільні live lanes на сьогодні |
|---|
| Alibaba | Так | Так | Так | generate, imageToVideo; videoToVideo пропущено, оскільки цьому провайдеру потрібні віддалені http(s) URL відео |
| BytePlus | Так | Так | Ні | generate, imageToVideo |
| ComfyUI | Так | Так | Ні | Не входить до спільного sweep; покриття, специфічне для workflow, міститься в тестах Comfy |
| fal | Так | Так | Ні | generate, imageToVideo |
| Google | Так | Так | Так | generate, imageToVideo; спільний videoToVideo пропущено, оскільки поточний buffer-backed Gemini/Veo sweep не приймає такий вхід |
| MiniMax | Так | Так | Ні | generate, imageToVideo |
| OpenAI | Так | Так | Так | generate, imageToVideo; спільний videoToVideo пропущено, оскільки цей шлях org/input наразі потребує доступу до provider-side inpaint/remix |
| Qwen | Так | Так | Так | generate, imageToVideo; videoToVideo пропущено, оскільки цьому провайдеру потрібні віддалені http(s) URL відео |
| Runway | Так | Так | Так | generate, imageToVideo; videoToVideo виконується лише тоді, коли вибрана модель — runway/gen4_aleph |
| Together | Так | Так | Ні | generate, imageToVideo |
| Vydra | Так | Так | Ні | generate; спільний imageToVideo пропущено, оскільки вбудований veo3 підтримує лише текст, а вбудований kling потребує віддалений URL зображення |
| xAI | Так | Так | Так | generate, imageToVideo; videoToVideo пропущено, оскільки цьому провайдеру наразі потрібен віддалений URL MP4 |
Параметри інструмента
Обов’язкові
| Параметр | Тип | Опис |
|---|
prompt | string | Текстовий опис відео, яке потрібно згенерувати (обов’язково для action: "generate") |
Вхідні дані контенту
| Параметр | Тип | Опис |
|---|
image | string | Одне еталонне зображення (шлях або URL) |
images | string[] | Кілька еталонних зображень (до 9) |
imageRoles | string[] | Необов’язкові підказки ролей для кожної позиції паралельно до об’єднаного списку зображень. Канонічні значення: first_frame, last_frame, reference_image |
video | string | Одне еталонне відео (шлях або URL) |
videos | string[] | Кілька еталонних відео (до 4) |
videoRoles | string[] | Необов’язкові підказки ролей для кожної позиції паралельно до об’єднаного списку відео. Канонічне значення: reference_video |
audioRef | string | Одне еталонне аудіо (шлях або URL). Використовується, наприклад, для фонової музики або еталона голосу, коли провайдер підтримує аудіовходи |
audioRefs | string[] | Кілька еталонних аудіо (до 3) |
audioRoles | string[] | Необов’язкові підказки ролей для кожної позиції паралельно до об’єднаного списку аудіо. Канонічне значення: reference_audio |
Підказки ролей передаються провайдеру як є. Канонічні значення походять із union VideoGenerationAssetRole, але провайдери можуть приймати й додаткові рядки ролей. Масиви *Roles не повинні містити більше елементів, ніж відповідний список еталонів; помилки на один елемент більше або менше завершуються зрозумілим повідомленням. Використовуйте порожній рядок, щоб залишити позицію незаповненою.
Керування стилем
| Параметр | Тип | Опис |
|---|
aspectRatio | string | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 або adaptive |
resolution | string | 480P, 720P, 768P або 1080P |
durationSeconds | number | Цільова тривалість у секундах (округлюється до найближчого значення, яке підтримує провайдер) |
size | string | Підказка розміру, якщо провайдер це підтримує |
audio | boolean | Увімкнути згенероване аудіо у вихідному результаті, якщо підтримується. Відрізняється від audioRef* (вхідні дані) |
watermark | boolean | Увімкнути або вимкнути водяний знак провайдера, якщо підтримується |
adaptive — це специфічний для провайдера службовий маркер: він передається без змін
провайдерам, які оголошують adaptive у своїх можливостях (наприклад, BytePlus
Seedance використовує його, щоб автоматично визначати співвідношення сторін за
розмірами вхідного зображення). Провайдери, які його не оголошують, показують це
значення через details.ignoredOverrides у результаті інструмента, щоб було видно,
що його було проігноровано.
Додатково
| Параметр | Тип | Опис |
|---|
action | string | "generate" (типово), "status" або "list" |
model | string | Перевизначення провайдера/моделі (наприклад, runway/gen4.5) |
filename | string | Підказка для імені вихідного файлу |
providerOptions | object | Специфічні для провайдера параметри як JSON-об’єкт (наприклад, {"seed": 42, "draft": true}). Провайдери, які оголошують типізовану схему, перевіряють ключі та типи значень; невідомі ключі або невідповідності призводять до пропуску кандидата під час fallback. Провайдери без оголошеної схеми отримують параметри як є. Запустіть video_generate action=list, щоб побачити, що приймає кожен провайдер |
Не всі провайдери підтримують усі параметри. OpenClaw уже нормалізує тривалість до найближчого значення, яке підтримує провайдер, а також переналаштовує трансформовані підказки геометрії, як-от перетворення size на aspect ratio, коли fallback-провайдер має іншу поверхню керування. Справді непідтримувані перевизначення ігноруються в режимі best-effort і повідомляються як попередження в результаті інструмента. Жорсткі обмеження можливостей (наприклад, надто велика кількість еталонних вхідних даних) завершуються помилкою до надсилання.
Результати інструмента показують застосовані налаштування. Коли OpenClaw переналаштовує тривалість або геометрію під час fallback провайдера, повернуті значення durationSeconds, size, aspectRatio і resolution відображають те, що було надіслано, а details.normalization фіксує перетворення від запитаного до застосованого.
Еталонні вхідні дані також визначають режим виконання:
- Без еталонних медіа:
generate
- Будь-яке еталонне зображення:
imageToVideo
- Будь-яке еталонне відео:
videoToVideo
- Еталонні аудіовходи не змінюють визначений режим; вони застосовуються поверх режиму, який вибирають еталонні зображення/відео, і працюють лише з провайдерами, які оголошують
maxInputAudios
Змішані еталонні зображення та відео не є стабільною спільною поверхнею можливостей.
Рекомендовано використовувати один тип еталонів на запит.
Fallback і типізовані параметри
Деякі перевірки можливостей застосовуються на рівні fallback, а не на межі
інструмента, щоб запит, який перевищує обмеження основного провайдера,
усе одно міг виконатися на придатному fallback-провайдері:
- Якщо активний кандидат не оголошує
maxInputAudios (або оголошує його як
0), його буде пропущено, коли запит містить еталонні аудіодані, і буде
випробувано наступного кандидата.
- Якщо
maxDurationSeconds активного кандидата менше за запитане
durationSeconds і кандидат не оголошує список
supportedDurationSeconds, його буде пропущено.
- Якщо запит містить
providerOptions, а активний кандидат
явно оголошує типізовану схему providerOptions, кандидат буде
пропущено, якщо надані ключі відсутні в схемі або типи значень
не збігаються. Провайдери, які ще не оголосили схему, отримують
параметри як є (зворотно сумісна наскрізна передача). Провайдер може
явно відмовитися від усіх параметрів провайдера, оголосивши порожню схему
(capabilities.providerOptions: {}), що спричиняє той самий пропуск, що й
невідповідність типів.
Перша причина пропуску в запиті записується з рівнем warn, щоб оператори бачили,
коли основного провайдера було пропущено; наступні пропуски записуються з рівнем
debug, щоб довгі ланцюжки fallback не створювали зайвого шуму. Якщо пропущено
кожного кандидата, агрегована помилка містить причину пропуску для кожного з них.
Дії
- generate (типово) — створити відео з вказаного запиту та необов’язкових еталонних вхідних даних.
- status — перевірити стан активного відеозавдання для поточної сесії без запуску нової генерації.
- list — показати доступних провайдерів, моделі та їхні можливості.
Вибір моделі
Під час генерації відео OpenClaw визначає модель у такому порядку:
- Параметр інструмента
model — якщо агент указує його у виклику.
videoGenerationModel.primary — із конфігурації.
videoGenerationModel.fallbacks — випробовуються по черзі.
- Автовизначення — використовує провайдерів із дійсною автентифікацією, починаючи з поточного провайдера за замовчуванням, а потім решту провайдерів в алфавітному порядку.
Якщо провайдер завершується помилкою, автоматично випробовується наступний кандидат. Якщо помиляються всі кандидати, помилка містить подробиці кожної спроби.
Установіть agents.defaults.mediaGenerationAutoProviderFallback: false, якщо хочете,
щоб генерація відео використовувала лише явні записи model, primary і fallbacks.
{
agents: {
defaults: {
videoGenerationModel: {
primary: "google/veo-3.1-fast-generate-preview",
fallbacks: ["runway/gen4.5", "qwen/wan2.6-t2v"],
},
},
},
}
Примітки щодо провайдерів
| Провайдер | Примітки |
|---|
| Alibaba | Використовує асинхронну кінцеву точку DashScope/Model Studio. Еталонні зображення та відео мають бути віддаленими URL http(s). |
| BytePlus (1.0) | ID провайдера byteplus. Моделі: seedance-1-0-pro-250528 (типова), seedance-1-0-pro-t2v-250528, seedance-1-0-pro-fast-251015, seedance-1-0-lite-t2v-250428, seedance-1-0-lite-i2v-250428. Моделі T2V (*-t2v-*) не приймають вхідні зображення; моделі I2V і загальні моделі *-pro-* підтримують одне еталонне зображення (перший кадр). Передайте зображення позиційно або встановіть role: "first_frame". ID моделей T2V автоматично перемикаються на відповідний варіант I2V, коли надається зображення. Підтримувані ключі providerOptions: seed (number), draft (boolean, примусово встановлює 480p), camera_fixed (boolean). |
| BytePlus Seedance 1.5 | Потребує Plugin @openclaw/byteplus-modelark. ID провайдера byteplus-seedance15. Модель: seedance-1-5-pro-251215. Використовує уніфікований API content[]. Підтримує не більше 2 вхідних зображень (first_frame + last_frame). Усі вхідні дані мають бути віддаленими URL https://. Установіть role: "first_frame" / "last_frame" для кожного зображення або передайте зображення позиційно. aspectRatio: "adaptive" автоматично визначає співвідношення сторін із вхідного зображення. audio: true зіставляється з generate_audio. providerOptions.seed (number) передається далі. |
| BytePlus Seedance 2.0 | Потребує Plugin @openclaw/byteplus-modelark. ID провайдера byteplus-seedance2. Моделі: dreamina-seedance-2-0-260128, dreamina-seedance-2-0-fast-260128. Використовує уніфікований API content[]. Підтримує до 9 еталонних зображень, 3 еталонних відео та 3 еталонних аудіо. Усі вхідні дані мають бути віддаленими URL https://. Установіть role для кожного ресурсу — підтримувані значення: "first_frame", "last_frame", "reference_image", "reference_video", "reference_audio". aspectRatio: "adaptive" автоматично визначає співвідношення сторін із вхідного зображення. audio: true зіставляється з generate_audio. providerOptions.seed (number) передається далі. |
| ComfyUI | Локальне або хмарне виконання на основі workflow. Підтримує text-to-video та image-to-video через налаштований граф. |
| fal | Використовує потік на основі черги для довготривалих завдань. Лише одне еталонне зображення. |
| Google | Використовує Gemini/Veo. Підтримує одне еталонне зображення або одне еталонне відео. |
| MiniMax | Лише одне еталонне зображення. |
| OpenAI | Передається лише перевизначення size. Інші перевизначення стилю (aspectRatio, resolution, audio, watermark) ігноруються з попередженням. |
| Qwen | Той самий бекенд DashScope, що й Alibaba. Еталонні вхідні дані мають бути віддаленими URL http(s); локальні файли одразу відхиляються. |
| Runway | Підтримує локальні файли через data URI. Для video-to-video потрібен runway/gen4_aleph. Тільки текстові запуски надають співвідношення сторін 16:9 і 9:16. |
| Together | Лише одне еталонне зображення. |
| Vydra | Використовує https://www.vydra.ai/api/v1 безпосередньо, щоб уникнути редиректів, які скидають автентифікацію. veo3 вбудовано лише як text-to-video; kling потребує віддалений URL зображення. |
| xAI | Підтримує потоки text-to-video, image-to-video, а також віддалене редагування/розширення відео. |
Режими можливостей провайдера
Спільний контракт генерації відео тепер дозволяє провайдерам оголошувати
можливості, специфічні для режимів, а не лише плоскі агреговані обмеження. Нові
реалізації провайдерів мають надавати перевагу явним блокам режимів:
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,
},
}
Плоских агрегованих полів, таких як maxInputImages і maxInputVideos,
недостатньо, щоб оголосити підтримку режимів трансформації. Провайдери мають
явно оголошувати generate, imageToVideo і videoToVideo, щоб live-тести,
контрактні тести та спільний інструмент video_generate могли детерміновано
перевіряти підтримку режимів.
Live-тести
Live-покриття за opt-in для спільних вбудованих провайдерів:
OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts
Обгортка репозиторію:
pnpm test:live:media video
Цей live-файл завантажує відсутні змінні середовища провайдера з ~/.profile, типово надає перевагу live/env API-ключам над збереженими профілями автентифікації та за замовчуванням запускає безпечний для релізу smoke-тест:
generate для кожного провайдера у sweep, окрім FAL
- односекундний запит про лобстера
- ліміт операції для кожного провайдера з
OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS
(180000 типово)
FAL підключається лише за opt-in, оскільки затримка черги на боці провайдера може домінувати у часі релізу:
pnpm test:live:media video --video-providers fal
Установіть OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1, щоб також запускати оголошені режими трансформації, які спільний sweep може безпечно виконувати з локальними медіа:
imageToVideo, коли capabilities.imageToVideo.enabled
videoToVideo, коли capabilities.videoToVideo.enabled і провайдер/модель
приймає локальний вхід відео на основі буфера у спільному sweep
Наразі спільна live-lane videoToVideo охоплює:
- лише
runway, коли ви вибираєте runway/gen4_aleph
Конфігурація
Установіть модель генерації відео за замовчуванням у конфігурації OpenClaw:
{
agents: {
defaults: {
videoGenerationModel: {
primary: "qwen/wan2.6-t2v",
fallbacks: ["qwen/wan2.6-r2v-flash"],
},
},
},
}
Або через CLI:
openclaw config set agents.defaults.videoGenerationModel.primary "qwen/wan2.6-t2v"
Пов’язане