From Zotero Library to Podcast: Turn Annotated Papers into Chaptered Audio
From Zotero Library to Podcast: Turn Annotated Papers into Chaptered Audio
You already live in Zotero. Your highlights, notes and PDFs are there. The missing step is: listen to them as podcast‑style episodes you can consume while you commute.
This piece shows a concrete, repeatable workflow to turn annotated papers in Zotero into chaptered audio episodes — the tools that actually work today, where privacy risks sit, and which knobs to flip for a researcher who needs citations and structure, not just a dumb TTS readout.
The promise and the real goal
Listenable research is not an audiobook. You want short episodes: a narrated overview, a few annotated excerpts, chapter markers with citation cues, and a downloadable MP3 for your phone. The goal here is procedural: export clean text from Zotero, assemble a short script, and generate audio with chapter metadata.
That’s achievable with free or open tools for extraction, and commercial TTS for polished audio — or entirely local tools if privacy is non‑negotiable.
The pieces that exist today
- Export annotations and item metadata as Markdown. The zotero‑mdnotes plugin is designed to export item metadata and notes into Markdown files you can edit and script from. (zotero‑mdnotes provides templates and placeholders so you don’t lose citation links.)
- Programmatic extraction. Zotero2MD is a small Python library that pulls highlights and notes from Zotero and writes Markdown files — useful if you want to batch a folder of papers or build a repeatable cron job.
- Local TTS inside Zotero. ZoTTS is a Zotero plugin announced by its author as a local text‑to‑speech add‑on; it uses system voices so speech stays on your machine.
- Cloud podcast features. ElevenLabs exposes a Create Podcast API that will accept text, enable chapters, captions, and produce downloadable audio; the API explicitly supports chapters and project metadata so you can generate an episode with chapter breaks and captions in one call.
Sources for each tool are below.
A practical 6‑step workflow
- Pick the items. In Zotero, select a paper or a saved search that matches a reading list.
- Extract highlights and metadata. Run zotero‑mdnotes (GUI) or Zotero2MD (script) to export each item’s annotations and a short metadata header (title, authors, year, zotero:// links). The exports are Markdown, which you can quickly edit.
- Edit the script. Turn the exported highlights into a 3–6 minute script: one‑sentence hook, 3–4 sections (summary, key finding, notable quote, 1‑line critique), and a closing citation. Keep each section under 90 seconds — that makes clean chapter boundaries.
- Choose TTS: local or cloud.
- Local (privacy‑first): Install ZoTTS in Zotero or route the Markdown into a local TTS engine (Windows/macOS built‑in voices, or open‑source engines). This keeps your text on device but yields less natural voices.
- Cloud (studio polish): Use ElevenLabs’ Create Podcast endpoint. The API supports chapters_enabled and captions, and can auto‑convert a text source into a podcast project — then download MP3s and chapter metadata.
- Add chapter markers. If you use ElevenLabs, set chapters_enabled=true and pass section boundaries as the API’s paragraph/section structure. For local workflows, render an M4B or MP3 and create a simple JSON or cue file with timestamps.
- Archive and link back. Keep the original Markdown and a small show‑notes file in your Zotero item (or a linked Obsidian/Notion note). Include zotero://select links so you can jump from the episode to the exact annotation.
Privacy and cost tradeoffs — the concrete facts
- Extraction is local. Both zotero‑mdnotes and Zotero2MD operate on your Zotero database and produce local Markdown exports. That means your raw highlights do not have to leave your machine.
- ZoTTS keeps audio local. The ZoTTS plugin was announced as using local system voices and not requiring external services, so no uploads are necessary for basic listening inside Zotero.
- ElevenLabs is cloud and chargeable. Their Create Podcast API creates projects and audio server‑side, supports chapters and captions, and currently covers the LLM cost in their endpoint but charges for audio generation; that implies sending script text to a third party for processing and storage according to their terms.
Choose cloud for natural, chaptered audio and faster iteration. Choose local when documents are sensitive or institutionally restricted.
Example use case: weekly literature‑review episodes
I export five key papers with Zotero2MD every Friday. I edit each Markdown into a 2–3 paragraph script and push them to ElevenLabs’ createpodcast call with chaptersenabled. The API returns a project with downloadable MP3 and chapter metadata. Each episode has a short show‑note file that includes zotero:// links back to the full items and the original highlights. Total time to produce: ~30 minutes per episode once the template is set up.
If you must avoid cloud services, I swap ElevenLabs for ZoTTS and a local audiobook packaging tool; production quality drops, but privacy is preserved.
What you’ll be able to do after this
- Automate batch exports of highlights from Zotero into clean Markdown.
- Assemble short, chaptered scripts suitable for podcast episodes.
- Choose between a local TTS route (privacy) or ElevenLabs’ Create Podcast API (polished audio + chapter support).
- Keep traceable links back to the original Zotero items so your audio stays auditable.
Final note
Turning Zotero into an audio-first research feed is now practical. The building blocks are mature: export plugins, simple Python tooling, local TTS plugins, and cloud podcast APIs with chapter support. The real decision is policy: how much of your script can you send to a third party for better audio.
Sources
- zotero-mdnotes documentation (export to Markdown)
- zotero-mdnotes README (GitHub archive)
- Announcing ZoTTS — Zotero Forums (ZoTTS local TTS plugin)
- Create Podcast — ElevenLabs API documentation (chapters_enabled, captions, project metadata)
- Zotero2MD — GitHub (Python tool to export annotations to Markdown)