Медиа: изображения, видео, музыка, TTS

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
Google 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 модели:

  • Изображения: image tool — анализ через vision-модель
  • Аудио: STT-плагины → текст → LLM
  • Видео: извлечение кадров → vision-модель

Любая multimodal LLM (OpenAI, Google, Anthropic) может понимать медиа, если настроена как активная модель.

Матрица провайдеров

Провайдер Изображения Видео Музыка TTS STT Realtime
OpenAI
Google
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",
      },
    },
  },
}
Microsoft speech игнорируется для звонков (телефонное аудио требует PCM; текущий транспорт Microsoft не предоставляет PCM-вывод).

Входящие звонки

Inbound policy по умолчанию disabled. Для включения:

{
  inboundPolicy: "allowlist",
  allowFrom: ["+15550001234"],
  inboundGreeting: "Hello! How can I help?",
}
inboundPolicy: "allowlist" — это низкоуровневый фильтр caller-ID. Плагин нормализует From от провайдера и сравнивает с allowFrom. Верификация webhook аутентифицирует доставку, но не доказывает владение номером. Относитесь к allowFrom как к фильтрации caller-ID, а не к строгой идентификации.

Настройка автоответов:

  • responseModel
  • responseSystemPrompt
  • responseTimeoutMs

Контракт голосового вывода

Для автоответов 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 записями.

Что дальше