Oct 10, 2026

Give a Text-Only Model Sight With the ModLens Vision Plugin

Paste an image into a text-only model and ModLens routes it to a vision engine — six built-in providers and four reusable CLIs behind one failover chain.

#tutorial#ai-agents#developer-tools

Per its README, DeepSeek's flagship chat models — and GLM-5.3 itself — are text-only and cannot read images. ModLens is a plug-in vision engine that fixes exactly that: paste an image, and it goes to a vision engine whose read grounds the answer in what the image actually contains.

Why This Skill Matters

ModLens reads images pasted straight into the chat — no saving to a file and passing a path first. Pasting works two ways: on a text-only model the image lands as a private temp file, its path enters the composer, and the modlens_read_image tool takes over; or you pick a (modlens vision) entry in the model selector and the thumbnail stays visible in your message. The plugin auto-discovers provider routes carrying eligible text-only DeepSeek, GLM, or MiMo Pro models and wraps each one; native vision models like GLM-5.3-Flash are excluded automatically, so a model that already has sight keeps its own paste.

Installation

On DeepSeek Harness (dsh), one command:

npx -y @deepseek-ai/dsh plugin --profile web add @liustack/modlens@3.26.6

Everywhere else, install the skill at user level:

npx -y skills add liustack/modlens --skill modlens --global

Restart the harness, then ask your AI to configure modlens and run its health check — or hand it the install line from the repo's INSTALL.md and let it do the whole thing. If the health check comes back empty, set up a free engine: the recommended choice is a free Gemini API key (about three minutes, no credit card), which also brings every read down to 5-10 seconds. To skip sign-up entirely, install Antigravity CLI and sign in with agy.

Real Workflow: Read a Pasted Screenshot on a Text-Only Model

  1. Install, restart your harness, and run the health check.
  2. Paste an image or drop a path and ask anything. The skill triggers on its own, and the answer comes back grounded in the read — full transcription, reading-order layout regions, entity and relation lists, so the model quotes specifics.
  3. Keep asking. Later questions about the same image do not need another paste.

The README's stress test shows the ceiling: a scatter plot comparing 128 AI models, read down to both axes, the log scale, the per-provider color coding, and every DeepSeek model called out with dashed markers.

The engine pool is what makes this sturdy: six built-in providers (gemini-api, openai, anthropic, antigravity-cli, claude-cli, kimi-cli) plus four agent CLIs whose existing logins can be reused (Codex, OpenCode, Pi, Grok), each behind an explicit consent. Without a pinned provider, every configured engine forms one failover chain — the first good result wins, and meta.attempts records every attempt so a fallback is never silent.

Tips

  • The openai provider is a universal socket, not just OpenAI: any OpenAI-compatible endpoint with image input plugs in — qwen-vl via Dashscope, GLM's open platform, SiliconFlow, OpenRouter, or a self-hosted vLLM/Ollama.
  • Comma-separated API keys rotate on auth, rate-limit, or quota failures; network, 5xx, and parse failures skip remaining keys and keep provider failover.
  • -p <name> pins exactly one engine with no fallback; modlens config set provider <name> states a preference while keeping the chain behind it.
  • Reused CLI reads are labeled in meta.warnings with whose quota they spent, per the README — nothing is silently billed.
  • Installation is deliberately light: one skill folder (one plugin on dsh), no hooks or wrappers, no harness config changed — uninstalling is deleting that folder.

When Not to Use This

Your model already has native vision — ModLens leaves vision models alone by design and adds nothing for them. You need image generation — this reads images, it does not create them. And its verified surface is specific: the README reports verification on real machines in Claude Code, Codex, Pi, and OpenCode, plus the DeepSeek Harness plugin path; other harnesses are unverified territory.


See the leaderboard for more skills.