Skip to main content
Back to Blog

How to Summarize PDFs Locally and Export Clean Markdown or Notion Notes

The promise

You should be able to turn a long PDF into a tidy, listenable note — without uploading it to a cloud service. In 2026 that promise is real. But it’s uneven. Some tools do the whole job on-device and output clean Markdown. Others require a self-hosted server or still send text to a third party. This piece shows which options actually run locally, what they export, and a 10‑minute workflow to get a Markdown or Notion‑ready summary you can listen to or share.

The landscape, in plain terms

  • Local LLM runners (Ollama, private setups) let you keep models and prompts on your machine. Example: a lightweight Rust CLI (pdf‑summarizer) demonstrates summarization using an Ollama server — start ollama serve locally, then run the summary command against a PDF.
  • Document converters (PyMuPDF helpers, LlamaIndex readers) extract structure and produce Markdown from PDFs with tables, headings, and OCR support.
  • Desktop and vault tools (Obsidian plugins) tie converters and self‑hosted services into your notes app so the output lands where you work.

Each layer answers a different question: extraction (PDF → Markdown), summarization (Markdown → short summary), and export (file or API → Notion/Obsidian). You need one tool from each layer, or an integrated app that bundles them.

What actually runs offline

  • LlamaIndex’s PDFMarker Reader will convert PDFs into Markdown and preserves tables and layout. It supports OCR languages and lets you control page ranges and batch sizes for local processing — the docs show options for max_pages and OCR language lists.
  • Source: LlamaIndex PDFMarker Reader docs.
  • pymupdf4llm (PyPI) converts PDF pages to GitHub‑flavored Markdown, detects headers by font size, handles lists, code blocks and will run OCR automatically when Tesseract is available. Version 0.3.4 (released Feb 14, 2026) documents JSON and plain‑text outputs to plug into a local LLM pipeline.
  • Source: pymupdf4llm PyPI page.
  • Ollama is a practical on‑machine LLM runner. The public pdf‑summarizer example shows an offline pattern: run ollama serve locally, then call a CLI that feeds extracted text into the model and returns a summary. That proves a fully local summarization loop is achievable on a developer’s laptop or an M‑series Mac with the right model.
  • Source: pdf‑summarizer GitHub (Ollama example).
  • Obsidian plugins (Marker PDF to MD and similar) can call a hosted API or a self‑hosted Marker instance to convert PDFs to Markdown inside your vault. That means you can keep the conversion on‑prem if you run the Marker backend yourself.
  • Source: Marker PDF to MD plugin page.
  • Grassroots projects and apps (LocalGPT, PrivateGPT, chatd) are explicitly built to keep data local and provide a UI for document chat and summaries; It’sFOSS lists these as practical choices for privacy‑first users.
  • Source: It’s FOSS round‑up of local AI doc tools.

What each tool outputs, and how usable it is

  • Markdown-first extractors (pymupdf4llm, LlamaIndex PDFMarker) give you a file you can open in Obsidian or push to a Git repo. The Markdown will include headings, lists, and basic table markup — often enough for immediate reading or TTS conversion.
  • Local LLMs (Ollama or PrivateGPT pipelines) produce human‑level summaries and can be scripted to emit front‑matter or a structured note ready for Notion or Obsidian.
  • Obsidian plugins package extraction into your vault and can be configured to place converted Markdown in a target folder with metadata. If you self‑host the conversion backend, no cloud upload is required.

Practical 10‑minute workflow (privacy-first)

  1. Extract: Run pymupdf4llm.to_markdown("paper.pdf") to create a clean output.md with headers, lists, and tables.
  2. Summarize locally: Start ollama serve on your machine. Use a small to medium model and feed output.md into your local summarizer script (the pdf‑summarizer example shows the exact pattern).
  3. Output formatting: Ask the local model to return a short summary plus a structured Markdown note (title, TL;DR, 3 bullet takeaways, citations by page).
  4. Push to Notion or Obsidian: Save the Markdown into your Obsidian vault, or push via Notion API from a local script if you need it in Notion (the file is already Markdown‑ready).
  5. Optional TTS: Run any offline TTS on the Markdown (convert to plain text and feed to your on‑device TTS engine) to create a short listenable briefing.

This path keeps raw PDFs and model inference on your hardware. The weak link is models — large, high‑quality closed models may not run locally; you’ll pick a smaller open model or a quantized build.

Limits and tradeoffs

  • Quality vs. privacy: Local models are improving fast, but they still lag behind the top cloud LLMs for nuance and citation control unless you run large models on powerful hardware.
  • OCR edge cases: Complex layouts and dense tables sometimes require the layout extensions (PyMuPDF‑Layout or Marker’s advanced OCR) to preserve fidelity.
  • Setup time: Self‑hosting Ollama, Tesseract, or a Marker backend takes time and occasional maintenance. For many users, a hybrid model (local extraction + cloud summarization under a BAA or strict policy) is a practical compromise.

Who should use this now

  • Researchers and students who need private notes and local export to Obsidian or Git repos.
  • Lawyers and clinicians who must avoid cloud uploads for sensitive files (paired with internal policy checks).
  • Power users who want portable Markdown that feeds into TTS pipelines or podcast-style briefings.

Bottom line

You can now convert PDFs to structured Markdown and produce reasonably good local summaries without sending text to a third party. Use PyMuPDF‑based extractors (pymupdf4llm or LlamaIndex’s PDFMarker) to get clean Markdown. Use Ollama or PrivateGPT setups to summarize that Markdown on‑device. If you run a self‑hosted Marker service, Obsidian plugins will drop the result directly into your vault.

If privacy matters, these workflows are the only ones that guarantee your documents never left your machine.

TL;DR

Run a PDF→Markdown extractor (pymupdf4llm or LlamaIndex PDFMarker), summarize with a local LLM (Ollama/PrivateGPT), then save the resulting Markdown in Obsidian or push it to Notion via API.

Sources