Inkstone is a local-first figure readability checker for academic papers. It accepts either individual figure images or a PDF, measures visual density and final-size text, and produces PASS / WARNING / FAIL guidance without sending the selected files anywhere.
Inkstone is an independent authoring aid. It is not affiliated with ISSCC or MiraSmart, and its score is not an acceptance criterion.
Requirements: Python 3.9+ and a current Chromium, Chrome, Edge, or Firefox. No Python or JavaScript packages are required.
git clone https://github.com/Devil-SX/inkstone.git
cd inkstone
python3 serve.pyOpen http://127.0.0.1:8765/.
- Choose one or more PNG, JPEG, or WebP figures.
- Enter the width at which each figure will appear in print.
- Select diagram/plot, table, or photo thresholds.
- Keep local OCR enabled when the figure contains text.
- Analyze, then export JSON or print the report.
The default width is 3.94 inches, approximately 283.6 points. Physical width matters: OCR can only estimate a final font size after pixels are mapped to an intended print size. Density and whitespace ratios do not depend on this value, but the point-size warnings do.
PDF mode looks for captions that begin with Fig. N near the left edge of a
column, then checks the figure region above each caption. Vector text is read
directly from the PDF; OCR is used only when a detected figure has a sparse
text layer. This mode works with a figure-template PDF or a paper PDF that
follows the caption convention.
- overall and peak edge density;
- ink coverage and whitespace;
- locally dense subregions;
- total text characters;
- characters estimated below 7.5 pt, 5 pt, and 4 pt;
- a weighted readability score with separate table and photo handling.
Treat every warning as a review checklist. The final check is still whether a human can interpret the downsampled or printed figure at normal reading distance.
All file reads use browser File/Blob APIs. Inkstone has no upload endpoint,
analytics, telemetry, or runtime CDN dependency. PDF.js, Tesseract.js, both OCR
WebAssembly variants, and the English trained-data file are vendored in this
repository, so PDF rendering and OCR continue to work after the repository has
been cloned and the machine is offline. The application also ships a Content
Security Policy that limits scripts, workers, and network connections to its
own origin.
Run the privacy guard before publishing changes:
npm test
npm run privacyThe privacy guard rejects common absolute-path, private-project, credential, and secret patterns. It complements code review; it is not a secret scanner.
The browser application uses plain JavaScript modules and has no build step. See ARCHITECTURE.md for adapter and scoring boundaries. Third-party versions, licenses, source URLs, and hashes are recorded in THIRD_PARTY.md.
- Claim: the public ISSCC 2027 checker processes selected PDFs in the browser and describes itself as guidance rather than an acceptance gate. Source: https://submissions.mirasmart.com/ISSCC2027/ISSCC_Figure_Density_Tool.html Evidence: page introduction, usage note, and client-side file handling. Verified: 2026-08-27 19:22 CST.
- Claim: Tesseract.js supports browser workers and configurable local worker,
core, and language-data paths.
Source: https://github.com/naptha/tesseract.js/tree/v5.1.1
Evidence:
createWorkerbrowser API and worker option implementation. Verified: 2026-08-27 19:22 CST. - Claim: PDF.js is a browser-oriented PDF parser and renderer. Source: https://github.com/mozilla/pdf.js/tree/v3.11.174 Evidence: generic build and rendering API documentation. Verified: 2026-08-27 19:22 CST.
Inkstone is MIT licensed. Vendored components retain their upstream licenses; see THIRD_PARTY.md.