Nodes and media
Comprensión de medios
OpenClaw puede resumir medios entrantes (imagen/audio/video) antes de que se ejecute la canalización de respuesta. Detecta automáticamente cuándo hay herramientas locales o claves de proveedor disponibles, y se puede desactivar o personalizar. Si la comprensión está desactivada, los modelos siguen recibiendo los archivos/URLs originales como siempre.
El comportamiento de medios específico de cada proveedor lo registran los plugins de proveedor, mientras que el núcleo de OpenClaw posee la configuración compartida tools.media, el orden de reserva y la integración con la canalización de respuesta.
Objetivos
- Opcional: predigerir medios entrantes en texto breve para un enrutamiento más rápido y un mejor análisis de comandos.
- Preservar la entrega de medios originales al modelo (siempre).
- Admitir API de proveedor y reservas de CLI.
- Permitir varios modelos con reserva ordenada (error/tamaño/tiempo de espera).
Comportamiento general
Recopilar adjuntos
Recopilar adjuntos entrantes (MediaPaths, MediaUrls, MediaTypes).
Seleccionar por capacidad
Para cada capacidad habilitada (imagen/audio/video), seleccionar adjuntos según la política (predeterminado: primero).
Elegir modelo
Elegir la primera entrada de modelo elegible (tamaño + capacidad + autenticación).
Reserva ante fallo
Si un modelo falla o el medio es demasiado grande, pasar a la siguiente entrada como reserva.
Aplicar bloque de éxito
En caso de éxito:
Bodyse convierte en bloque[Image],[Audio]o[Video].- El audio establece
{{Transcript}}; el análisis de comandos usa el texto del pie de foto cuando está presente; de lo contrario, la transcripción. - Los pies de foto se preservan como
User text:dentro del bloque.
Si la comprensión falla o está desactivada, el flujo de respuesta continúa con el cuerpo original + adjuntos.
Resumen de configuración
tools.media admite modelos compartidos más sobrescrituras por capacidad:
Claves de nivel superior
tools.media.models: lista de modelos compartida (usacapabilitiespara restringir).tools.media.image/tools.media.audio/tools.media.video:- valores predeterminados (
prompt,maxChars,maxBytes,timeoutSeconds,language) - sobrescrituras de proveedor (
baseUrl,headers,providerOptions) - opciones de audio de Deepgram mediante
tools.media.audio.providerOptions.deepgram - controles de eco de transcripción de audio (
echoTranscript, predeterminadofalse;echoFormat) - lista
modelspor capacidad opcional (preferida antes que los modelos compartidos) - política de
attachments(mode,maxAttachments,prefer) scope(restricción opcional por canal/chatType/clave de sesión)
- valores predeterminados (
tools.media.concurrency: máximo de ejecuciones de capacidad simultáneas (predeterminado 2).
{
tools: {
media: {
models: [
/* shared list */
],
image: {
/* optional overrides */
},
audio: {
/* optional overrides */
echoTranscript: true,
echoFormat: '📝 "{transcript}"',
},
video: {
/* optional overrides */
},
},
},
}
Entradas de modelo
Cada entrada models[] puede ser proveedor o CLI:
Entrada de proveedor
{
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",
}
Entrada de 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"],
}
Las plantillas de CLI también pueden usar:
{{MediaDir}}(directorio que contiene el archivo multimedia){{OutputDir}}(directorio temporal creado para esta ejecución){{OutputBase}}(ruta base del archivo temporal, sin extensión)
Valores predeterminados y límites
Valores predeterminados recomendados:
maxChars: 500 para imagen/video (breve, apto para comandos)maxChars: sin establecer para audio (transcripción completa salvo que establezcas un límite)maxBytes:- imagen: 10MB
- audio: 20MB
- video: 50MB
Reglas
- Si el medio supera
maxBytes, ese modelo se omite y se prueba el siguiente modelo. - Los archivos de audio menores de 1024 bytes se tratan como vacíos/corruptos y se omiten antes de la transcripción por proveedor/CLI; el contexto de respuesta entrante recibe una transcripción de marcador determinista para que el agente sepa que la nota era demasiado pequeña.
- Si el modelo devuelve más de
maxChars, la salida se recorta. promptusa de forma predeterminada un simple "Describe the {media}." más la guía demaxChars(solo imagen/video).- Si el modelo de imagen primario activo ya admite visión de forma nativa, OpenClaw omite el bloque de resumen
[Image]y pasa la imagen original al modelo en su lugar. - Si un modelo primario de Gateway/WebChat es solo texto, los adjuntos de imagen se preservan como referencias descargadas
media://inbound/*para que las herramientas de imagen/PDF o el modelo de imagen configurado aún puedan inspeccionarlos en lugar de perder el adjunto. - Las solicitudes explícitas
openclaw infer image describe --model <provider/model>son diferentes: ejecutan directamente ese proveedor/modelo con capacidad de imagen, incluidas referencias de Ollama comoollama/qwen2.5vl:7b. - Si
<capability>.enabled: truepero no hay modelos configurados, OpenClaw prueba el modelo de respuesta activo cuando su proveedor admite la capacidad.
Detección automática de comprensión de medios (predeterminado)
Si tools.media.<capability>.enabled no está establecido en false y no has configurado modelos, OpenClaw detecta automáticamente en este orden y se detiene en la primera opción funcional:
Modelo de respuesta activo
Modelo de respuesta activo cuando su proveedor admite la capacidad.
agents.defaults.imageModel
Referencias primarias/de reserva de agents.defaults.imageModel (solo imagen).
Prefiere referencias provider/model. Las referencias simples se califican a partir de entradas de modelo de proveedor configuradas con capacidad de imagen solo cuando la coincidencia es única.
CLI locales (solo audio)
CLI locales (si están instaladas):
sherpa-onnx-offline(requiereSHERPA_ONNX_MODEL_DIRcon encoder/decoder/joiner/tokens)whisper-cli(whisper-cpp; usaWHISPER_CPP_MODELo el modelo tiny incluido)whisper(CLI de Python; descarga modelos automáticamente)
CLI de Gemini
gemini con read_many_files.
Autenticación de proveedor
- Las entradas
models.providers.*configuradas que admiten la capacidad se prueban antes del orden de reserva incluido. - Los proveedores de configuración solo de imagen con un modelo con capacidad de imagen se registran automáticamente para comprensión de medios incluso cuando no son un plugin de proveedor incluido.
- La comprensión de imágenes de Ollama está disponible cuando se selecciona explícitamente, por ejemplo mediante
agents.defaults.imageModeluopenclaw infer image describe --model ollama/<vision-model>.
Orden de reserva incluido:
- Audio: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- Imagen: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- Video: Google → Qwen → Moonshot
Para desactivar la detección automática, establece:
{
tools: {
media: {
audio: {
enabled: false,
},
},
},
}
Compatibilidad con entorno proxy (modelos de proveedor)
Cuando la comprensión de medios por proveedor de audio y video está habilitada, OpenClaw respeta las variables de entorno proxy de salida estándar para llamadas HTTP de proveedor:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Si no se establecen variables de entorno proxy, la comprensión de medios usa salida directa. Si el valor del proxy está mal formado, OpenClaw registra una advertencia y recurre a la obtención directa.
Capacidades (opcional)
Si estableces capabilities, la entrada solo se ejecuta para esos tipos de medios. Para listas compartidas, OpenClaw puede inferir valores predeterminados:
openai,anthropic,minimax: imagenminimax-portal: imagenmoonshot: imagen + videoopenrouter: imagengoogle(API de Gemini): imagen + audio + videoqwen: imagen + videomistral: audiozai: imagengroq: audioxai: audiodeepgram: audio- Cualquier catálogo
models.providers.<id>.models[]con un modelo con capacidad de imagen: imagen
Para entradas de CLI, establece capabilities explícitamente para evitar coincidencias inesperadas. Si omites capabilities, la entrada es elegible para la lista en la que aparece.
Matriz de soporte de proveedores (integraciones de OpenClaw)
| Capacidad | Integración de proveedor | Notas |
|---|---|---|
| Imagen | OpenAI, OpenAI Codex OAuth, servidor de aplicación Codex, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, proveedores de configuración | Los plugins de proveedor registran soporte de imagen; openai-codex/* usa la infraestructura del proveedor OAuth; codex/* usa un turno delimitado del servidor de aplicación Codex; MiniMax y MiniMax OAuth usan MiniMax-VL-01; los proveedores de configuración con capacidad de imagen se registran automáticamente. |
| Audio | OpenAI, Groq, xAI, Deepgram, Google, SenseAudio, ElevenLabs, Mistral | Transcripción de proveedor (Whisper/Groq/xAI/Deepgram/Gemini/SenseAudio/Scribe/Voxtral). |
| Video | Google, Qwen, Moonshot | Comprensión de video por proveedor mediante plugins de proveedor; la comprensión de video de Qwen usa los endpoints Standard DashScope. |
Guía de selección de modelos
- Prefiere el modelo de generación más reciente y potente disponible para cada capacidad de medios cuando importen la calidad y la seguridad.
- Para agentes con herramientas habilitadas que manejan entradas no confiables, evita modelos de medios más antiguos o más débiles.
- Mantén al menos una reserva por capacidad para disponibilidad (modelo de calidad + modelo más rápido/barato).
- Las reservas de CLI (
whisper-cli,whisper,gemini) son útiles cuando las API de proveedor no están disponibles. - Nota sobre
parakeet-mlx: con--output-dir, OpenClaw lee<output-dir>/<media-basename>.txtcuando el formato de salida estxt(o no se especifica); los formatos que no sontxtrecurren a stdout.
Política de adjuntos
attachments por capacidad controla qué adjuntos se procesan:
mode"first" | "all"Si se debe procesar el primer adjunto seleccionado o todos ellos.
maxAttachmentsnumberLimita la cantidad procesada.
prefer"first" | "last" | "path" | "url"Preferencia de selección entre los adjuntos candidatos.
Cuando mode: "all", las salidas se etiquetan como [Image 1/2], [Audio 2/2], etc.
File-attachment extraction behavior
- El texto extraído del archivo se encapsula como contenido externo no confiable antes de añadirse al prompt de medios.
- El bloque inyectado usa marcadores de límite explícitos como
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>e incluye una línea de metadatosSource: External. - Esta ruta de extracción de adjuntos omite intencionalmente el banner largo
SECURITY NOTICE:para evitar aumentar demasiado el prompt de medios; los marcadores de límite y los metadatos siguen presentes. - Si un archivo no tiene texto extraíble, OpenClaw inyecta
[No extractable text]. - Si un PDF recurre a imágenes de página renderizadas en esta ruta, el prompt de medios conserva el marcador de posición
[PDF content rendered to images; images not forwarded to model]porque este paso de extracción de adjuntos reenvía bloques de texto, no las imágenes renderizadas del PDF.
Ejemplos de configuración
Shared models + overrides
{
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,
},
},
},
}
Audio + video only
{
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.",
],
},
],
},
},
},
}
Image-only
{
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.",
],
},
],
},
},
},
}
Multi-modal single entry
{
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"],
},
],
},
},
},
}
Salida de estado
Cuando se ejecuta la comprensión de medios, /status incluye una breve línea de resumen:
📎 Media: image ok (openai/gpt-5.4) · audio skipped (maxBytes)
Esto muestra los resultados por capacidad y el proveedor/modelo elegido cuando corresponde.
Notas
- La comprensión es de mejor esfuerzo. Los errores no bloquean las respuestas.
- Los adjuntos se siguen pasando a los modelos incluso cuando la comprensión está desactivada.
- Usa
scopepara limitar dónde se ejecuta la comprensión (por ejemplo, solo mensajes directos).