给 opencode 装个眼睛:一个能读截图、看剪贴板的 vision 插件
最近把 opencode 当主力 CLI 助手用遇到一个烦人的问题我用的主模型不带多模态。贴一张截图进去它回一句 “Cannot read”没了。想让它看个报错、分析个设计稿还得先把图存下来再手动切到网页版模型去问。来回折腾几次我写了个小插件给 opencode 加一个vision工具。现在贴图给它它会自动把图发给 OpenRouter 的视觉模型默认 qwen3-vl-8b把识别结果带回来继续干活。能干什么剪贴板识图。截图后不用存文件直接说看看剪贴板插件调 Python Pillow 或 pngpaste 把剪贴板内容抓出来分析。多图对比。传逗号分隔的多个路径一次调用对比几张图。自动压缩。超过 1568px 的图先用 macOS 自带的 sips 缩放再上传省 token识别速度也快。模型可换。默认 qwen3-vl-8b要更强识别就传model: google/gemini-2.5-flash。失败重试。请求超时 90s 或 5xx 时自动重试一次。实现思路实现本身不复杂三块图片转 base64 data URL以image_url形式发给 OpenRouter 的/chat/completions接口大图先压缩再上传避免传原图浪费流量和 token剪贴板优先走 Python Pillow 的 ImageGrab没装 Pillow 就退回 pngpaste。API key 从 opencode.json 的 provider 配置或OPENROUTER_API_KEY环境变量读代码里没有写死的 key开源出去也不用担心泄密。安装把vision.ts放进插件目录装好依赖重启即可mkdir-p~/.config/opencode/pluginscpvision.ts ~/.config/opencode/plugins/配置 key 两种方式任选{provider:{openrouter:{options:{apiKey:sk-or-v1-你的key}}}}或者export OPENROUTER_API_KEY你的key。用法主模型遇到图片会自动调vision也可以手动指定vision({ imagePath: /path/to/screenshot.png, question: 截图里有什么错误 }) vision({ imagePath: /a.png,/b.png, question: 对比这两张图 }) vision({ imagePath: clipboard }) vision({ imagePath: clipboard, model: google/gemini-2.5-flash })实际感受用了一个多月最常用的场景是贴图表截图让它算数。之前给它看一张缓存命中率统计图它把命中、未命中、输出几项都读出来算了命中率还发现总计和分项对不上差值恰好等于输出数怀疑统计口径把输出也加进去了。这种活以前要么我肉眼对要么得自己写脚本解析。识别速度从几秒到十几秒不等取决于图片大小和模型负载。写这个插件主要是自己用顺手开源出来给同样被模型不支持图片卡住的人一个参考。仓库里有完整代码、安装说明和示例。GitHub: https://github.com/xiucaicoder/opencode-visionLicense: MIT