Nodes and media
Mediabegrip
OpenClaw kan binnenkomende media samenvatten (afbeelding/audio/video) voordat de antwoordpipeline wordt uitgevoerd. Het detecteert automatisch wanneer lokale tools of providersleutels beschikbaar zijn, en kan worden uitgeschakeld of aangepast. Als begrip uitstaat, ontvangen modellen nog steeds zoals gebruikelijk de oorspronkelijke bestanden/URL’s.
Leveranciersspecifiek mediagedrag wordt geregistreerd door leverancierplugins, terwijl OpenClaw core eigenaar is van de gedeelde tools.media-configuratie, fallbackvolgorde en integratie met de antwoordpipeline.
Doelen
- Optioneel: verwerk binnenkomende media vooraf tot korte tekst voor snellere routering + betere opdrachtanalyse.
- Behoud levering van oorspronkelijke media aan het model (altijd).
- Ondersteun provider-API’s en CLI-fallbacks.
- Sta meerdere modellen toe met geordende fallback (fout/grootte/time-out).
Gedrag op hoofdlijnen
Bijlagen verzamelen
Verzamel binnenkomende bijlagen (MediaPaths, MediaUrls, MediaTypes).
Per capaciteit selecteren
Selecteer voor elke ingeschakelde capaciteit (afbeelding/audio/video) bijlagen volgens beleid (standaard: eerste).
Model kiezen
Kies de eerste geschikte modelvermelding (grootte + capaciteit + auth).
Fallback bij mislukking
Als een model mislukt of de media te groot zijn, val terug op de volgende vermelding.
Succesblok toepassen
Bij succes:
Bodywordt een[Image]-,[Audio]- of[Video]-blok.- Audio stelt
{{Transcript}}in; opdrachtanalyse gebruikt bijschrijfttekst wanneer aanwezig, anders het transcript. - Bijschriften blijven behouden als
User text:in het blok.
Als begrip mislukt of is uitgeschakeld, gaat de antwoordflow door met de oorspronkelijke body + bijlagen.
Configuratieoverzicht
tools.media ondersteunt gedeelde modellen plus overrides per capaciteit:
Sleutels op het hoogste niveau
tools.media.models: gedeelde modellenlijst (gebruikcapabilitiesom te beperken).tools.media.image/tools.media.audio/tools.media.video:- standaardwaarden (
prompt,maxChars,maxBytes,timeoutSeconds,language) - provideroverrides (
baseUrl,headers,providerOptions) - Deepgram-audio-opties via
tools.media.audio.providerOptions.deepgram - echo-instellingen voor audiotranscript (
echoTranscript, standaardfalse;echoFormat) - optionele per-capaciteit
models-lijst (heeft voorkeur boven gedeelde modellen) attachments-beleid (mode,maxAttachments,prefer)scope(optionele gating op channel/chatType/sessiesleutel)
- standaardwaarden (
tools.media.concurrency: maximaal gelijktijdige capaciteitsruns (standaard 2).
{ tools: { media: { models: [ /* shared list */ ], image: { /* optional overrides */ }, audio: { /* optional overrides */ echoTranscript: true, echoFormat: '📝 "{transcript}"', }, video: { /* optional overrides */ }, }, },}Modelvermeldingen
Elke models[]-vermelding kan provider of CLI zijn:
Providervermelding
{ 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-vermelding
{ 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-sjablonen kunnen ook gebruiken:
{{MediaDir}}(map die het mediabestand bevat){{OutputDir}}(scratchmap gemaakt voor deze run){{OutputBase}}(basispad van scratchbestand, zonder extensie)
Standaardwaarden en limieten
Aanbevolen standaardwaarden:
maxChars: 500 voor afbeelding/video (kort, opdrachtvriendelijk)maxChars: niet ingesteld voor audio (volledig transcript tenzij je een limiet instelt)maxBytes:- afbeelding: 10MB
- audio: 20MB
- video: 50MB
Regels
- Als media
maxBytesoverschrijden, wordt dat model overgeslagen en wordt het volgende model geprobeerd. - Audiobestanden kleiner dan 1024 bytes worden behandeld als leeg/beschadigd en overgeslagen vóór provider-/CLI-transcriptie; de binnenkomende antwoordcontext ontvangt een deterministisch placeholdertranscript zodat de agent weet dat de notitie te klein was.
- Als het model meer dan
maxCharsretourneert, wordt de uitvoer ingekort. promptgebruikt standaard eenvoudige "Describe the {media}." plus demaxChars-richtlijn (alleen afbeelding/video).- Als het actieve primaire afbeeldingsmodel al native vision ondersteunt, slaat OpenClaw het
[Image]-samenvattingsblok over en geeft het de oorspronkelijke afbeelding in plaats daarvan door aan het model. - Als een Gateway-/WebChat-primair model alleen tekst ondersteunt, blijven afbeeldingsbijlagen behouden als offloaded
media://inbound/*-refs zodat de afbeelding-/PDF-tools of het geconfigureerde afbeeldingsmodel ze nog steeds kunnen inspecteren in plaats van de bijlage kwijt te raken. - Expliciete
openclaw infer image describe --model <provider/model>-verzoeken zijn anders: ze voeren dat afbeeldingscapabele provider/model direct uit, inclusief Ollama-refs zoalsollama/qwen2.5vl:7b. - Als
<capability>.enabled: truemaar er geen modellen zijn geconfigureerd, probeert OpenClaw het actieve antwoordmodel wanneer de provider de capaciteit ondersteunt.
Mediabegrip automatisch detecteren (standaard)
Als tools.media.<capability>.enabled niet is ingesteld op false en je geen modellen hebt geconfigureerd, detecteert OpenClaw automatisch in deze volgorde en stopt bij de eerste werkende optie:
Actief antwoordmodel
Actief antwoordmodel wanneer de provider de capaciteit ondersteunt.
agents.defaults.imageModel
agents.defaults.imageModel primaire/fallback-refs (alleen afbeelding).
Geef de voorkeur aan provider/model-refs. Kale refs worden alleen gekwalificeerd vanuit geconfigureerde afbeeldingscapabele providermodelvermeldingen wanneer de match uniek is.
Lokale CLI’s (alleen audio)
Lokale CLI’s (indien geïnstalleerd):
sherpa-onnx-offline(vereistSHERPA_ONNX_MODEL_DIRmet encoder/decoder/joiner/tokens)whisper-cli(whisper-cpp; gebruiktWHISPER_CPP_MODELof het gebundelde tiny-model)whisper(Python-CLI; downloadt modellen automatisch)
Gemini CLI
gemini met read_many_files.
Providerauth
- Geconfigureerde
models.providers.*-vermeldingen die de capaciteit ondersteunen, worden geprobeerd vóór de gebundelde fallbackvolgorde. - Providers met alleen afbeeldingsconfiguratie en een afbeeldingscapabel model registreren zich automatisch voor mediabegrip, zelfs wanneer ze geen gebundelde leverancierplugin zijn.
- Ollama-afbeeldingsbegrip is beschikbaar wanneer expliciet geselecteerd, bijvoorbeeld via
agents.defaults.imageModelofopenclaw infer image describe --model ollama/<vision-model>.
Gebundelde fallbackvolgorde:
- Audio: OpenAI → Groq → xAI → Deepgram → OpenRouter → Google → SenseAudio → ElevenLabs → Mistral
- Afbeelding: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- Video: Google → Qwen → Moonshot
Om automatische detectie uit te schakelen, stel in:
{ tools: { media: { audio: { enabled: false, }, }, },}Ondersteuning voor proxyomgevingen (providermodellen)
Wanneer providergebaseerd audio- en videomediabegrip is ingeschakeld, respecteert OpenClaw standaard uitgaande proxyomgevingsvariabelen voor provider-HTTP-aanroepen:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
Als er geen proxy-env-vars zijn ingesteld, gebruikt mediabegrip directe egress. Als de proxywaarde ongeldig is, logt OpenClaw een waarschuwing en valt het terug op direct ophalen.
Capaciteiten (optioneel)
Als je capabilities instelt, draait de vermelding alleen voor die mediatypen. Voor gedeelde lijsten kan OpenClaw standaardwaarden afleiden:
openai,anthropic,minimax: afbeeldingminimax-portal: afbeeldingmoonshot: afbeelding + videoopenrouter: afbeelding + audiogoogle(Gemini API): afbeelding + audio + videoqwen: afbeelding + videomistral: audiozai: afbeeldinggroq: audioxai: audiodeepgram: audio- Elke
models.providers.<id>.models[]-catalogus met een afbeeldingscapabel model: afbeelding
Voor CLI-vermeldingen: stel capabilities expliciet in om verrassende matches te voorkomen. Als je capabilities weglaat, komt de vermelding in aanmerking voor de lijst waarin deze staat.
Providerondersteuningsmatrix (OpenClaw-integraties)
| Capaciteit | Providerintegratie | Notities |
|---|---|---|
| Afbeelding | OpenAI, OpenAI Codex OAuth, Codex app-server, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, config providers | Leverancierplugins registreren afbeeldingsondersteuning; openai-codex/* gebruikt OAuth-providerplumbing; codex/* gebruikt een begrensde Codex app-server-turn; MiniMax en MiniMax OAuth gebruiken allebei MiniMax-VL-01; afbeeldingscapabele config providers registreren zich automatisch. |
| Audio | OpenAI, Groq, xAI, Deepgram, OpenRouter, Google, SenseAudio, ElevenLabs, Mistral | Providertranscriptie (Whisper/Groq/xAI/Deepgram/OpenRouter STT/Gemini/SenseAudio/Scribe/Voxtral). |
| Video | Google, Qwen, Moonshot | Providervideobegrip via leverancierplugins; Qwen-videobegrip gebruikt de Standard DashScope-endpoints. |
Richtlijnen voor modelselectie
- Geef de voorkeur aan het sterkste beschikbare nieuwste-generatiemodel voor elke mediacapaciteit wanneer kwaliteit en veiligheid belangrijk zijn.
- Vermijd oudere/zwakkere mediamodellen voor tool-enabled agents die onvertrouwde invoer verwerken.
- Houd ten minste één fallback per capaciteit voor beschikbaarheid (kwaliteitsmodel + sneller/goedkoper model).
- CLI-fallbacks (
whisper-cli,whisper,gemini) zijn nuttig wanneer provider-API’s niet beschikbaar zijn. parakeet-mlx-notitie: met--output-dirleest OpenClaw<output-dir>/<media-basename>.txtwanneer de uitvoerindelingtxtis (of niet is opgegeven); niet-txt-indelingen vallen terug op stdout.
Bijlagebeleid
Per-capaciteit attachments bepaalt welke bijlagen worden verwerkt:
mode"first" | "all"default: firstOf de eerste geselecteerde bijlage of alle geselecteerde bijlagen moeten worden verwerkt.
maxAttachmentsnumberdefault: 1Beperk het aantal dat wordt verwerkt.
prefer"first" | "last" | "path" | "url"Selectievoorkeur tussen kandidaatbijlagen.
Wanneer mode: "all" is, krijgen uitvoerresultaten labels zoals [Image 1/2], [Audio 2/2], enzovoort.
File-attachment extraction behavior
- Geëxtraheerde bestandstekst wordt verpakt als niet-vertrouwde externe inhoud voordat deze aan de mediaprompt wordt toegevoegd.
- Het geïnjecteerde blok gebruikt expliciete grensmarkeringen zoals
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>en bevat een metadataregelSource: External. - Dit pad voor bijlage-extractie laat bewust de lange banner
SECURITY NOTICE:weg om te voorkomen dat de mediaprompt opzwelt; de grensmarkeringen en metadata blijven wel behouden. - Als een bestand geen extraheerbare tekst heeft, injecteert OpenClaw
[No extractable text]. - Als een PDF in dit pad terugvalt op gerenderde pagina-afbeeldingen, behoudt de mediaprompt de placeholder
[PDF content rendered to images; images not forwarded to model], omdat deze stap voor bijlage-extractie tekstblokken doorstuurt, niet de gerenderde PDF-afbeeldingen.
Configuratievoorbeelden
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"], }, ], }, }, },}Statusuitvoer
Wanneer mediabegrip wordt uitgevoerd, bevat /status een korte samenvattingsregel:
📎 Media: image ok (openai/gpt-5.4) · audio skipped (maxBytes)Dit toont resultaten per capability en, waar van toepassing, de gekozen provider/het gekozen model.
Opmerkingen
- Begrip is best-effort. Fouten blokkeren antwoorden niet.
- Bijlagen worden nog steeds aan modellen doorgegeven, zelfs wanneer begrip is uitgeschakeld.
- Gebruik
scopeom te beperken waar begrip wordt uitgevoerd (bijvoorbeeld alleen DM's).