Local TTS - Read Your Notes

unlisted

by applefavorite

High-quality offline text-to-speech for your notes. No API key needed. Powered by Kokoro-82M neural TTS running locally via WebAssembly.

โ˜… 1 starsUpdated 3mo agoMIT
View on GitHub

๐ŸŒ English | ไธญๆ–‡ | Deutsch | ๆ—ฅๆœฌ่ชž | Espaรฑol | Franรงais | ํ•œ๊ตญ์–ด | Portuguรชs

Local TTS โ€” Read Your Notes Aloud

High-quality offline neural text-to-speech for Obsidian. No API key, no internet (after first run), no subscriptions.

Features

  • ๐Ÿ”‡ 100% offline โ€” runs entirely on your machine after the first model download
  • ๐Ÿง  Neural quality โ€” powered by Kokoro-82M, a state-of-the-art 82M-parameter TTS model
  • ๐Ÿ“ Smart Markdown parsing โ€” skips code blocks, frontmatter, URLs, tags, math blocks, comments
  • โœจ Sentence highlighting โ€” editor highlights the sentence currently being read
  • ๐Ÿ“ Auto-scroll โ€” editor scrolls to keep the current sentence in view
  • ๐Ÿ”– Bookmark & resume โ€” automatically saves your position when you pause or stop; resume anytime
  • โšก Streaming playback โ€” audio starts immediately while the next sentences are pre-generated
  • ๐ŸŽ›๏ธ Playback controls โ€” play/pause, skip sentence, variable speed (0.5ร—โ€“2.0ร—)
  • ๐Ÿ—ฃ๏ธ 7 voices โ€” American & British, male & female
  • ๐Ÿ–ฅ๏ธ Desktop only โ€” macOS, Windows, Linux (requires Electron / Node.js)

Screenshots

Reading with sentence highlighting

Reading

Settings

Settings

Commands

Commands

Playback controls

Controls

Bookmarks

Bookmarks

Requirements

  • Obsidian Desktop (not supported on mobile)
  • Node.js โ‰ฅ 18 installed on your system
  • ~90 MB disk space for the default model
  • Internet access only for the first model download (cached locally after that)

Installation

Method 1: BRAT (Recommended)

  1. Install the BRAT plugin from Obsidian Community Plugins
  2. Open Settings โ†’ BRAT โ†’ Add Beta Plugin
  3. Enter applefavorite/obsidian-local-tts
  4. Enable the plugin in Community Plugins settings
  5. BRAT will handle updates automatically

Method 2: Manual Installation

  1. Download main.js, styles.css, manifest.json, and the server/ folder from the latest release.
  2. Copy everything to <vault>/.obsidian/plugins/obsidian-local-tts/.
  3. Enable Local TTS in Settings โ†’ Community Plugins.

The plugin will automatically install its server dependencies (kokoro-js) on first load.

Method 3: Community Plugins (Coming Soon)

Search "Local TTS" in Settings โ†’ Community Plugins (pending review).

First-run checklist

  1. Open Settings โ†’ Local TTS.
  2. Confirm Server Dependencies shows โœ…. If not, click Install Dependencies.
  3. The TTS server starts automatically (look for โœ… Running in Server Status).
  4. On first start the Kokoro model (~90 MB) downloads from HuggingFace โ€” this takes 1โ€“3 minutes depending on your connection.
  5. Once the status shows model ready, open any note and press Cmd/Ctrl + Shift + L.

Usage

  1. Click the ๐Ÿ”Š speaker icon in the left sidebar, or press Cmd/Ctrl + Shift + L.
  2. Choose where to start: beginning, cursor position, or last bookmark.
  3. Control playback from the status bar at the bottom of the window.
ActionHow
Read current noteCmd/Ctrl + Shift + L or click ๐Ÿ”Š in the ribbon
Read selected textSelect text โ†’ right-click โ†’ Read selection aloud
Pause / ResumeCmd/Ctrl + Shift + P or click โธ in the status bar
StopCmd/Ctrl + Shift + S or click โน in the status bar
Resume from bookmarkCmd/Ctrl + Shift + R or click "๐Ÿ”– Resume" in the status bar

Keyboard Shortcuts

CommandDefault Hotkey
Read current noteCmd/Ctrl + Shift + L
Pause / ResumeCmd/Ctrl + Shift + P
Stop readingCmd/Ctrl + Shift + S
Resume from bookmarkCmd/Ctrl + Shift + R
Next sentenceโ€” (assignable in Hotkeys)
Previous sentenceโ€”
Speed up (+0.25ร—)โ€”
Speed down (โˆ’0.25ร—)โ€”
Show all bookmarksโ€”
Clear bookmark for current noteโ€”

Reading Start Options

When you press Cmd/Ctrl + Shift + L, a picker appears with:

  • From beginning โ€” start at sentence 1
  • From cursor โ€” start at whichever sentence the cursor is in
  • From bookmark (if one exists) โ€” resume from where you last stopped

Bookmark System

  • A bookmark is automatically saved whenever you pause or stop reading.
  • The bookmark stores the sentence index and a preview snippet.
  • The ๐Ÿ”– Resume pill in the status bar appears when you are not playing and the active note has a bookmark.
  • Click ๐Ÿ”– in the playback bar to jump to the bookmark while reading.
  • Right-click ๐Ÿ”– to clear the bookmark.
  • Click ๐Ÿ“‹ to see all bookmarks across your vault.

Voices

VoiceDescription
af_sky (default)American Female โ€” Sky
af_bellaAmerican Female โ€” Bella
af_nicoleAmerican Female โ€” Nicole
am_adamAmerican Male โ€” Adam
am_michaelAmerican Male โ€” Michael
bf_emmaBritish Female โ€” Emma
bm_georgeBritish Male โ€” George

Settings Reference

TTS Server

SettingDefaultNotes
Server Dependenciesโ€”Shows install status; button to install
Server Statusโ€”Live poll; shows model loading progress
Auto-start serverOnStarts server when plugin loads
Server Port19199Change if port conflicts
Node.js Pathauto-detectOverride if auto-detect fails
Model Quantizationq8 (~90 MB)q4 = faster/smaller; fp32 = best quality

Voice & Playback

SettingDefault
Voiceaf_sky
Speed1.0ร—
Auto-scrollOn
Highlight current sentenceOn
Highlight coloryellow 30%

Content Filtering (all on by default)

Skip code blocks ยท Skip frontmatter ยท Skip comments ยท Skip footnotes ยท Skip URLs ยท Skip hashtags ยท Skip math blocks

Known Limitations

  • Desktop only โ€” ONNX Runtime requires Node.js native binaries not available in Obsidian mobile.
  • Node.js required โ€” the inference server runs as a separate Node.js process.
  • First-run internet โ€” the Kokoro model is downloaded from HuggingFace on first use only.
  • macOS Gatekeeper โ€” if Node.js was installed via nvm, the plugin auto-detects it via login shell; set the path manually in settings if detection fails.
  • Source view only โ€” sentence highlighting works in the Markdown source editor, not in Reading View.

FAQ

The status bar shows nothing. The playback bar only appears while reading. The ๐Ÿ”– Resume pill appears when the active note has a bookmark.

Server keeps showing "not running". Go to Settings โ†’ Local TTS โ†’ Start Server. Check the Node.js Path setting โ€” click Detect to auto-find your Node.js installation.

"Could not find node" error. Install Node.js (โ‰ฅ 18), then open settings and click Detect next to Node.js Path, or paste the path manually (e.g. /Users/you/.nvm/versions/node/v20.20.2/bin/node).

Model download is slow / fails. The ~90 MB model is downloaded from HuggingFace. If it times out, restart the server โ€” it will resume automatically.

Audio sounds choppy. Lower the number of concurrent pre-generations in Settings โ†’ Advanced (default 3). Or try a faster quantization (q4).

Highlight is stuck on the first sentence. Make sure you are in the source editor (not Reading View). If the problem persists, try disabling and re-enabling the plugin.


Like offline TTS? Check out PaperVoice on the App Store โ€” AI-powered PDF reader for academic papers.

Support

If you find this plugin useful, consider buying me a coffee โ˜•

Buy Me A Coffee

License

MIT ยฉ 2025 applefavorite

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.