Skip to main content
Best Practices

Add visual understanding capabilities

Vision for coding models

Some Token Plan models (qwen3.7-plus, qwen3.6-plus, qwen3.5-plus) natively support visual understanding and can process image inputs directly. For text-only models such as glm-5 and MiniMax-M2.5, you can add visual capabilities by configuring a local Skill.
Running the image understanding Skill consumes Token Plan Credits. No additional charges apply.

Prerequisites

  1. You have subscribed to Token Plan. See Getting started.
  2. You have completed the integration configuration in a Token Plan tool and can chat normally. See Clients and Developer Tools for your tool's setup guide.

Vision support

ModelVision supportDescription
qwen3.7-plus, qwen3.6-plus, qwen3.5-plusYesNo additional configuration required. You can pass images directly.
qwen3-max-2026-01-23, qwen3-coder-next, qwen3-coder-plus, glm-5, glm-4.7, MiniMax-M2.5NoRequires a Skill or Agent to enable visual capabilities
qwen3.7-plus, qwen3.6-plus, and qwen3.5-plus have visual understanding capabilities. If you frequently need to process images, switching to one of these models is the simplest and recommended approach.
ToolHow to switch
Claude Code/model qwen3.7-plus or /model qwen3.6-plus or /model qwen3.5-plus
OpenCode/models then search and select qwen3.7-plus or qwen3.6-plus or qwen3.5-plus
Qwen Code/model then select qwen3.7-plus or qwen3.6-plus or qwen3.5-plus
For more information about switching models in other coding tools, see Clients and Developer Tools. After switching, you can reference image paths directly in your conversation, or drag-and-drop/paste images.

Method 2: Add visual capabilities via Skill or Agent

If you need to use text-only models such as glm-5 or MiniMax-M2.5 for image processing, you can configure a Skill or Agent to enable visual capabilities.
  • Claude Code
  • OpenCode

Add the Skill

  1. Create an .claude folder in your project directory, then create a skills/image-analyzer directory inside it:
mkdir -p .claude/skills/image-analyzer
  1. Create a SKILL.md file in that directory with the following content:
---
name: image-analyzer
description: Helps models without vision capabilities understand images. Use this skill when you need to analyze image content, extract information, text, or UI elements from images, or understand screenshots, charts, architecture diagrams, or any visual content. Simply pass in the image path to get a description.
model: qwen3.7-plus
---
qwen3.7-plus has visual understanding capabilities. Use qwen3.7-plus directly for image understanding.
  1. The resulting directory structure is as follows:
.claude/
└── skills/
  └── image-analyzer/
    └── SKILL.md

Getting started

  1. Run claude in your project directory to start Claude Code, then run /model glm-5 to switch to the glm-5 model.
  2. Reference an image path in the conversation and ask a question, for example: Load image-analyzer skill and describe the content in screenshot.png.

FAQ

Cause: OpenCode does not enable a model's vision capabilities by default. You must explicitly declare the modalities parameter in the configuration file.Solution: Add a modalities field to the model definition in your OpenCode configuration file, and set input to ["text", "image"], as shown below:
Replace sk-sp-xxx with your Token Plan API Key.
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "qwen-cloud-token-plan": {
      "npm": "@ai-sdk/anthropic",
      "name": "Qwen Cloud Token Plan",
      "options": {
        "baseURL": "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
        "apiKey": "sk-sp-xxx"
      },
      "models": {
        "qwen3.7-plus": {
          "name": "Qwen3.7 Plus",
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "options": {
            "thinking": {
              "type": "enabled",
              "budgetTokens": 1024
            }
          }
        },
        "qwen3.6-plus": {
          "name": "Qwen3.6 Plus",
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "options": {
            "thinking": {
              "type": "enabled",
              "budgetTokens": 1024
            }
          }
        },
        "qwen3.5-plus": {
          "name": "Qwen3.5 Plus",
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "options": {
            "thinking": {
              "type": "enabled",
              "budgetTokens": 1024
            }
          }
        }
      }
    }
  }
}
Cause: OpenClaw requires the input field in the configuration file to determine whether a model supports vision capabilities.Solution:
  1. In the ~/.openclaw/openclaw.json configuration file, ensure the model definition includes the "input": ["text", "image"] field.
{
  "models": {
    "mode": "merge",
    "providers": {
      "bailian": {
        "baseUrl": "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
        "apiKey": "YOUR_API_KEY",
        "api": "openai-completions",
        "models": [
          {
            "id": "qwen3.7-plus",
            "name": "qwen3.7-plus",
            "reasoning": false,
            "input": ["text", "image"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 1000000,
            "maxTokens": 65536
          },
          {
            "id": "qwen3.6-plus",
            "name": "qwen3.6-plus",
            "reasoning": false,
            "input": ["text", "image"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 1000000,
            "maxTokens": 65536
          },
          {
            "id": "qwen3.5-plus",
            "name": "qwen3.5-plus",
            "reasoning": false,
            "input": ["text", "image"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 1000000,
            "maxTokens": 65536
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "bailian/qwen3.6-plus"
      },
      "models": {
        "bailian/qwen3.7-plus": {},
        "bailian/qwen3.6-plus": {},
        "bailian/qwen3.5-plus": {}
      }
    }
  },
  "gateway": {
    "mode": "local"
  }
}
  1. After modifying the configuration, you must clear the OpenClaw model cache and restart. Otherwise, the old configuration will remain in effect.
rm ~/.openclaw/agents/main/agent/models.json
openclaw gateway restart