@liustack/modlens 2.7.10 → 2.7.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/dist/main.js +1 -1
- package/package.json +1 -1
- package/skills/modlens/SKILL.md +3 -3
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
DeepSeek-V4-Flash gives you a lot of model for very little money: fast, cheap, capable, and blind. It is not just DeepSeek either. Any text-only model running inside Codex, Claude Code, Pi, or OpenCode hits the same wall: you throw it a screenshot of an error and it sees nothing.
|
|
13
13
|
|
|
14
|
-
ModLens gives it sight, and **you just paste**. Every other bridge makes you save the image to a file and then mention the path in the chat. ModLens pulls the pasted image back out of session storage instead. What comes back is not "this is a screenshot of an error", it is
|
|
14
|
+
ModLens gives it sight, and **you just paste**. Every other bridge makes you save the image to a file and then mention the path in the chat. ModLens pulls the pasted image back out of session storage instead. What comes back is not "this is a screenshot of an error", it is evidence you can quote: every word in the image transcribed, the layout cut into regions in reading order, and the entities and relations on screen listed separately.
|
|
15
15
|
|
|
16
16
|
No model swap, no prompt surgery, no local proxy. It starts with no key at all.
|
|
17
17
|
|
|
@@ -52,7 +52,7 @@ All four harnesses are verified on real machines: Claude Code pinpoints the exac
|
|
|
52
52
|
| :-- | :-- | :-- | :-- |
|
|
53
53
|
| Your chosen model | has to change | stays | stays |
|
|
54
54
|
| An image pasted into the chat | visible if the model supports it | out of reach, save a file and report the path | handled directly |
|
|
55
|
-
| What you get back | the model's own reading | usually a description |
|
|
55
|
+
| What you get back | the model's own reading | usually a description | full transcription, layout regions, entities and relations, visual clues |
|
|
56
56
|
| Where it cannot read | may invent | may invent | says so in `uncertainty` |
|
|
57
57
|
| Cost | multimodal model pricing | usually per API call | agy's free quota, or a free Gemini key |
|
|
58
58
|
| Setup | change config, change model | install a server, edit config | one CLI or one skill |
|
|
@@ -193,7 +193,7 @@ Pointing OpenCode at DeepSeek takes two lines of setup: `opencode auth login`, p
|
|
|
193
193
|
## Why a bridge instead of a multimodal model?
|
|
194
194
|
|
|
195
195
|
- **Keep your model.** You picked DeepSeek-V4-Flash (or gpt-oss, or whatever else) for its price and its reasoning, not its eyesight. ModLens adds sight without touching that choice.
|
|
196
|
-
- **Evidence beats pixels.** Text models reason best over structured text, not raw pixels. ModLens hands them
|
|
196
|
+
- **Evidence beats pixels.** Text models reason best over structured text, not raw pixels. ModLens hands them the transcribed words, the segmented layout, and the extracted meaning, not a base64 blob.
|
|
197
197
|
- **Engines die, the bridge survives.** v1 ran on Gemini CLI's free tier until Google shut it down in June 2026. v2 moved to its successor, Antigravity CLI, behind the same provider interface, so the next engine swap costs one file, not a rewrite.
|
|
198
198
|
|
|
199
199
|
ModSearch, ModLens's sibling project, plays the same trick for web search and page fetching: [liustack/modsearch](https://github.com/liustack/modsearch).
|
package/README.zh-CN.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
DeepSeek-V4-Flash 碗大又好吃,速度快、便宜、能打,唯独没有多模态。不止它,任何纯文本模型跑在 Codex、Claude Code、Pi、OpenCode 里,都撞同一堵墙:你甩过去一张报错截图,它看不见。
|
|
13
13
|
|
|
14
|
-
ModLens 给它装上视力,而且**你直接粘贴就行**。别的方案都要你先把图存成文件、再在对话里报一句路径,ModLens
|
|
14
|
+
ModLens 给它装上视力,而且**你直接粘贴就行**。别的方案都要你先把图存成文件、再在对话里报一句路径,ModLens 直接从会话存储里把粘贴的图捞回来。回来的不是一句「这是一张报错截图」,是能引用的证据:图里的字一句不落地抄下来,版面按阅读顺序切成区块,画面里的实体和关系单列一份。
|
|
15
15
|
|
|
16
16
|
模型不用换,提示词不用改,本地不装代理。零 key 就能开跑。
|
|
17
17
|
|
|
@@ -52,7 +52,7 @@ ModLens 走的是另一条路。图片字节在发给模型之前,早被 harne
|
|
|
52
52
|
| :-- | :-- | :-- | :-- |
|
|
53
53
|
| 你选的模型 | 得换掉 | 不用换 | 不用换 |
|
|
54
54
|
| 粘贴进对话的图 | 模型支持就能看 | 接不住,得先存文件报路径 | 直接接住 |
|
|
55
|
-
| 拿到手的是什么 | 模型自己的理解 | 通常一段描述 |
|
|
55
|
+
| 拿到手的是什么 | 模型自己的理解 | 通常一段描述 | 全文转录、版面区块、实体关系、视觉线索 |
|
|
56
56
|
| 读不准的地方 | 可能编 | 可能编 | 进 `uncertainty`,明说读不准 |
|
|
57
57
|
| 花费 | 多模态模型的价格 | 多数按 API 计费 | agy 免费额度,或免费 Gemini key |
|
|
58
58
|
| 上手 | 改配置换模型 | 装 server、改配置 | 一个 CLI 或一个 skill |
|
|
@@ -193,7 +193,7 @@ OpenCode 接 DeepSeek 只要两步:`opencode auth login` 选 DeepSeek 贴上 k
|
|
|
193
193
|
## 为什么外挂,而不是换多模态模型?
|
|
194
194
|
|
|
195
195
|
- **模型不用换。** 你选 DeepSeek-V4-Flash(或 gpt-oss,或别的什么)图的是价格和推理能力,不是视力。ModLens 只加视力,不碰这个选择。
|
|
196
|
-
- **证据强过像素。**
|
|
196
|
+
- **证据强过像素。** 文本模型最擅长在结构化文本上推理,不是盯着原始像素。ModLens 递过去的是转录好的文字、切好的版面、拆好的语义,不是一坨 base64。
|
|
197
197
|
- **引擎会死,桥不会死。** v1 跑在 Gemini CLI 免费档上,2026 年 6 月被 Google 一刀切停掉。v2 换到继任者 Antigravity CLI,还是同一个 provider 接口,下次再换引擎,改一个文件就行,不用重写。
|
|
198
198
|
|
|
199
199
|
姊妹项目 ModSearch 用同一招补上联网搜索和网页抓取:[liustack/modsearch](https://github.com/liustack/modsearch)。
|
package/dist/main.js
CHANGED
|
@@ -1478,7 +1478,7 @@ function recoverPastedImages(options = {}) {
|
|
|
1478
1478
|
return result;
|
|
1479
1479
|
}
|
|
1480
1480
|
const program = new Command();
|
|
1481
|
-
program.name("modlens").description("Plug-in vision for text-only LLMs: image in, structured JSON evidence out").version("2.7.
|
|
1481
|
+
program.name("modlens").description("Plug-in vision for text-only LLMs: image in, structured JSON evidence out").version("2.7.11");
|
|
1482
1482
|
program.command("analyze", { isDefault: true }).description("Analyze an image into structured JSON evidence (default command)").requiredOption("-i, --input <path|url>", "Input image path or https URL").option("-o, --output <path>", "Write result JSON to a file").option("-m, --model <name>", "Provider model name").option("-p, --provider <name>", `Vision provider (${listProviders().join(", ")})`).option("--prompt <text>", "Extra focus for this image").option("--timeout <ms>", "Provider timeout in milliseconds", "180000").option("--provider-bin <path>", "Provider binary path (default: agy)").option("--workdir <path>", "Working directory for the provider").action(async (options) => {
|
|
1483
1483
|
try {
|
|
1484
1484
|
const timeoutMs = Number.parseInt(options.timeout, 10);
|
package/package.json
CHANGED
package/skills/modlens/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: modlens
|
|
3
|
-
description: "Plug-in vision for text-only models. Use whenever the user shares an image (local path, screenshot, photo, chart, document scan, or image URL) and the active model cannot see images or has no vision tool. Runs the modlens CLI to convert the image into structured JSON evidence:
|
|
3
|
+
description: "Plug-in vision for text-only models. Use whenever the user shares an image (local path, screenshot, photo, chart, document scan, or image URL) and the active model cannot see images or has no vision tool. Runs the modlens CLI to convert the image into structured JSON evidence: every word transcribed, layout regions, semantics, visual clues. Also use when the user asks how to install, configure, or switch modlens providers (Gemini API key, OpenAI-compatible endpoints, Claude API or Claude Code CLI)."
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash
|
|
6
6
|
---
|
|
@@ -11,7 +11,7 @@ Use this skill when:
|
|
|
11
11
|
|
|
12
12
|
- The user provides an image path or image URL and asks anything about it
|
|
13
13
|
- The active model has no native vision (text-only model in a coding agent)
|
|
14
|
-
- You need
|
|
14
|
+
- You need the text inside an image, its layout, or a chart's structure as evidence before reasoning
|
|
15
15
|
- The user asks how to configure modlens, get an API key for it, or switch its provider: follow `references/configure.md` and run the commands for them
|
|
16
16
|
|
|
17
17
|
Do not use this skill for:
|
|
@@ -91,7 +91,7 @@ Harnesses rarely hand you a clean path. First identify which harness you are in,
|
|
|
91
91
|
Top level: `{ image, provider, result, meta }`. Inside `result`:
|
|
92
92
|
|
|
93
93
|
- `summary`: one-paragraph description of the image
|
|
94
|
-
- `ocr.full_text` + `ocr.lines[]`: transcribed
|
|
94
|
+
- `ocr.full_text` + `ocr.lines[]`: every word in the image, transcribed (the field keeps the familiar `ocr` name, though a vision model does the reading, not an OCR engine)
|
|
95
95
|
- `layout.regions[]`: typed blocks (`title`, `paragraph`, `table`, `chart`, `code`, ...) in reading order
|
|
96
96
|
- `semantics`: scene, intent, entities, relations
|
|
97
97
|
- `visual`: colors and style clues
|