Comprensión de medios (entrantes) — 2026-01-17
OpenClaw puede resumir medios entrantes (imagen/audio/video) antes de que se ejecute el pipeline de respuesta. Detecta automáticamente cuando 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 de forma habitual.
Objetivos
- Opcional: pre-digerir medios entrantes en texto corto para enrutamiento más rápido + mejor análisis de comandos.
- Preservar la entrega original de medios al modelo (siempre).
- Soportar APIs de proveedores y respaldos por CLI.
- Permitir múltiples modelos con respaldo ordenado (error/tamaño/timeout).
Comportamiento general
- Recopilar adjuntos entrantes (
MediaPaths,MediaUrls,MediaTypes). - Para cada capacidad habilitada (imagen/audio/video), seleccionar adjuntos según la política (por defecto: primero).
- Elegir la primera entrada de modelo elegible (tamaño + capacidad + auth).
- Si un modelo falla o el medio es demasiado grande, pasar a la siguiente entrada.
- En caso de éxito:
Bodyse convierte en un bloque[Image],[Audio]o[Video].- Audio establece
{{Transcript}}; el análisis de comandos usa el texto del subtítulo cuando existe, en caso contrario la transcripción. - Los subtítulos 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 + adjuntos originales.
Resumen de configuración
tools.media soporta modelos compartidos más sobreescrituras por capacidad:
tools.media.models: lista de modelos compartidos (usarcapabilitiespara filtrar).tools.media.image/tools.media.audio/tools.media.video:- valores por defecto (
prompt,maxChars,maxBytes,timeoutSeconds,language) - sobreescrituras de proveedor (
baseUrl,headers,providerOptions) - opciones de audio Deepgram vía
tools.media.audio.providerOptions.deepgram - controles de eco de transcripción de audio (
echoTranscript, por defectofalse;echoFormat) - lista opcional de
modelspor capacidad (se prefiere antes que los modelos compartidos) - política de
attachments(mode,maxAttachments,prefer) scope(filtrado opcional por canal/chatType/clave de sesión)
- valores por defecto (
tools.media.concurrency: ejecuciones concurrentes máximas por capacidad (por defecto 2).
{
tools: {
media: {
models: [
/* lista compartida */
],
image: {
/* sobreescrituras opcionales */
},
audio: {
/* sobreescrituras opcionales */
echoTranscript: true,
echoFormat: '📝 "{transcript}"',
},
video: {
/* sobreescrituras opcionales */
},
},
},
}
Entradas de modelo
Cada entrada de models[] puede ser proveedor o CLI:
{
type: "provider", // por defecto si se omite
provider: "openai",
model: "gpt-5.2",
prompt: "Describe the image in <= 500 chars.",
maxChars: 500,
maxBytes: 10485760,
timeoutSeconds: 60,
capabilities: ["image"], // opcional, usado para entradas multimodales
profile: "vision-profile",
preferredProfile: "vision-fallback",
}
{
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 CLI también pueden usar:
{{MediaDir}}(directorio que contiene el archivo de medios){{OutputDir}}(directorio temporal creado para esta ejecución){{OutputBase}}(ruta base del archivo temporal, sin extensión)
Valores por defecto y límites
Valores recomendados:
maxChars: 500 para imagen/video (corto, compatible con comandos)maxChars: sin límite para audio (transcripción completa a menos que establezcas un límite)maxBytes:- imagen: 10MB
- audio: 20MB
- video: 50MB
Reglas:
- Si el medio excede
maxBytes, ese modelo se omite y se prueba el siguiente modelo. - Los archivos de audio menores a 1024 bytes se tratan como vacíos/corruptos y se omiten antes de la transcripción por proveedor/CLI.
- Si el modelo devuelve más de
maxChars, la salida se recorta. promptpor defecto es un simple “Describe the {media}.” más la guía demaxChars(solo imagen/video).- Si
<capability>.enabled: truepero no hay modelos configurados, OpenClaw prueba el modelo de respuesta activo cuando su proveedor soporta la capacidad.
Detección automática de comprensión de medios (por defecto)
Si tools.media.<capability>.enabled no está en false y no has
configurado modelos, OpenClaw detecta automáticamente en este orden y se detiene en la primera
opción funcional:
- CLIs locales (solo audio; si están instalados)
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)
- Gemini CLI (
gemini) usandoread_many_files - Claves de proveedor
- Audio: OpenAI → Groq → Deepgram → Google
- Imagen: OpenAI → Anthropic → Google → MiniMax
- Video: Google
Para desactivar la detección automática, configura:
{
tools: {
media: {
audio: {
enabled: false,
},
},
},
}
Nota: La detección de binarios es best-effort en macOS/Linux/Windows; asegúrate de que el CLI esté en el PATH (expandimos ~), o configura un modelo CLI explícito con la ruta completa del comando.
Soporte de proxy (modelos de proveedor)
Cuando la comprensión de medios de audio y video basada en proveedores está habilitada, OpenClaw respeta las variables de entorno estándar de proxy para llamadas HTTP a proveedores:
HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
Si no hay variables de proxy configuradas, la comprensión de medios usa conexión directa. Si el valor del proxy es incorrecto, OpenClaw registra una advertencia y recurre a la conexión directa.
Capacidades (opcional)
Si configuras capabilities, la entrada solo se ejecuta para esos tipos de medios. Para listas
compartidas, OpenClaw puede inferir valores por defecto:
openai,anthropic,minimax: imagegoogle(API Gemini): image + audio + videogroq: audiodeepgram: audio
Para entradas CLI, configura 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 / Anthropic / Google / otros vía pi-ai | Cualquier modelo con capacidad de imagen del registro funciona. |
| Audio | OpenAI, Groq, Deepgram, Google, Mistral | Transcripción por proveedor (Whisper/Deepgram/Gemini/Voxtral). |
| Video | Google (API Gemini) | Comprensión de video por proveedor. |
Guía de selección de modelos
- Prefiere el modelo más potente de última generación disponible para cada capacidad de medios cuando la calidad y seguridad importan.
- Para agentes con herramientas que manejan entradas no confiables, evita modelos de medios antiguos/débiles.
- Mantén al menos un respaldo por capacidad para disponibilidad (modelo de calidad + modelo más rápido/barato).
- Los respaldos por CLI (
whisper-cli,whisper,gemini) son útiles cuando las APIs de proveedores 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); formatos no-txtrecurren a stdout.
Política de adjuntos
attachments por capacidad controla qué adjuntos se procesan:
mode:first(por defecto) oallmaxAttachments: límite del número procesado (por defecto 1)prefer:first,last,path,url
Cuando mode: "all", las salidas se etiquetan como [Image 1/2], [Audio 2/2], etc.
Ejemplos de configuración
1) Lista de modelos compartidos + sobreescrituras
{
tools: {
media: {
models: [
{ provider: "openai", model: "gpt-5.2", 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,
},
},
},
}
2) Solo audio + video (imagen desactivada)
{
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.",
],
},
],
},
},
},
}
3) Comprensión de imagen opcional
{
tools: {
media: {
image: {
enabled: true,
maxBytes: 10485760,
maxChars: 500,
models: [
{ provider: "openai", model: "gpt-5.2" },
{ 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.",
],
},
],
},
},
},
}
4) Entrada multimodal única (capacidades explícitas)
{
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 la comprensión de medios se ejecuta, /status incluye una línea de resumen:
📎 Media: image ok (openai/gpt-5.2) · audio skipped (maxBytes)
Esto muestra resultados por capacidad y el proveedor/modelo elegido cuando corresponda.
Notas
- La comprensión es best-effort. 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 (p. ej. solo DMs).