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.

Updated 1mo 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.