{"adoption": {"forks": 106, "observed_at": "2026-08-28T04:08:14.791796+00:00", "stars": 3700}, "canonical_url": "https://ross.abutalabs.com/products/modlens", "card": {"archived": false, "artifact_type": "plugin", "description": "The first vision plugin for DeepSeek Harness, and the vision bridge for every text-only coding agent. Paste an image, get structured JSON evidence (OCR, layout, semantics). | 全网最强 DeepSeek Harness 外挂视觉插件，为 DeepSeek、GLM 等纯文本模型外挂视觉能力，粘贴图片即得结构化 JSON 证据（OCR、版面、语义）。", "domain": ["artificial-intelligence", "image-processing", "developer-tools"], "enriched": true, "function": ["ocr", "image-processing", "computer-vision", "agent-framework", "mcp"], "health_score": 100, "homepage": "https://liustack.dev", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["liustack/modlens"], "name": "liustack/modlens", "platform": ["cli", "cross-platform"], "pushed_at": "2026-08-25T12:12:27+00:00", "repo": "liustack/modlens", "stars": 3700, "tags": ["vision-plugin", "deepseek-harness", "text-only-llm", "image-to-", "agent-skills", "claude-code", "multimodal-bridge", "ai-agents", "natural-language-processing", "nodejs"], "topics": ["agent-skills", "claude-code", "claude-skills", "codex", "deepseek", "dsh-plugin", "glm", "harness", "harness-engineering", "hermes-agent", "openclaw", "pi-agent", "text-only-llm", "vision-transformer", "image-to-text", "multimodal", "ocr", "vision", "cordis", "dsh"], "urls": [], "use_cases": ["give a text-only coding agent the ability to read pasted screenshots", "extract OCR text and layout from images as structured JSON", "let DeepSeek or GLM analyze UI mockups and diagrams", "add vision capabilities to a text-only LLM workflow", "read images pasted into chat without saving files first", "convert screenshots into semantic evidence for coding agents"], "what_it_is": "ModLens is a vision plugin for DeepSeek Harness (dsh) and other text-only coding agents that converts pasted images into structured JSON evidence including OCR, layout, and semantic analysis. It acts as a vision bridge, letting text-only models like DeepSeek and GLM read images directly from the chat.", "when_to_avoid": ["your model already has native multimodal vision capabilities", "you need general-purpose standalone OCR outside an agent harness", "you don't use a supported harness such as DeepSeek Harness, Claude Code, or Codex"], "when_to_choose": ["you use DeepSeek, GLM, or another text-only model in a harness like dsh and need image understanding", "you want structured JSON output (OCR, layout, semantics) from images inside a coding agent", "you want zero-friction image input by pasting directly into chat"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/modlens", "repo": "liustack/modlens", "role": "main", "score": 78}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:14.791796+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:31:03.043097+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a35f5bcd92e626f8ac5bd11fac35375da70342b27cca11e3ef04a322714f48de", "fetched_at": "2026-08-28T04:08:14.791796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/liustack/modlens"}, {"content_hash": "79170bf4cd6036bb0f23c022a69741392fe7f2983bd3c8ec8a8ae5d3243e52a8", "fetched_at": "2026-08-29T09:24:52.741851+00:00", "kind": "homepage", "missing": false, "url": "https://liustack.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 13, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 192, "days_push": 8, "days_rel": 8, "gap_med": 0, "n_releases_24m": 78}, "score": 78, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}