Use this skill on EVERY read request AND before dumping large context, to decide between text and image representation. Apply whenever the AI is about to open a PDF, screenshot a URL, review a UI, inspect a long git diff, process diagrams, OR dump a big graph / call-tree / dependency map as text. First self-check your own modality (can you see images?), then consult the decision table. Picking wrong wastes tokens — but image is NOT always cheaper (see the honest economics below).
Install
npx skillscat add 8-sync-dev/8sync/image-routing Install via the SkillsCat registry.
image-routing — image vs text, by content type AND your modality
Two directions, one rule: pick the modality that fits the content.
- Incoming (you must read a PDF/UI/diagram/graph) — decision table below.
- Outgoing (about to emit a big dump — a codegraph, dep-tree, dashboard) — if you can
see images, render the STRUCTURE to one image instead of dumping its text form.
STEP 0 — self-check your modality
Can I see pixels?
- Native VLM (GLM-5.3 / GLM-5.3-Flash / any
zai/glm-5.3*— the 8sync default): YES.
Docs: https://docs.z.ai/guides/vlm/glm-5.3-flash. Images arrive asimage_urlor via thereadtool on local image files (read path: "image.png"decodes inline).
Look at the image directly in this session. Do NOT callmcp__zai_vision_*/@z_ai/mcp-server. - Vision model (Opus-class): yes. Use images for STRUCTURE/overview (below). Same rule:
look yourself; do not bounce to a sidecar vision API. - Text-only (GLM-5.2 and older): no. You cannot read PNGs. Only then route an incoming
image through thezai-visionMCP (~/.omp/skills/zai-vision/SKILL.md) to get TEXT
back, then act.
Honest token economics (read before assuming image is cheaper)
- Claude bills images as 28×28-px patches:
⌈W/28⌉ × ⌈H/28⌉tokens — roughly pay-per-pixel.
Opus 4.7+ removed the old cheap ~1.15 MP downscale cap and charges for pixels sent (~3× more at
max res). So a big screenshot is NOT automatically cheap. - Rendering dense text as an image is only ~1.3-2× cheaper than the text, and risks
illegibility (resize/JPEG artifacts merge characters). Grounding: "Text or Pixels?" arXiv 2510.18279. - The famous 10× / 90% reduction (DeepSeek-OCR, arXiv 2510.18234) needs a DEDICATED optical
encoder (~100 vision-tokens/page) — you do NOT get that by sending a PNG to Opus or GLM. Do not
promise 90% for screenshots. - Where image genuinely wins: STRUCTURE. A 12k-edge call graph, an architecture diagram, a
dashboard, a rendered UI — the text equivalent (adjacency lists, DOM) is far larger AND loses
layout. Here image is a real, large win because you read structure, not OCR'd characters. - Image reading is LOSSY — exact code, line numbers, config, hashes MUST stay text.
Decision table
| Content type | Use | Why |
|---|---|---|
Source code (.rs, .ts, .py, …) |
text | exact lines; OCR'd code costs MORE + loses nums |
| Exact config / hashes / line data | text | precise + lossless |
| Plain text doc < ~50 KB | text | already cheap + exact |
| Codegraph / call- or dep-graph / tree | image | structure ≪ its adjacency-list text (vision) |
| Architecture / diagram / mermaid | image | layout is the information |
| Rendered UI / dashboard review | image | one shot ≪ DOM + styles |
| Long PDF (> 5 pages, figures/scans) | image | 8sync pdf-img <file> |
| Git diff > 500 lines | image | 8sync diff-img <ref> (phase 2 stub) |
| Terminal output | text | already text |
Tools
8sync shot <url|file>— real (bundled/system Chromium → PNG; prints the vision-token
estimate). Renders any URL incl.8sync harness webpages, or local HTML.8sync pdf-img <file>— PDF pages → PNGs (poppler).8sync gen-img "<prompt>" -o <output.png>— AI image generation viagpt-image-2
(OpenAI / api.apikey.fun). Generates logos, icons, diagrams, UI mockups, and illustrations.
Detailed runbook in theimage-genskill (~/.omp/skills/image-gen/SKILL.md).- Memory the OCR-Memory way (arXiv 2604.26622): use an image to LOCATE a segment (the graph /
an indexed page), then fetch the CONTENT as exact text from codebase-memory-mcp or the file.
Image to find, text to read — never OCR precise content back out of a picture.
Examples
Review a UI: 8sync shot http://localhost:3000/login → one PNG instead of LoginScreen.tsx +
styles (~8k tok). GLM-5.3 / 5.3-Flash: look at the PNG yourself. GLM-5.2 only: zai-vision → text.
Grok the architecture (vision model): boot 8sync harness web, then8sync shot 'http://127.0.0.1:8731/codegraph?shot=1' -o /tmp/cg.png — ?shot=1 = canvas-only
(the React-Flow package graph full-viewport, big + legible, ~2k vision tokens). Never full-page-capture
that page: clusters/hotspots/search are exact text via /api/codegraph/overview|search|trace. Then for
a precise change, read the exact file slice as text. Non-vision model: read node positions from the
shot with 8sync locate /tmp/cg.png "<node label>" (automatic — see locate-anything skill).