vision

SkillMedia

Call vision models (Doubao, Qwen, DeepSeek, OpenAI) to analyze images. Use when you need to understand screenshots, UI layouts, diagrams, or any image content. Supports png/jpg/webp/gif.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the vision skill

What this skill tells your AI

The instructions your AI receives, as published by xiincs/claude-code-vision-skill in vision/SKILL.md and read by ahel’s review.

Multi-provider vision tool. Call various vision models to describe images. Feed it a prompt + image path, get back a text description.

When to use this tool

If you can already see and understand the image yourself (native multimodal model), skip this tool — analyze it directly.

A SessionStart hook normally announces this session's routing status up front. If that context isn't visible (e.g. compacted out of a long conversation, or the hook isn't installed), check before calling this tool:

python vision.py --check-routing
  • native → you already have native image understanding this session; don't call this tool.
  • external (default) → proceed with the quick start below.

Quick start

python vision.py [--provider <name>] <image_path> <prompt>

When --provider is omitted, the provider is resolved by: --provider flag > VISION_PROVIDER env > first API key found.

Providers

doubao (Volcengine Ark)

  • API key: DOUBAO_API_KEY
  • Default model: doubao-seed-2-0-pro-260215
  • Custom endpoint: DOUBAO_BASE_URL

qwen (DashScope)

  • API key: DASHSCOPE_API_KEY
  • Default model: qwen-vl-max
  • Custom endpoint: DASHSCOPE_BASE_URL
  • Available models: qwen-vl-max, qwen-vl-plus, qvq-max

deepseek (DeepSeek)

  • API key: DEEPSEEK_API_KEY
  • Default model: deepseek-v4-flash-vision-exp
  • Custom endpoint: DEEPSEEK_BASE_URL
  • Only deepseek-v4-flash-vision-exp accepts images — deepseek-v4-flash and deepseek-v4-pro are text-only and reject image input with an error.

openai (GPT-4o)

  • API key: OPENAI_API_KEY
  • Default model: gpt-4o
  • Custom endpoint: OPENAI_BASE_URL
  • Also works with any OpenAI-compatible endpoint.

anthropic (Claude)

  • API key: ANTHROPIC_API_KEY
  • Default model: claude-sonnet-5
  • Custom endpoint: ANTHROPIC_BASE_URL
  • Requires the anthropic package (pip install anthropic); it's imported lazily so other providers work without it.

any custom provider

Any --provider name outside the built-in ones is resolved dynamically from environment variables named after it — no code changes needed:

Env VarRequiredNotes
{NAME}_API_KEYyeschecked at request time, same as built-ins
{NAME}_BASE_URLyesno default — arbitrary endpoint
{NAME}_MODELyesno default (or set global VISION_MODEL instead)
{NAME}_PROTOCOLnoopenai (default) or anthropic — picks the request shape

openai covers essentially every OpenAI-compatible endpoint (vLLM, Ollama, LiteLLM, OpenRouter, Azure OpenAI, self-hosted proxies, ...). Use {NAME}_PROTOCOL=anthropic only if the endpoint speaks the Anthropic Messages API shape.

export MYAPI_API_KEY="sk-xxx"
export MYAPI_BASE_URL="https://my-endpoint.example.com/v1"
export MYAPI_MODEL="my-vision-model"
python vision.py --provider myapi "screenshot.png" "describe this"

If {NAME}_BASE_URL or {NAME}_MODEL is missing, the tool prints exactly which variables to set instead of a generic "unknown provider" error.

Configuration

Env VarScopeDefault
VISION_PROVIDERDefault provider (built-in or custom name)auto-detect (built-ins only)
VISION_MODELOverride model (all providers)provider default
{PROVIDER}_MODELOverride model (per provider)
{PROVIDER}_BASE_URLOverride/define endpoint (per provider)built-in default, or required for custom
{PROVIDER}_PROTOCOLRequest shape for a custom provider: openai | anthropicopenai
VISION_TEMPERATUREResponse creativity 0–10
VISION_MAX_TOKENSMax response tokens4096

Note: auto-detect (no --provider / VISION_PROVIDER set) only scans the built-in providers' API keys — a custom provider must always be named explicitly.

Examples

# Auto-detect provider from API keys
python vision.py "screenshot.png" "Describe the page layout and any visible UI issues."

# Explicit provider
python vision.py --provider qwen "mockup.png" "List all components, colors, and spacing patterns."

# Custom model
QWEN_MODEL=qvq-max python vision.py --provider qwen "diagram.png" "Explain the architecture."

# GPT-4o for visual regression
python vision.py -p openai "after.png" "Compare with app design spec, flag differences."

# Fully custom provider (self-hosted, third-party proxy, any OpenAI-compatible endpoint)
MYAPI_API_KEY=sk-xxx MYAPI_BASE_URL=https://host/v1 MYAPI_MODEL=my-model \
  python vision.py --provider myapi "ui.png" "Analyze layout issues"

Signals

GitHub stars
170
Forks
8
Last commit
Aug 2026

ahel review

  • K1binfo
    installs-packages
  • K1binfo
    installs-packages (in vision.py)

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
vision-xiincs
Source
github.com/xiincs/claude-code-vision-skill