OpenClaw умеет генерировать изображения, видео и музыку, понимать входящие медиа (картинки, аудио, видео) и озвучивать ответы через TTS. Все медиа-возможности — это инструменты: агент сам решает, когда их использовать.
Обзор возможностей
| Возможность | Инструмент | Режим | Что делает |
|---|---|---|---|
| Генерация изображений | image_generate |
Синхронный | Создаёт и редактирует картинки по промпту |
| Генерация видео | video_generate |
Асинхронный | Text-to-video, image-to-video |
| Генерация музыки | music_generate |
Асинхронный | Генерация музыкальных треков |
| TTS | tts |
Синхронный | Конвертация текста в речь |
| Распознавание речи | STT (плагины) | — | Транскрибация голосовых сообщений |
| Понимание медиа | image + vision-модели |
— | Анализ изображений, аудио, видео |
Синхронный vs асинхронный
Синхронный (изображения, TTS) — ответ приходит через секунды, встраивается в сообщение.
Асинхронный (видео, музыка) — запрос уходит в фон, агент продолжает работу. Когда провайдер готовит результат, OpenClaw будит агента и он отправляет готовый медиа-файл.
Генерация изображений
image_generate создаёт и редактирует изображения. Поставляется с несколькими провайдерами.
Провайдеры
| Провайдер | Модель по умолчанию | Редактирование | API-ключ |
|---|---|---|---|
| OpenAI | gpt-image-2 |
До 4 изображений | OPENAI_API_KEY |
gemini-3.1-flash-image-preview |
До 5 изображений | GEMINI_API_KEY |
|
| xAI | grok-imagine-image |
До 5 изображений | XAI_API_KEY |
| fal | fal-ai/flux/dev |
1 изображение | FAL_KEY |
| MiniMax | image-01 |
Subject reference | MINIMAX_API_KEY |
| OpenRouter | gemini-3.1-flash-image-preview |
До 5 изображений | OPENROUTER_API_KEY |
| ComfyUI | workflow | 1 изображение | COMFY_API_KEY |
Настройка
{
"agents": {
"defaults": {
"imageGenerationModel": {
"primary": "openai/gpt-image-2",
"timeoutMs": 180000,
"fallbacks": [
"openrouter/google/gemini-3.1-flash-image-preview",
"google/gemini-3.1-flash-image-preview"
]
}
}
}
}
Параметры
| Параметр | Описание |
|---|---|
prompt |
Текстовый промпт (обязательно) |
model |
Переопределение модели |
image / images |
Референсные изображения для редактирования |
size |
Размер: 1024x1024, 2048x2048, 3840x2160 |
aspectRatio |
Соотношение сторон: 1:1, 16:9, 9:16 |
resolution |
Разрешение: 1K, 2K, 4K |
quality |
Качество: low, medium, high |
outputFormat |
Формат: png, jpeg, webp |
background |
Фон: transparent, opaque, auto |
count |
Количество (1-4) |
Порядок выбора провайдера
1. model в вызове инструмента
2. imageGenerationModel.primary в конфиге
3. imageGenerationModel.fallbacks по порядку
4. Автоопределение по наличию API-ключа
Генерация видео
video_generate — text-to-video и image-to-video. Асинхронный: запрос уходит в фон, результат приходит через 30 секунд — несколько минут.
Провайдеры
| Провайдер | API-ключ |
|---|---|
| Google Veo | GEMINI_API_KEY |
| OpenAI Sora | OPENAI_API_KEY |
| MiniMax | MINIMAX_API_KEY |
| fal | FAL_KEY |
| Runway | RUNWAY_API_KEY |
| Alibaba | ALIBABA_API_KEY |
Генерация музыки
music_generate — генерация музыкальных треков. Асинхронный на shared-провайдерах, синхронный на ComfyUI.
Провайдеры
| Провайдер | API-ключ |
|---|---|
| Google Lyria | GEMINI_API_KEY |
| MiniMax | MINIMAX_API_KEY |
| ComfyUI | COMFY_API_KEY (локальный workflow) |
TTS — текст в речь
tts конвертирует текст в аудио. 13 провайдеров, от бесплатных до профессиональных.
Провайдеры
| Провайдер | API-ключ | Особенности |
|---|---|---|
| OpenAI | OPENAI_API_KEY |
Поддержка persona instructions |
| ElevenLabs | ELEVENLABS_API_KEY |
Voice cloning, мультиязычный |
| Azure Speech | AZURE_SPEECH_KEY + регион |
Native Ogg/Opus, телефония |
| Google Gemini | GEMINI_API_KEY |
Persona-aware через promptTemplate |
| Microsoft | Не нужен | Edge neural TTS, best-effort |
| MiniMax | MINIMAX_API_KEY |
T2A v2 API |
| OpenRouter | OPENROUTER_API_KEY |
Kokoro-82m |
| Local CLI | Не нужен | Локальная команда (say, piper) |
Настройка
{
"messages": {
"tts": {
"auto": "always",
"provider": "elevenlabs",
"providers": {
"elevenlabs": {
"apiKey": "${ELEVENLABS_API_KEY}",
"model": "eleven_multilingual_v2",
"voiceId": "EXAVITQu4vr4xnSDxMaL"
}
}
}
}
}
Управление через команды
/tts status— текущее состояние/tts audio "текст"— разовая озвучка/tts on|off— включить/выключить auto-TTS/tts provider— сменить провайдера
Microsoft Edge TTS (бесплатно)
Microsoft Edge TTS работает без API-ключа через node-edge-tts. Best-effort, без SLA:
{
"messages": {
"tts": {
"auto": "always",
"provider": "microsoft",
"providers": {
"microsoft": {
"voice": "ru-RU-DmitryNeural",
"lang": "ru-RU"
}
}
}
}
}
STT — распознавание речи
Голосовые сообщения автоматически транскрибируются через STT-провайдеры:
| Провайдер | API-ключ |
|---|---|
| OpenAI Whisper | OPENAI_API_KEY |
| Deepgram | DEEPGRAM_API_KEY |
| ElevenLabs | ELEVENLABS_API_KEY |
| Mistral | MISTRAL_API_KEY |
| xAI | XAI_API_KEY |
Каналы (Telegram, WhatsApp) могут предварительно транскрибировать голосовые для mention-gating — вторая STT-транскрипция не делается.
Понимание медиа
Агент может анализировать входящие изображения, аудио и видео через vision-capable модели:
- Изображения:
imagetool — анализ через vision-модель - Аудио: STT-плагины → текст → LLM
- Видео: извлечение кадров → vision-модель
Любая multimodal LLM (OpenAI, Google, Anthropic) может понимать медиа, если настроена как активная модель.
Матрица провайдеров
| Провайдер | Изображения | Видео | Музыка | TTS | STT | Realtime |
|---|---|---|---|---|---|---|
| OpenAI | ✓ | ✓ | ✓ | ✓ | ✓ | |
| ✓ | ✓ | ✓ | ✓ | ✓ | ||
| xAI | ✓ | ✓ | ✓ | ✓ | ||
| MiniMax | ✓ | ✓ | ✓ | ✓ | ||
| fal | ✓ | ✓ | ||||
| ElevenLabs | ✓ | ✓ | ||||
| Microsoft | ✓ | |||||
| ComfyUI | ✓ | ✓ | ✓ |
📦 Плагин Voice Call (подробно)
Голосовые вызовы для OpenClaw через плагин. Поддерживает исходящие уведомления и многоэтапные беседы со входящими политиками.
Текущие провайдеры:
twilio(Programmable Voice + Media Streams)telnyx(Call Control v2)plivo(Voice API + XML transfer + GetInput speech)mock(разработка/без сети)
Где работает
Плагин Voice Call работает внутри процесса Gateway. Если используете удалённый Gateway — установите и настройте плагин на машине с Gateway, затем перезапустите.
Установка
Вариант A: из npm (рекомендуется)
openclaw plugins install @openclaw/voice-call
Затем перезапустите Gateway.
Вариант B: из локальной папки (для разработки)
PLUGIN_SRC=./path/to/local/voice-call-plugin
openclaw plugins install "$PLUGIN_SRC"
cd "$PLUGIN_SRC" && pnpm install
Затем перезапустите Gateway.
Конфигурация
Конфигурация — plugins.entries.voice-call.config:
{
plugins: {
entries: {
"voice-call": {
enabled: true,
config: {
provider: "twilio", // или "telnyx" | "plivo" | "mock"
fromNumber: "+15550001234",
toNumber: "+15550005678",
twilio: {
accountSid: "ACxxxxxxxx",
authToken: "...",
},
telnyx: {
apiKey: "...",
connectionId: "...",
publicKey: "...",
},
plivo: {
authId: "MAxxxxxxxxxxxxxxxxxxxx",
authToken: "...",
},
serve: {
port: 3334,
path: "/voice/webhook",
},
webhookSecurity: {
allowedHosts: ["voice.example.com"],
trustedProxyIPs: ["100.64.0.1"],
},
outbound: {
defaultMode: "notify", // notify | conversation
},
streaming: {
enabled: true,
provider: "openai",
streamPath: "/voice/stream",
providers: {
openai: {
apiKey: "sk-...",
model: "gpt-4o-transcribe",
silenceDurationMs: 800,
vadThreshold: 0.5,
},
},
preStartTimeoutMs: 5000,
maxPendingConnections: 32,
maxPendingConnectionsPerIp: 4,
maxConnections: 128,
},
},
},
},
},
}
- Twilio/Telnyx/Plivo требуют публично доступный webhook URL.
mock— локальный dev-провайдер (без сети).- Telnyx требует
telnyx.publicKey(илиTELNYX_PUBLIC_KEY), еслиskipSignatureVerificationне true. - Старые конфиги с
provider: "log",twilio.fromили legacy-ключами стриминга — выполнитеopenclaw doctor --fix.
Транскрипция в реальном времени
streaming выбирает провайдера транскрипции для живого аудио звонка.
streaming.provider— опционален. Если не задан — Voice Call берёт первого зарегистрированного провайдера.- Сейчас встроенный провайдер — OpenAI.
- Если
streaming.provider指向 незарегистрированный провайдер — Voice Call логирует предупреждение и пропускает media streaming, не ломая плагин.
Настройки OpenAI стриминга:
| API key | streaming.providers.openai.apiKey или OPENAI_API_KEY |
| model | gpt-4o-transcribe |
silenceDurationMs |
800 |
vadThreshold |
0.5 |
Reaper зависших звонков
staleCallReaperSeconds завершает звонки, которые не получили финального webhook (например, notify-звонки, которые никогда не завершились). По умолчанию 0 (отключено).
Рекомендуемые значения:
- Production: 120–300 секунд для notify-сценариев
- Значение должно быть больше
maxDurationSeconds
{
config: {
maxDurationSeconds: 300,
staleCallReaperSeconds: 360,
},
}
Безопасность webhook’ов
Когда прокси или туннель стоит перед Gateway, плагин реконструирует публичный URL для верификации подписи.
webhookSecurity.allowedHosts |
Allowlist хостов из forwarding headers |
webhookSecurity.trustForwardedHeaders |
Доверять forwarding headers без allowlist |
webhookSecurity.trustedProxyIPs |
Доверять forwarding headers только при совпадении IP |
Replay-защита включена для Twilio и Plivo. Повторенные валидные webhook-запросы подтверждаются, но пропускаются для side effects.
TTS для звонков
Voice Call использует messages.tts для стриминговой речи. Можно переопределить в конфиге плагина (deep-merge с messages.tts).
{
tts: {
provider: "elevenlabs",
providers: {
elevenlabs: {
voiceId: "pMsXgVXv3BLzUgSXRplE",
modelId: "eleven_multilingual_v2",
},
},
},
}
Входящие звонки
Inbound policy по умолчанию disabled. Для включения:
{
inboundPolicy: "allowlist",
allowFrom: ["+15550001234"],
inboundGreeting: "Hello! How can I help?",
}
inboundPolicy: "allowlist" — это низкоуровневый фильтр caller-ID. Плагин нормализует From от провайдера и сравнивает с allowFrom. Верификация webhook аутентифицирует доставку, но не доказывает владение номером. Относитесь к allowFrom как к фильтрации caller-ID, а не к строгой идентификации.
Настройка автоответов:
responseModelresponseSystemPromptresponseTimeoutMs
Контракт голосового вывода
Для автоответов Voice Call добавляет строгий контракт в системный промпт: {"spoken":"..."}. Плагин извлекает текст для речи дефенсивно:
- Игнорирует reasoning/error контент
- Парсит JSON, fenced JSON или inline
"spoken"ключи - Fallback на plain text с удалением planning-абзацев
CLI
openclaw voicecall call --to "+15555550123" --message "Hello from OpenClaw"
openclaw voicecall start --to "+15555550123" # alias для call
openclaw voicecall continue --call-id <id> --message "Any questions?"
openclaw voicecall speak --call-id <id> --message "One moment"
openclaw voicecall end --call-id <id>
openclaw voicecall status --call-id <id>
openclaw voicecall tail
openclaw voicecall latency # сводка задержек из логов
openclaw voicecall expose --mode funnel
latency читает calls.jsonl из стандартного пути. Используйте --file <path> для другого файла и --last <n> для ограничения анализа последними N записями.
Что дальше
- Инструменты: обзор — три уровня: tools, skills, plugins
- Ноды и медиа — подключённые устройства, камеры
- Каналы — как медиа доставляется в чаты