Nodes and media
Розуміння медіа
OpenClaw може підсумовувати вхідні медіа (зображення/аудіо/відео) до запуску конвеєра відповіді. Він автоматично виявляє, коли доступні локальні інструменти або ключі провайдерів, і його можна вимкнути або налаштувати. Якщо розуміння вимкнене, моделі все одно отримують оригінальні файли/URL як зазвичай.
Поведінка медіа, специфічна для постачальників, реєструється Plugin-ами постачальників, тоді як ядро OpenClaw відповідає за спільну конфігурацію tools.media, порядок резервного fallback та інтеграцію з конвеєром відповіді.
Цілі
- Необов’язково: попередньо перетравлювати вхідні медіа в короткий текст для швидшої маршрутизації + кращого розбору команд.
- Зберігати доставку оригінальних медіа до моделі (завжди).
- Підтримувати API провайдерів і CLI fallback-и.
- Дозволяти кілька моделей з упорядкованим fallback (помилка/розмір/тайм-аут).
Загальна поведінка
Зібрати вкладення
Зібрати вхідні вкладення (MediaPaths, MediaUrls, MediaTypes).
Вибрати для кожної можливості
Для кожної ввімкненої можливості (зображення/аудіо/відео) вибрати вкладення за політикою (типово: перше).
Вибрати модель
Вибрати перший придатний запис моделі (розмір + можливість + auth).
Fallback у разі помилки
Якщо модель дає збій або медіа завелике, перейти до наступного запису.
Застосувати блок успіху
У разі успіху:
Bodyстає блоком[Image],[Audio]або[Video].- Аудіо задає
{{Transcript}}; розбір команд використовує текст підпису, якщо він є, інакше транскрипт. - Підписи зберігаються як
User text:всередині блоку.
Якщо розуміння не вдається або вимкнене, потік відповіді продовжується з оригінальним тілом + вкладеннями.
Огляд конфігурації
tools.media підтримує спільні моделі плюс перевизначення для окремих можливостей:
Ключі верхнього рівня
tools.media.models: список спільних моделей (використовуйтеcapabilitiesдля обмеження).tools.media.image/tools.media.audio/tools.media.video:- типові значення (
prompt,maxChars,maxBytes,timeoutSeconds,language) - перевизначення провайдера (
baseUrl,headers,providerOptions) - аудіопараметри Deepgram через
tools.media.audio.providerOptions.deepgram - керування відлунням аудіотранскрипта (
echoTranscript, типовоfalse;echoFormat) - необов’язковий список
modelsдля окремої можливості (має пріоритет перед спільними моделями) - політика
attachments(mode,maxAttachments,prefer) scope(необов’язкове обмеження за channel/chatType/session key)
- типові значення (
tools.media.concurrency: максимальна кількість одночасних запусків можливостей (типово 2).
{
tools: {
media: {
models: [
/* shared list */
],
image: {
/* optional overrides */
},
audio: {
/* optional overrides */
echoTranscript: true,
echoFormat: '📝 "{transcript}"',
},
video: {
/* optional overrides */
},
},
},
}
Записи моделей
Кожен запис models[] може бути провайдером або CLI:
Запис провайдера
{
type: "provider", // default if omitted
provider: "openai",
model: "gpt-5.5",
prompt: "Describe the image in <= 500 chars.",
maxChars: 500,
maxBytes: 10485760,
timeoutSeconds: 60,
capabilities: ["image"], // optional, used for multi-modal entries
profile: "vision-profile",
preferredProfile: "vision-fallback",
}
Запис CLI
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
maxChars: 500,
maxBytes: 52428800,
timeoutSeconds: 120,
capabilities: ["video", "image"],
}
Шаблони CLI також можуть використовувати:
{{MediaDir}}(каталог, що містить медіафайл){{OutputDir}}(тимчасовий каталог, створений для цього запуску){{OutputBase}}(базовий шлях тимчасового файлу, без розширення)
Типові значення та обмеження
Рекомендовані типові значення:
maxChars: 500 для зображення/відео (коротко, зручно для команд)maxChars: не задано для аудіо (повний транскрипт, якщо ви не встановите ліміт)maxBytes:- зображення: 10MB
- аудіо: 20MB
- відео: 50MB
Правила
- Якщо медіа перевищує
maxBytes, цю модель пропускають і пробують наступну модель. - Аудіофайли менші за 1024 байти вважаються порожніми/пошкодженими й пропускаються перед транскрибуванням провайдером/CLI; вхідний контекст відповіді отримує детермінований транскрипт-заповнювач, щоб агент знав, що нотатка була замалою.
- Якщо модель повертає більше ніж
maxChars, вивід обрізається. promptтипово є простим "Describe the {media}." плюс настанова щодоmaxChars(лише зображення/відео).- Якщо активна основна модель зображень уже нативно підтримує vision, OpenClaw пропускає підсумковий блок
[Image]і натомість передає оригінальне зображення в модель. - Якщо основна модель Gateway/WebChat є лише текстовою, вкладення зображень зберігаються як винесені refs
media://inbound/*, щоб інструменти зображень/PDF або налаштована модель зображень усе ще могли їх перевірити, а не втратити вкладення. - Явні запити
openclaw infer image describe --model <provider/model>відрізняються: вони запускають цей провайдер/модель із підтримкою зображень напряму, включно з refs Ollama, як-отollama/qwen2.5vl:7b. - Якщо
<capability>.enabled: true, але моделі не налаштовано, OpenClaw пробує активну модель відповіді, коли її провайдер підтримує цю можливість.
Автовиявлення розуміння медіа (типово)
Якщо tools.media.<capability>.enabled не встановлено в false і ви не налаштували моделі, OpenClaw автовиявляє в такому порядку й зупиняється на першому робочому варіанті:
Активна модель відповіді
Активна модель відповіді, коли її провайдер підтримує цю можливість.
agents.defaults.imageModel
Основні/fallback refs agents.defaults.imageModel (лише зображення).
Надавайте перевагу refs provider/model. Голі refs уточнюються з налаштованих записів моделей провайдера з підтримкою зображень лише тоді, коли збіг унікальний.
Локальні CLI (лише аудіо)
Локальні CLI (якщо встановлено):
sherpa-onnx-offline(потребуєSHERPA_ONNX_MODEL_DIRз encoder/decoder/joiner/tokens)whisper-cli(whisper-cpp; використовуєWHISPER_CPP_MODELабо вбудовану tiny-модель)whisper(Python CLI; завантажує моделі автоматично)
Gemini CLI
gemini із використанням read_many_files.
Auth провайдера
- Налаштовані записи
models.providers.*, які підтримують можливість, пробуються перед вбудованим порядком fallback. - Провайдери конфігурації лише для зображень із моделлю, що підтримує зображення, автоматично реєструються для розуміння медіа, навіть якщо вони не є вбудованим Plugin постачальника.
- Розуміння зображень Ollama доступне, коли вибране явно, наприклад через
agents.defaults.imageModelабоopenclaw infer image describe --model ollama/<vision-model>.
Вбудований порядок fallback:
- Аудіо: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- Зображення: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- Відео: Google → Qwen → Moonshot
Щоб вимкнути автовиявлення, задайте:
{
tools: {
media: {
audio: {
enabled: false,
},
},
},
}
Підтримка proxy-середовища (моделі провайдерів)
Коли ввімкнене медіарозуміння аудіо та відео на основі провайдерів, OpenClaw враховує стандартні змінні середовища вихідного proxy для HTTP-викликів провайдера:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Якщо env vars proxy не задані, медіарозуміння використовує прямий вихід. Якщо значення proxy має неправильний формат, OpenClaw записує попередження в журнал і повертається до прямого fetch.
Можливості (необов’язково)
Якщо ви задаєте capabilities, запис запускається лише для цих типів медіа. Для спільних списків OpenClaw може вивести типові значення:
openai,anthropic,minimax: зображенняminimax-portal: зображенняmoonshot: зображення + відеоopenrouter: зображенняgoogle(Gemini API): зображення + аудіо + відеоqwen: зображення + відеоmistral: аудіоzai: зображенняgroq: аудіоxai: аудіоdeepgram: аудіо- Будь-який каталог
models.providers.<id>.models[]із моделлю, що підтримує зображення: зображення
Для записів CLI задавайте capabilities явно, щоб уникнути неочікуваних збігів. Якщо ви пропускаєте capabilities, запис є придатним для списку, в якому він з’являється.
Матриця підтримки провайдерів (інтеграції OpenClaw)
| Можливість | Інтеграція провайдера | Примітки |
|---|---|---|
| Зображення | OpenAI, OpenAI Codex OAuth, Codex app-server, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, провайдери конфігурації | Plugin-и постачальників реєструють підтримку зображень; openai-codex/* використовує OAuth-підключення провайдера; codex/* використовує обмежений turn Codex app-server; MiniMax і MiniMax OAuth обидва використовують MiniMax-VL-01; провайдери конфігурації з підтримкою зображень реєструються автоматично. |
| Аудіо | OpenAI, Groq, xAI, Deepgram, Google, SenseAudio, ElevenLabs, Mistral | Транскрибування провайдером (Whisper/Groq/xAI/Deepgram/Gemini/SenseAudio/Scribe/Voxtral). |
| Відео | Google, Qwen, Moonshot | Розуміння відео провайдером через Plugin-и постачальників; розуміння відео Qwen використовує Standard DashScope endpoints. |
Поради щодо вибору моделі
- Надавайте перевагу найсильнішій доступній моделі останнього покоління для кожної медіаможливості, коли якість і безпека мають значення.
- Для агентів із увімкненими інструментами, які обробляють недовірені вхідні дані, уникайте старіших/слабших медіамоделей.
- Тримайте принаймні один fallback для кожної можливості задля доступності (якісна модель + швидша/дешевша модель).
- CLI fallback-и (
whisper-cli,whisper,gemini) корисні, коли API провайдерів недоступні. - Примітка
parakeet-mlx: з--output-dirOpenClaw читає<output-dir>/<media-basename>.txt, коли формат виводуtxt(або не вказаний); формати неtxtповертаються до stdout.
Політика вкладень
attachments для кожної можливості керує тим, які вкладення обробляються:
mode"first" | "all"Чи обробляти перше вибране вкладення, чи всі вкладення.
maxAttachmentsnumberОбмеження кількості оброблюваних вкладень.
prefer"first" | "last" | "path" | "url"Пріоритет вибору серед кандидатних вкладень.
Коли mode: "all", вихідні дані позначаються [Image 1/2], [Audio 2/2] тощо.
Поведінка витягнення файлових вкладень
- Витягнутий текст файлу обгортається як ненадійний зовнішній вміст, перш ніж його буде додано до медіапромпта.
- Вставлений блок використовує явні маркери меж на кшталт
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>і містить рядок метаданихSource: External. - Цей шлях витягнення вкладень навмисно пропускає довгий банер
SECURITY NOTICE:, щоб не роздувати медіапромпт; маркери меж і метадані все одно залишаються. - Якщо файл не має тексту, який можна витягнути, OpenClaw вставляє
[No extractable text]. - Якщо PDF у цьому шляху переходить до резервного варіанта з відрендереними зображеннями сторінок, медіапромпт зберігає заповнювач
[PDF content rendered to images; images not forwarded to model], оскільки цей крок витягнення вкладень передає текстові блоки, а не відрендерені зображення PDF.
Приклади конфігурації
Спільні моделі + перевизначення
{
tools: {
media: {
models: [
{ provider: "openai", model: "gpt-5.5", capabilities: ["image"] },
{
provider: "google",
model: "gemini-3-flash-preview",
capabilities: ["image", "audio", "video"],
},
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
capabilities: ["image", "video"],
},
],
audio: {
attachments: { mode: "all", maxAttachments: 2 },
},
video: {
maxChars: 500,
},
},
},
}
Лише аудіо + відео
{
tools: {
media: {
audio: {
enabled: true,
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
{
type: "cli",
command: "whisper",
args: ["--model", "base", "{{MediaPath}}"],
},
],
},
video: {
enabled: true,
maxChars: 500,
models: [
{ provider: "google", model: "gemini-3-flash-preview" },
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
},
],
},
},
},
}
Лише зображення
{
tools: {
media: {
image: {
enabled: true,
maxBytes: 10485760,
maxChars: 500,
models: [
{ provider: "openai", model: "gpt-5.5" },
{ provider: "anthropic", model: "claude-opus-4-6" },
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
},
],
},
},
},
}
Один мультимодальний запис
{
tools: {
media: {
image: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
audio: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
video: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
},
},
}
Вивід стану
Коли працює розуміння медіа, /status містить короткий рядок підсумку:
📎 Media: image ok (openai/gpt-5.4) · audio skipped (maxBytes)
Це показує результати для кожної можливості та вибраного провайдера/модель, коли це застосовно.
Примітки
- Розуміння виконується за принципом найкращих зусиль. Помилки не блокують відповіді.
- Вкладення все одно передаються моделям, навіть коли розуміння вимкнено.
- Використовуйте
scope, щоб обмежити, де виконується розуміння (наприклад, лише в особистих повідомленнях).