Press a hotkey from anywhere (or click Capture in the app) โ screenshot any data โ get a plain-English answer + the right visualization, from 28 chart & map types.
Local-first ยท model-agnostic ยท open source. The model reads your screen; the app does the math.
Website ยท Download ยท Discussions ยท Issues
๐ธ Screenshot anything on screen โ a chart, a table, a dashboard, a PDF, a spreadsheet. ๐ง A vision model reads it and gives AI analysis in plain English. ๐ The app draws the right chart (Chart.js) or map (Leaflet) from the data it extracted, choosing from 28 supported visualizations. ๐ Local-first & private โ runs on a local CLI you already have or your own API key; no accounts, no telemetry. ๐พ Export to PDF ยท Word ยท PPT ยท PNG, and keep a capture history on disk.
Core principle: the model extracts and classifies the numbers; the app does the arithmetic โ deterministic and auditable. The app computes every metric itself, so the headline is arithmetic on the extracted values, not a figure the model wrote freehand.
Drag a box around on-screen data, and Screenchart turns it into an analysis + a visualization, without leaving what you're doing. Each capture is a conversation โ ask follow-ups and it keeps the thread.
screenchart-demo.mp4
Screenchart picks the visual that fits the data it extracted โ and you can switch to any of
28 chart & map types from the โฏ menu (Recommended / Selected / + More). Grouped data
supports Values/Periods toggles and small multiples where they fit.
| Group | Types |
|---|---|
| Bar & column | Column ยท Clustered column ยท Stacked column ยท 100% stacked column ยท Bar ยท Clustered bar ยท Stacked bar ยท 100% stacked bar |
| Line & area | Line ยท Line with markers ยท Area ยท Stacked area ยท Line + column (combo) |
| Part-to-whole | Pie ยท Donut ยท Treemap ยท Funnel |
| Distribution & relationship | Scatter ยท Bubble ยท Histogram ยท Box plot ยท Heatmap |
| Flow & finance | Sankey ยท Candlestick |
| Single value / tabular | Gauge ยท Table |
| Maps | Region map (choropleth) ยท Bubble map |
Charts render with Chart.js 4 (+ treemap, sankey, matrix, financial, and boxplot plugins); maps with Leaflet (OpenStreetMap tiles).
Screenchart never ships or installs a model. It runs a local CLI you already have, or calls a cloud API with your own key. Pick per your privacy/latency needs in Settings โ Execution.
![]() Execution settings โ choose a detected Local CLI, or bring your own key for a cloud provider. |
Screenchart detects agent CLIs already on your PATH and runs them in read-only mode. It
never runs npm/brew/curl install โ the "Install" button only opens the vendor's page.
| Local CLI | Vendor |
|---|---|
| Claude Code | Anthropic |
| Antigravity | |
| Codex CLI | OpenAI |
| Grok CLI | xAI (community) |
| OpenCode | opencode.ai (BYOK) |
| Cursor Agent | Cursor (Anysphere) |
Stored per-provider on your machine โ plaintext in userData/config.json (gitignored; see PRIVACY.md), never logged and never sent to a renderer.
| Family | Endpoints |
|---|---|
| Anthropic | Claude API |
| OpenAI | OpenAI API |
| Gemini | Google Gemini API |
| Gateway | Any OpenAI-compatible endpoint โ OpenRouter, Ollama, LM Studio, or a custom URL |
Your data is trapped in a picture โ a chart in a slide, a table in a PDF, a dashboard you can't export. The usual options are all bad: squint and eyeball it, re-type it into a spreadsheet, or upload the screenshot to a cloud chatbot that may invent the numbers.
Screenchart is the local-first, number-honest alternative:
- ๐ Local & private. Runs on a local CLI or your own key. No accounts, no telemetry, no surprise network calls. The only declared external fetch is OpenStreetMap tiles โ and only when a map is shown.
- ๐งฎ Number-accurate by design. The model extracts raw values and classifies the data; the app computes every metric and writes the headline. The model is forbidden from writing computed numbers, so the figure you read is the figure that was there.
- ๐ค Model-agnostic. The
claude/codex/cursor-agent/ โฆ already on yourPATHare the engine โ or any cloud API via BYOK. Swap freely. - ๐ Charts and maps, not just text. Chart.js (bars, lines, treemap, sankey, matrix, boxplot, financial) and Leaflet maps, picked to fit the data.
- ๐ฌ Conversational. Every capture is a thread โ follow-ups replay the full context.
- ๐ฆ Yours to keep. History persists on disk; export to PDF / Word / PPT / PNG.
| Eyeball + calculator | Re-type into a spreadsheet | Cloud AI chatbot | Screenchart | |
|---|---|---|---|---|
| No manual re-typing | โ | โ | โ | โ |
| Numbers computed by the app (not guessed) | you do it | you do it | โ (model may invent) | โ |
| Charts + maps generated | โ | manual | sometimes | โ |
| Runs locally / private | โ | โ | โ | โ (local CLI) |
| Bring your own model/key | โ | โ | rarely | โ |
| Export PDF / Word / PPT / PNG | โ | manual | โ | โ |
| Open source | โ | โ | โ | โ MIT |
Why does my OS warn about this app? Screenchart is free and open source and isn't signed with a paid code-signing certificate, so macOS and Windows show a one-time security prompt on first launch. This reflects the missing certificate, not the app's safety. The full source and build pipeline are public, and checksums are published with every release. See the first-launch steps below, or skip the prompt entirely by running from source.
Recommended if you have git: no installer and no first-launch security prompt.
git clone https://github.com/AshishB2000/screenchart.git
cd screenchart
npm install # postinstall fetches map GeoJSON
npm startRequirements: Node.js 20+ and npm. npm start compiles the TypeScript
(npm run build:ts, run automatically) and launches Electron โ no bundler. Packaging installers
uses electron-builder (npm run dist:mac / npm run dist:win).
macOS โ first launch (unsigned build)
Screenchart is a free, open-source build not signed with a paid Apple certificate, so macOS blocks it on first open. To allow it (you only do this once):
- Double-click Screenchart โ you'll see "could not verify." Click Done.
- Open System Settings โ Privacy & Security.
- Scroll down to the message about Screenchart and click Open Anyway.
- When it prompts again, click Open Anyway, then authenticate with your password or Touch ID.
It opens normally afterward. Screen Recording setup is in QUICKSTART.md.
Windows โ first launch (unsigned build)
The installer isn't signed with a paid certificate, so Windows SmartScreen warns about the download. Click More info โ Run anyway to continue.
- In Settings โ Execution, pick a detected Local CLI or add an API key.
- Press the capture hotkey from any app: โโฅS on macOS, Ctrl+Alt+S on Windows (configurable).
- Drag a box around a chart, table, or any data.
- Read the plain-English analysis + chart; ask a follow-up; export if you want.
The full display under your cursor is captured first (a "frozen frame"), painted into a dimming overlay, and your selected region is cropped from that still image โ so the overlay never appears in the result. The crop goes to your configured model (inline over HTTPS for BYOK, or a temp file handed to the local CLI), which returns a strict JSON envelope: raw extracted table + data shape + suggested calculations + a number-free headline angle. The app validates it, does the arithmetic, composes a number-accurate headline, and renders the chart or map.
Architecture and internals โ CLAUDE.md.
macOS requires Screen Recording permission, or captures come back black. On first capture,
grant it in System Settings โ Privacy & Security โ Screen Recording, then relaunch. In dev you
grant it to whatever launches Electron (your terminal / Electron.app), not "Screenchart" โ that
applies once packaged.
The default hotkey is Ctrl+Alt+S (configurable). Captures are cropped from the actual returned bitmap resolution, so selections stay accurate under display scaling (125โ150%). The installer is unsigned, so SmartScreen warns on first run โ see the download steps above.
Local-first is a core promise. Captures, history, and settings stay on your machine. Analysis sends the cropped image (plus your prompt) to the model you chose โ a local CLI process, or your BYOK cloud endpoint over HTTPS โ and nowhere else. No telemetry, no analytics, no crash-reporting, no auto-updater. OpenStreetMap tiles are the one declared external fetch, only when a map renders. Full details โ PRIVACY.md.
API keys are stored in
userData/config.json(gitignored). See PRIVACY.md for the exact storage details before adding a key.
Issues and PRs welcome. New work goes on a branch off main and merges via PR โ see
CLAUDE.md for conventions. File bugs and feature requests through the
issue templates; ask questions in
Discussions.
Helper scripts live in the screenchart-dev skill at
.claude/skills/screenchart-dev/scripts/ (POSIX bash):
| Script | What it does |
|---|---|
check-prereqs.sh |
Verify the build env: Node 18+, npm, authenticated gh, electron-builder. |
setup-workspace.sh |
Bootstrap a fresh clone (prereqs + npm install). |
create-pr.sh |
Push the current branch and open a PR into main (refuses on main). |
create-issue.sh |
Open a GitHub issue in AshishB2000/screenchart. |
bash .claude/skills/screenchart-dev/scripts/setup-workspace.shMIT ยฉ Screenchart contributors.






