PlugWiki

vision Skill (kotot): Read Images Without Vision

Makes Claude Code read images and screenshots by sending them to a vision model you configure, when the current model cannot see.

Installs
13.8K
on skills.sh
Stars
3
on GitHub
Files
1
besides SKILL.md
Updated
Jul 2026
last repo commit

vision runs a Python script, scripts/see.py, with an image (local path or URL) and a question. The script sends the image to an OpenAI-compatible vision model and prints the text answer, which Claude then uses. It covers describing images, OCR, error screenshots, charts, diagrams, UI mockups and scanned pages.

It is built for a model that has no native vision, and the README names some GLM and text-only Qwen models as examples. You must point it at a vision model endpoint, local or cloud, with VISION_BASE_URL and VISION_MODEL. Your images go to that endpoint.

Good for

  • Claude Code users running a model that has no image input
  • Developers who want OCR or screenshot reading from a local vision server
  • People diagnosing errors from screenshots

Install vision

Claude Code

  1. 1

    Get the repo (for example with git clone https://github.com/kotot/vision).

  2. 2

    Run mkdir -p ~/.claude/skills and then cp -r vision ~/.claude/skills/ from the repo folder, so SKILL.md sits at ~/.claude/skills/vision/SKILL.md.

  3. 3

    For one project only, use <project>/.claude/skills/vision/ instead.

Requires git, python3.

The README installs by copying the vision/ folder into Claude Code's skills folder, user-level (~/.claude/skills/vision/) or project-level (<project>/.claude/skills/vision/). The skill needs python3 and a vision model endpoint you configure (VISION_BASE_URL and VISION_MODEL; see the env list). There is no Claude app upload route, because the skill runs a local Python script.

From the project README. Source.

What's in the skill

When it loads

See and understand images when you (the current model) have no native vision. Use this WHENEVER you need to look at, read, describe, OCR, or reason about the contents of an image, screenshot, photo, diagram, chart, UI mockup, or scanned page — including when the user references a local image file or an image URL and you cannot view it yourself. Also triggers on: 看图 / 识图 / 截图 / 图片内容 / OCR 文字识别 / 这张图是什么. Delegates the actual seeing to a configurable OpenAI-compatible vision model via a small script.

Sections in SKILL.md

  1. When to use
  2. How to use
  3. Configuration (required, set once)
  4. Notes

Key facts

Installs on skills.sh
13,812 (Nov 2, 2026)
GitHub stars
3 (Nov 2, 2026)
Last repo commit
Jul 2, 2026

What it includes

  • Sends a local image or URL plus your question to the vision model

    Local files become base64 data URLs; http(s) URLs pass through.

    Runs code · see.py <image> "question"

  • Shows the request without sending it

    VISION_DRY_RUN=1 does the same.

    Runs code · --dry-run

  • Descriptions, text transcription, charts as tables, error screenshots

    Read · Describe and OCR

  • Environment variables or a .claude/settings.json env block

    Environment variables win over files.

    Files · Configuration

  • Searches .claude/settings.json from the current directory up, then ~/.claude/

    Files · Settings lookup

From the official docs

Permissions

High risk

vision sends your images to whatever vision endpoint you configure. Our advice: use --dry-run first, and a local endpoint for private images.

What it can do

  • Read your data
  • Create and change things
  • Delete things
  • Read-only mode

Watch out for

  • Hidden reads of OpenClaw .env files

    see.py also opens /root/.openclaw/.env and ~/.openclaw/.env if they exist, and parses every line. It keeps only VISION_ keys, but these are credential files for another tool. SKILL.md and the README never mention these paths. The code comment says OpenClaw hands tools credentials this way. Delete the _load_openclaw_env call if you do not use OpenClaw. github.com

  • Your images go to the endpoint you set

    The script base64-encodes local images and POSTs them with your question to VISION_BASE_URL. If that is a cloud service, the images leave your machine. A key, if set, is sent as a bearer token. github.com

  • Reads settings files for config

    The script reads settings.local.json and settings.json in .claude/ folders: CLAUDE_PROJECT_DIR, the current directory and every parent up to the filesystem root, then your home folder. It opens each whole file but keeps only keys that start with VISION_. SKILL.md documents this lookup. github.com

Technical details
Turning on read-onlyNo read-only switch.
Talks toThe VISION_BASE_URL endpoint you configure
Sign-in and keysOptional VISION_API_KEY from the environment or settings files, sent as a bearer token to your endpoint.
Scopes
  • Claude runs python3 scripts/see.py

  • Reads the image files you name

  • Reads VISION_ variables from .claude/settings.json files and two OpenClaw-style .env paths

  • Posts images and your question to the endpoint you configure

Questions

What does the vision skill do?

It lets a model that cannot view images still handle them. Claude runs a Python script that sends the image to a vision model you configure and reads the text answer.

How do I install it?

Use the install box at the top. The README copies the vision folder into ~/.claude/skills/ or a project's .claude/skills/. Then set VISION_BASE_URL and VISION_MODEL.

Which vision model does it use?

Any OpenAI-compatible one. VISION_BASE_URL must be the full chat-completions endpoint, for example one ending in /v1/chat/completions. The README names vLLM, Ollama, LM Studio, LMDeploy and cloud models such as GPT-4o as options.

Do I need an API key?

Only if your endpoint wants one. SKILL.md marks VISION_API_KEY as optional, for example for local servers. If you set it, it is sent as a bearer token.

Where do my images go?

To the VISION_BASE_URL endpoint you configure. The script base64-encodes local files into the request, so whoever runs that endpoint receives them.

Do I need it with a model that already sees images?

The skill is written for a model with no native vision. SKILL.md says to use it when you cannot view the image yourself.

Is it safe?

Claude runs a Python script that reads image files, searches settings files for VISION_ variables and posts to your configured endpoint. Our advice: use --dry-run first, and a local endpoint for private images.

Information

updated Nov 2, 2026

Repository
kotot/vision
Folder
vision

kotot/visionskills.sh

Sources

Docs, issue trackers and discussions this page is built from.

Show all 3
  1. vision SKILL.md · github.com
  2. vision README · github.com
  3. skills.sh listing · skills.sh

Updated Nov 2, 2026.