EPUB · Office · OpenDocument · SVG · WACZ
Five small, offline tools for the files you ship.
Each one reads a file format directly and reports what breaks accessibility, or proves an archive has not changed. They run on your machine, in a container, or in CI. No network, no JVM, no GUI.
$ booklens audit book.epub --quietbook.epub: 10 error(s), 8 warning(s), 1 info$ officelens report.docx --quietreport.docx: 2 error(s), 2 warning(s), 0 info$ odflens budget.ods --quietbudget.ods: 0 error(s), 1 warning(s), 0 info$ iconlens icons/*.svg --quietlogo.svg: 3 error(s), 2 warning(s), 0 info$ waxseal verify archive.wacz -s archive.seal.jsonOK root 7ce7902d… signature valid
The tools
Four accessibility auditors and one archive-integrity tool. Same shape: a CLI, a library, JSON and SARIF output, and a browser playground on every site.
bunx github:srivtx/booklens#main
bunx github:srivtx/officelens#main
bunx github:srivtx/odflens#main
bunx github:srivtx/iconlens#main
bunx github:srivtx/waxseal#main
Why these exist
Accessibility checking is solved for PDF and HTML, and largely unsolved for the formats people actually author documents in.
These tools fill the gaps the incumbents leave: the asset on disk, the Office file, the OpenDocument file, the EPUB that needs repairing rather than just reporting. They share one small, boring contract, so wiring any of them into a pipeline is the same job every time.
For agents
The output is made to be read by a program, not scraped from a screen.
Every tool emits stable JSON with --json, writes SARIF 2.1.0 for code scanning, and uses a documented exit-code scheme. iconlens reads standard input, so a file never has to touch disk. Point an agent at the JSON and it gets the same findings a human sees, with a rule code and a WCAG reference on each one.
$ iconlens logo.svg --json{ "file": "logo.svg", "counts": { "error": 3, "warning": 2, "info": 0 }, "issues": [ { "code": "SVG-NAME-001", "severity": "error", "wcag": "4.1.2" } ]}
An MCP server
lenses-mcp exposes all five tools to any Model Context Protocol client, so an agent can audit a file and read the result without shelling out by hand. It speaks stdio and returns the same JSON. Eight tools: audit for each format, booklens_fix, and waxseal_seal, waxseal_verify, and waxseal_inspect.
{ "mcpServers": { "lenses": { "command": "bunx", "args": ["github:srivtx/lenses-mcp#main"] } }}
Each site also serves an llms.txt, so an agent can read the docs index without parsing HTML.
Install
Each tool installs with one script, or runs without installing.
# install a binary$ curl -fsSL https://raw.githubusercontent.com/srivtx/<tool>/main/install.sh | sh# or run one without installing$ bunx github:srivtx/<tool>#main --help# tools: booklens officelens odflens iconlens waxseal
Requires Bun. The install script checks for Bun, installs the binary globally, and verifies it is on your PATH.