Nodes and media
मीडिया की समझ
OpenClaw उत्तर पाइपलाइन चलने से पहले इनबाउंड मीडिया का सारांश (छवि/ऑडियो/वीडियो) बना सकता है। यह अपने-आप पता लगाता है कि स्थानीय टूल या प्रदाता कुंजियां उपलब्ध हैं या नहीं, और इसे अक्षम या अनुकूलित किया जा सकता है। यदि समझना बंद है, तो मॉडल फिर भी हमेशा की तरह मूल फाइलें/URL प्राप्त करते हैं।
विक्रेता-विशिष्ट मीडिया व्यवहार विक्रेता plugins द्वारा पंजीकृत किया जाता है, जबकि OpenClaw core साझा tools.media कॉन्फिग, fallback क्रम, और उत्तर-पाइपलाइन एकीकरण का स्वामी है।
लक्ष्य
- वैकल्पिक: तेज़ routing + बेहतर command parsing के लिए इनबाउंड मीडिया को छोटे पाठ में पहले से digest करना।
- मॉडल तक मूल मीडिया डिलीवरी सुरक्षित रखें (हमेशा)।
- प्रदाता APIs और CLI fallbacks का समर्थन करें।
- क्रमबद्ध fallback (त्रुटि/आकार/timeout) के साथ कई मॉडलों की अनुमति दें।
उच्च-स्तरीय व्यवहार
अटैचमेंट इकट्ठा करें
इनबाउंड अटैचमेंट (MediaPaths, MediaUrls, MediaTypes) इकट्ठा करें।
प्रति-क्षमता चुनें
हर सक्षम क्षमता (छवि/ऑडियो/वीडियो) के लिए, नीति के अनुसार अटैचमेंट चुनें (डिफॉल्ट: पहला)।
मॉडल चुनें
पहला योग्य मॉडल entry चुनें (आकार + क्षमता + auth)।
विफलता पर fallback
यदि कोई मॉडल विफल होता है या मीडिया बहुत बड़ा है, तो अगली entry पर fallback करें।
सफलता ब्लॉक लागू करें
सफलता पर:
Body[Image],[Audio], या[Video]block बन जाता है।- ऑडियो
{{Transcript}}सेट करता है; command parsing caption text मौजूद होने पर उसका उपयोग करती है, अन्यथा transcript का। - captions को block के अंदर
User text:के रूप में सुरक्षित रखा जाता है।
यदि समझना विफल होता है या अक्षम है, तो उत्तर flow जारी रहता है मूल body + attachments के साथ।
कॉन्फिग overview
tools.media साझा models और प्रति-क्षमता overrides का समर्थन करता है:
शीर्ष-स्तरीय keys
tools.media.models: साझा model list (capabilitiesका उपयोग gate करने के लिए करें)।tools.media.image/tools.media.audio/tools.media.video:- डिफॉल्ट (
prompt,maxChars,maxBytes,timeoutSeconds,language) - provider overrides (
baseUrl,headers,providerOptions) tools.media.audio.providerOptions.deepgramके जरिए Deepgram audio options- audio transcript echo controls (
echoTranscript, डिफॉल्टfalse;echoFormat) - वैकल्पिक प्रति-क्षमता
modelslist (साझा models से पहले पसंदीदा) attachmentsनीति (mode,maxAttachments,prefer)scope(channel/chatType/session key द्वारा वैकल्पिक gating)
- डिफॉल्ट (
tools.media.concurrency: अधिकतम concurrent capability runs (डिफॉल्ट 2)।
{ tools: { media: { models: [ /* shared list */ ], image: { /* optional overrides */ }, audio: { /* optional overrides */ echoTranscript: true, echoFormat: '📝 "{transcript}"', }, video: { /* optional overrides */ }, }, },}मॉडल entries
हर models[] entry provider या CLI हो सकती है:
Provider entry
{ 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 entry
{ 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 templates इनका भी उपयोग कर सकते हैं:
{{MediaDir}}(media file वाली directory){{OutputDir}}(इस run के लिए बनाई गई scratch dir){{OutputBase}}(scratch file base path, extension नहीं)
Provider credentials (apiKey)
Provider media understanding सामान्य model calls जैसी ही provider auth resolution का उपयोग करता है: auth profiles, environment variables, फिर models.providers.<providerId>.apiKey।
tools.media.*.models[] entries inline apiKey field स्वीकार नहीं करतीं। media model entry में provider value, जैसे openai या moonshot, के पास मानक provider auth sources में से किसी एक के जरिए credentials उपलब्ध होने चाहिए।
न्यूनतम उदाहरण:
{ models: { providers: { openai: { apiKey: "<OPENAI_API_KEY>" }, moonshot: { apiKey: "<MOONSHOT_API_KEY>" }, }, },}profiles, environment variables, और custom base URLs सहित पूर्ण provider auth reference के लिए, Tools और custom providers देखें।
डिफॉल्ट और सीमाएं
अनुशंसित डिफॉल्ट:
maxChars: image/video के लिए 500 (छोटा, command-friendly)maxChars: audio के लिए unset (जब तक आप सीमा सेट न करें, पूरा transcript)maxBytes:- image: 10MB
- audio: 20MB
- video: 50MB
नियम
- यदि media
maxBytesसे अधिक है, तो वह model छोड़ा जाता है और अगला model आजमाया जाता है। - 1024 bytes से छोटी audio files को खाली/corrupt माना जाता है और provider/CLI transcription से पहले छोड़ा जाता है; inbound reply context को deterministic placeholder transcript मिलता है ताकि agent जान सके कि note बहुत छोटा था।
- यदि model
maxCharsसे अधिक लौटाता है, तो output trim कर दिया जाता है। promptसाधारण "Describe the {media}." औरmaxCharsguidance (केवल image/video) पर डिफॉल्ट होता है।- यदि सक्रिय primary image model पहले से vision को native रूप से support करता है, तो OpenClaw
[Image]summary block छोड़ देता है और इसके बजाय मूल image को model में पास करता है। - यदि Gateway/WebChat primary model text-only है, तो image attachments को offloaded
media://inbound/*refs के रूप में सुरक्षित रखा जाता है ताकि image/PDF tools या configured image model attachment खोने के बजाय अब भी उन्हें inspect कर सकें। - स्पष्ट
openclaw infer image describe --model <provider/model>requests अलग हैं: वे उस image-capable provider/model को सीधे चलाते हैं, जिनमेंollama/qwen2.5vl:7bजैसे Ollama refs शामिल हैं। - यदि
<capability>.enabled: trueहै लेकिन कोई models configured नहीं हैं, तो OpenClaw सक्रिय reply model आजमाता है जब उसका provider क्षमता support करता है।
Auto-detect media understanding (डिफॉल्ट)
यदि tools.media.<capability>.enabled को false पर सेट नहीं किया गया है और आपने models configure नहीं किए हैं, तो OpenClaw इस क्रम में auto-detect करता है और पहले काम करने वाले option पर रुक जाता है:
सक्रिय reply model
सक्रिय reply model जब उसका provider क्षमता support करता है।
agents.defaults.imageModel
agents.defaults.imageModel primary/fallback refs (केवल image)।
provider/model refs को प्राथमिकता दें। Bare refs को configured image-capable provider model entries से qualify किया जाता है, केवल जब match unique हो।
Local CLIs (केवल audio)
Local CLIs (यदि installed हों):
sherpa-onnx-offline(encoder/decoder/joiner/tokens के साथSHERPA_ONNX_MODEL_DIRआवश्यक)whisper-cli(whisper-cpp;WHISPER_CPP_MODELया bundled tiny model का उपयोग करता है)whisper(Python CLI; models अपने-आप downloads करता है)
Gemini CLI
read_many_files का उपयोग करके gemini।
Provider auth
- Configured
models.providers.*entries जो क्षमता support करती हैं, bundled fallback order से पहले आजमाई जाती हैं। - image-capable model वाले image-only config providers media understanding के लिए auto-register होते हैं, भले वे bundled vendor plugin न हों।
- Ollama image understanding स्पष्ट रूप से चुने जाने पर उपलब्ध है, उदाहरण के लिए
agents.defaults.imageModelयाopenclaw infer image describe --model ollama/<vision-model>के जरिए।
Bundled fallback order:
- Audio: OpenAI → Groq → xAI → Deepgram → OpenRouter → Google → SenseAudio → ElevenLabs → Mistral
- Image: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- Video: Google → Qwen → Moonshot
auto-detection को अक्षम करने के लिए, सेट करें:
{ tools: { media: { audio: { enabled: false, }, }, },}Proxy environment support (provider models)
जब provider-based audio और video media understanding सक्षम होता है, तो OpenClaw provider HTTP calls के लिए मानक outbound proxy environment variables का सम्मान करता है:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
यदि कोई proxy env vars सेट नहीं हैं, तो media understanding direct egress का उपयोग करता है। यदि proxy value malformed है, तो OpenClaw warning log करता है और direct fetch पर fallback करता है।
क्षमताएं (वैकल्पिक)
यदि आप capabilities सेट करते हैं, तो entry केवल उन media types के लिए चलती है। साझा lists के लिए, OpenClaw डिफॉल्ट infer कर सकता है:
openai,anthropic,minimax: imageminimax-portal: imagemoonshot: image + videoopenrouter: image + audiogoogle(Gemini API): image + audio + videoqwen: image + videomistral: audiozai: imagegroq: audioxai: audiodeepgram: audio- Any
models.providers.<id>.models[]catalog with an image-capable model: image
CLI entries के लिए, अप्रत्याशित matches से बचने के लिए capabilities स्पष्ट रूप से सेट करें। यदि आप capabilities छोड़ देते हैं, तो entry उस list के लिए eligible है जिसमें वह दिखाई देती है।
Provider support matrix (OpenClaw integrations)
| क्षमता | Provider integration | Notes |
|---|---|---|
| Image | OpenAI, OpenAI Codex OAuth, Codex app-server, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, config providers | Vendor plugins image support register करते हैं; openai/* API-key या Codex OAuth routing का उपयोग कर सकता है; codex/* bounded Codex app-server turn का उपयोग करता है; MiniMax और MiniMax OAuth दोनों MiniMax-VL-01 का उपयोग करते हैं; image-capable config providers auto-register होते हैं। |
| Audio | OpenAI, Groq, xAI, Deepgram, OpenRouter, Google, SenseAudio, ElevenLabs, Mistral | Provider transcription (Whisper/Groq/xAI/Deepgram/OpenRouter STT/Gemini/SenseAudio/Scribe/Voxtral)। |
| Video | Google, Qwen, Moonshot | Vendor plugins के जरिए provider video understanding; Qwen video understanding Standard DashScope endpoints का उपयोग करता है। |
मॉडल चयन मार्गदर्शन
- जब गुणवत्ता और सुरक्षा महत्वपूर्ण हों, तो प्रत्येक मीडिया क्षमता के लिए उपलब्ध सबसे मजबूत नवीनतम पीढ़ी के मॉडल को प्राथमिकता दें।
- अविश्वसनीय इनपुट संभालने वाले टूल-सक्षम एजेंटों के लिए पुराने/कमजोर मीडिया मॉडल से बचें।
- उपलब्धता के लिए प्रति क्षमता कम से कम एक फ़ॉलबैक रखें (गुणवत्ता मॉडल + तेज़/सस्ता मॉडल)।
- CLI फ़ॉलबैक (
whisper-cli,whisper,gemini) तब उपयोगी होते हैं जब प्रदाता API उपलब्ध न हों। parakeet-mlxनोट:--output-dirके साथ, जब आउटपुट फ़ॉर्मैटtxtहो (या निर्दिष्ट न हो), तो OpenClaw<output-dir>/<media-basename>.txtपढ़ता है; गैर-txtफ़ॉर्मैट stdout पर फ़ॉलबैक करते हैं।
अटैचमेंट नीति
प्रति-क्षमता attachments नियंत्रित करता है कि कौन-से अटैचमेंट संसाधित किए जाते हैं:
mode"first" | "all"default: firstपहला चयनित अटैचमेंट संसाधित करना है या सभी को।
maxAttachmentsnumberdefault: 1संसाधित की जाने वाली संख्या की सीमा लगाएं।
prefer"first" | "last" | "path" | "url"उम्मीदवार अटैचमेंट में चयन प्राथमिकता।
जब mode: "all" हो, तो आउटपुट को [Image 1/2], [Audio 2/2], आदि लेबल दिए जाते हैं।
File-attachment extraction behavior
- निकाला गया फ़ाइल टेक्स्ट मीडिया प्रॉम्प्ट में जोड़े जाने से पहले अविश्वसनीय बाहरी सामग्री के रूप में लपेटा जाता है।
- इंजेक्ट किया गया ब्लॉक
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>जैसे स्पष्ट सीमा मार्कर का उपयोग करता है और इसमेंSource: Externalमेटाडेटा लाइन शामिल होती है। - यह अटैचमेंट-निष्कर्षण पथ मीडिया प्रॉम्प्ट को अनावश्यक रूप से बड़ा होने से बचाने के लिए लंबा
SECURITY NOTICE:बैनर जानबूझकर छोड़ देता है; सीमा मार्कर और मेटाडेटा फिर भी बने रहते हैं। - यदि किसी फ़ाइल में निकालने योग्य टेक्स्ट नहीं है, तो OpenClaw
[No extractable text]इंजेक्ट करता है। - यदि इस पथ में कोई PDF रेंडर की गई पेज इमेज पर फ़ॉलबैक करती है, तो OpenClaw उन पेज इमेज को विज़न-सक्षम उत्तर मॉडल को अग्रेषित करता है और फ़ाइल ब्लॉक में प्लेसहोल्डर
[PDF content rendered to images]रखता है।
कॉन्फ़िगरेशन उदाहरण
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"], }, ], }, }, },}स्थिति आउटपुट
जब मीडिया समझ चलती है, तो /status में एक संक्षिप्त सारांश लाइन शामिल होती है:
📎 Media: image ok (openai/gpt-5.4) · audio skipped (maxBytes)यह प्रति-क्षमता परिणाम और लागू होने पर चुना गया प्रदाता/मॉडल दिखाता है।
नोट्स
- समझना सर्वोत्तम-प्रयास है। त्रुटियां उत्तरों को ब्लॉक नहीं करतीं।
- समझ अक्षम होने पर भी अटैचमेंट मॉडल को भेजे जाते हैं।
- समझ कहां चलती है, इसे सीमित करने के लिए
scopeका उपयोग करें (जैसे केवल DM)।