Every week, my "to read" folder gained ten PDFs and lost none. The classic fixes didn't work for me: pasting papers into a chat window one at a time is slow, and the summaries I got back had a worse problem — they sounded confident about things the paper never said. Numbers that appeared from nowhere. Methods described in more detail than the paper itself gave.
So I built the tool I actually wanted. It started as PaperLens, a small open-source CLI (MIT) of about 130 lines of Python: extract text from a PDF with pypdf, feed it to a model with one strict, structured prompt, and get back a Markdown report with the same five sections every time — TL;DR, key contributions, method, key results, reproduction notes. Three backends: a local Ollama model, Groq, and an "echo" dry-run mode that prints the exact prompt instead of sending anything, so you can inspect what would leave your machine.
The CLI worked. But it only worked for people comfortable in a terminal, one paper at a time, with no way to see a queue, preview a report, or export a whole batch into notes. That's the gap PaperLens Pro fills — the same engine, grown into a desktop app.
What changed going from CLI to app
The interface is Tkinter — unfashionable, but it's in the Python standard library, it's small, and it runs the same on Windows and macOS. On top of the unchanged engine I added:
- A batch queue: add PDFs one by one, by folder, or by drag and drop. Each paper gets a row and a status; one corrupt file fails on its own row instead of killing the batch.
-
In-app preview and one-click export — one
.mdper paper, or a single combined file for Obsidian, Notion, or a lab wiki. - A fourth backend: any OpenAI-compatible endpoint with your own key and base URL, next to Ollama (local, offline), Groq, and the echo dry-run. Keys live in a local settings file on your machine and are never written into reports or logs.
Two honest constraints carried over from the CLI. Long papers are excerpted to 12,000 characters to fit the model's context window, and the app tells you when that happens — the report covers the excerpt, not the full text. And scanned, image-only PDFs have no extractable text; they need OCR first, and the docs say so up front.
The honesty rule
The one design decision I care most about is in the prompt. It instructs the model: if the paper's text doesn't cover something, write "unclear" — do not fill the gap with something plausible. A report that admits a gap is useful; a report that invents a BLEU score is worse than no report, because you'll cite it. The sample report shipped in the package was generated from Attention Is All You Need, and you can see exactly where the "unclear" markers land. Whatever model you plug in, I'd rather you verify its output against a report structure that was designed to show its seams.
Why I ship source code instead of an .exe
PaperLens Pro is delivered as a source package with double-click launchers, not a signed installer. Partly that's practical — I'm an individual developer and code-signing certificates are a real cost — but it turned into a feature I now prefer: you can read every line of what touches your unpublished manuscripts, tweak the prompt, and make it yours. The launchers create a private environment and install the two small dependencies (pypdf, tkinterdnd2) on first run, and the package includes notes for building your own standalone executable with PyInstaller if you want one.
The bundle, and a second tool
Today I also packaged the rest of my researcher workflow around the app. The Researcher Stack Bundle is PaperLens Pro at its regular $39, with three things I sell separately added free: the original PaperLens Toolkit ($9 — the CLI, tutorial, and prompt templates, for one-paper-at-a-time terminal reading), the AI Prompt Pack for Researchers ($19 — ten paper-reading workflows with worked examples, written for chat LLMs), and my LaTeX Templates Bundle ($12 — six compile-ready templates, since reading is only half the job). $79 of list price, $39 total, and the bundle page states the one overlap between the packs up front rather than hiding it.
The other new tool is unrelated to papers: Claude Skills Manager ($19), a small desktop window for managing Claude Code skills — installing packs from a zip or folder, flipping skills on and off, backups and restores. It asks before overwriting anything, and it validates archives before extracting a single byte (absolute paths, .. traversal and symlink entries are rejected outright). I built it because my own ~/.claude/skills folder had outgrown me managing it by hand.
Links
- Researcher Stack Bundle ($39): https://zhanquan.gumroad.com/l/wbwkxc
- PaperLens Pro on its own ($39): https://zhanquan.gumroad.com/l/tyqszk
- Claude Skills Manager ($19): https://zhanquan.gumroad.com/l/kantvo
- The original PaperLens engine is open source (MIT), if you'd rather start from the CLI and build up.
If you read papers in bulk, tell me where the reports break down for your field — the "unclear" rule came from my own frustration, and the next fix probably will too.
Top comments (0)