PDF Read Aloud
approvedby gurnoor-rana
Reads open PDF files aloud using the Web Speech API. Includes play, pause, stop, skip controls, speed adjustment, voice selection, and click-to-start. - This plugin has not been manually reviewed by Obsidian staff.
PDF Read Aloud – Obsidian Plugin
Reads your open PDF files aloud using your device's built-in text-to-speech. No API key, no internet connection, no paid service required.
Features
- Follow-along highlighting — the sentence being read and the word currently being spoken are highlighted right in the PDF, with fully customizable colors and opacity (so it works on any PDF background)
- Auto-scroll — the PDF scrolls automatically to keep the highlighted sentence in view
- Play / Pause / Stop controls
- Skip forward / back by a configurable number of sentences (default 5, adjustable up to 20)
- Read from click — enable click mode, then click anywhere in the PDF text layer to start reading from that point
- Read selection — highlight any text in the PDF, then press "Read selection" to read only that portion
- Right-click context menu — right-click inside any PDF to get quick access to "Read from here" and "Read selected text"
- Progress bar — shows how far through the document you are; click to jump to any position
- Speed control (0.5× – 2.0×)
- Voice selector — uses all voices installed on your system
- Status bar indicator — shows current sentence and page number while reading
- Command Palette support for all actions
Installation
Via Community Plugins (recommended)
- Open Obsidian Settings → Community Plugins
- Turn on Community Plugins if not already enabled
- Click Browse and search for PDF Read Aloud
- Click Install, then Enable
Manual installation
- Go to your Obsidian vault folder
- Navigate to
.obsidian/plugins/ - Create a folder named
pdf-read-aloud - Download
main.js,manifest.json, andstyles.cssfrom the latest release and copy them into that folder - In Obsidian: Settings → Community Plugins → find PDF Read Aloud and enable it
macOS tip: Press Cmd+Shift+. in Finder to show hidden folders like
.obsidian.
Windows tip: Enable Show hidden items in File Explorer.
How to Use
Basic playback
- Open a PDF file in Obsidian
- Click the 🔊 icon in the left ribbon or open the Command Palette and run PDF Read Aloud: Open control panel
- Press ▶ to start reading from the beginning
- Use ⏸ to pause, ⏹ to stop, ⏮/⏭ to skip sentences
Read from a specific position
- Click Read from click in the control panel (or run the command)
- Click anywhere in the PDF text — playback starts from the nearest sentence
Read only selected text
- Highlight text in the PDF
- Click Read selection in the control panel, or right-click inside the PDF and choose Read selected text
Right-click menu
Right-click anywhere inside the PDF viewer for quick access to both Read from here and Read selected text.
Settings
All settings are available under Settings → PDF Read Aloud:
| Setting | Description | Default |
|---|---|---|
| Speech rate | Reading speed (0.5× slow → 2.0× fast) | 1.0× |
| Pitch | Voice pitch | 1.0 |
| Volume | Volume level | 1.0 |
| Skip size | Number of sentences to skip forward/back | 5 |
| Voice | System TTS voice to use | System default |
| Highlight while reading | Color the sentence and word being spoken in the PDF | On |
| Auto-scroll to sentence | Keep the highlighted sentence visible while reading | On |
| Sentence highlight color | Color + opacity of the sentence highlight | Yellow, 30% |
| Word highlight color | Color + opacity of the current-word highlight | Orange, 55% |
Highlight colors can also be changed directly from the control panel.
Notes
- Works with text-based PDFs only. Scanned or image-only PDFs will have no readable text.
- Uses the browser's built-in Web Speech API — completely free, works offline, no account needed.
- Voice availability depends on your operating system and installed language packs.
Changelog
1.3.0
- Read Markdown notes aloud too — press Play with a note active (markdown syntax is stripped, code blocks skipped)
- Resume position: each PDF continues from where you last stopped (toggleable, last 20 files)
- Smarter sentence splitting: abbreviations (Dr., e.g., No. 5), initials and decimals no longer break sentences
- Words hyphenated across line breaks are rejoined ("adven-ture" → "adventure")
- Repeated headers, footers and page numbers are detected and skipped (toggleable)
- Two-column layouts are detected and read in the correct order (toggleable)
- Extracted text is cached per file — replaying an unchanged PDF starts instantly
- Playback stops automatically (saving your position) when the file being read is closed
- Very long sentences are split into clause-sized chunks so voices no longer cut out on them
- Scanned/image-only PDFs now get an OCR tip (detects the Text Extractor plugin)
- Voice lists are sorted best-first, with in-settings tips for installing better system voices
- Marked as desktop-only pending mobile testing
1.2.0
- Follow-along highlighting: the sentence being read is highlighted in the PDF, and the current word gets a stronger highlight (word-level tracking depends on the selected voice supporting word-boundary events)
- Auto-scroll keeps the highlighted sentence in view, including jumping to not-yet-rendered pages
- Customizable highlight colors and opacity, editable from both the settings tab and the control panel
- Highlighting uses the CSS Custom Highlight API, so the PDF text layer is never modified
1.1.0
- Fixed voice dropdown not populating when panel opens before voices are loaded
- Skip size is now configurable (1–20 sentences) from the panel and settings
- Removed all
innerHTMLusage for improved security - Improved
_deepFindto skip DOM nodes and avoid false positives - Better per-page error handling during text extraction — one bad page no longer aborts the whole document
- Context menu items no longer use emoji in titles (per Obsidian style guidelines)
1.0.0
- Initial release
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.