Distillate

The essence of every paper you read.

Save to Zotero. Read on reMarkable. Distillate does the rest.

PyPI v0.4.1 Python 3.10+ MIT License
$ distillate # turn papers into notes! save to Zotero ──> auto-syncs to reMarkable │ read & highlight on tablet just move to Read/ when done │ V auto-saves notes + highlights
$ pip install distillate $ distillate --init

How it works

Save. Read. Highlight. Distill.

1 Save a paper to Zotero

Use the Zotero browser connector or mobile app. Distillate automatically picks up new papers from your library.

2 PDF syncs to your reMarkable

Distillate uploads the PDF to your tablet. Optionally removes it from Zotero to save storage (300 MB free tier).

3 Read and highlight on your tablet

Highlight the passages that matter to you. When you're done, just move the document to the Read folder and Distillate does the rest.

4 Distillate extracts your highlights

Highlighted text is pulled from the reMarkable, cleaned up, and saved as a structured markdown note grouped by page.

5 Everything stays on your machine

Your highlights, reading log, and PDFs are saved to an Obsidian vault or a plain folder on your computer.

Built in

An open-source CLI. No accounts, no cloud, your notes stay on your machine.

Local-first Plain files you own Markdown notes and PDFs on your machine. No accounts, no subscriptions, no lock-in. Works with Obsidian or any folder.
Zotero Round-Trip Highlights sync back Highlights flow back to Zotero as searchable annotations, visible in the built-in PDF reader and mobile apps
Handwritten notes Ink on PDF Ink strokes rendered on PDFs and typed text extracted. Works on RM1, RM2, and Paper Pro.
Citekey rename Automatic When metadata changes in Zotero, notes and PDFs are renamed to match. No orphaned files or broken links.
Scheduling launchd & cron Set it and forget it. Runs automatically on macOS or Linux.

Plug in what you need

Optional features you can enable with an API key or a config flag.

AI summaries Anthropic API One-liner, key learnings, and a paragraph summary for each paper you read
Handwriting extraction Claude Vision Margin notes transcribed via Claude and woven into your AI summary. Your thinking becomes part of your notes.
Paper suggestions Anthropic API Pick what to read next from your queue. Suggestions are promoted to your reMarkable home screen.
Smart metadata Semantic Scholar Auto-completes publication dates, venues, and citation counts from Semantic Scholar when Zotero data is incomplete
Collection filtering Zotero collections Scope Distillate to a specific Zotero collection instead of scanning your entire library
Email digest Free Resend account Daily paper suggestions and weekly reading logs, delivered to your inbox
Star on GitHub Questions or ideas? Start a discussion

Commands

distillateSync Zotero -> reMarkable -> notes (default)
distillate --importImport existing papers from Zotero
distillate --statusShow queue health and reading stats
distillate --suggestGet paper suggestions for your queue
distillate --digestShow your reading digest
distillate --scheduleSet up or manage automatic syncing
distillate --refresh-metadataRe-fetch metadata from Zotero + Semantic Scholar
distillate --listList all tracked papers
distillate --initRun the setup wizard

What you need

ComponentNotes
Zotero accountFreeManages your paper library
reMarkable tabletRequiredWhere you read and highlight (uses rmapi)
Obsidian or output folderOptionalWhere notes are saved locally
Anthropic API keyOptionalFor AI summaries, handwriting OCR, and suggestions
Resend accountOptionalFor weekly digest emails

Built with love and coffee by Romain Lacombe. Powered by rmapi, rmscene, PyMuPDF, and Claude Code.