Speak From Here

unlisted

by Jonas Smith

Read the current note aloud with the device's built-in voice, starting from the cursor.

Updated 1d agoMIT
View on GitHub

Speak From Here

Read a note aloud with the voice already on your device, starting from wherever the cursor is.

Most text-to-speech plugins read a note from the top. This one starts at the cursor, which turns listening into part of editing: fix a paragraph, put the cursor back at its start, and hear just that paragraph again.

Currently in beta.

Features

  • Start anywhere. Read from the cursor, from a selection, or from the top of the note.
  • Sentence-level seeking. Skip back and forward a sentence at a time rather than scrubbing blindly through audio.
  • Pause, edit, resume. The cursor follows along as it reads, so pausing to change a line and resuming picks up where you were.
  • No account, no API key, no network. Uses the speech synthesis built into your operating system. Nothing leaves your device.
  • Markdown-aware. Skips frontmatter, code blocks, comments, and link targets. Reads the text, not the syntax.
  • Controls where you need them. Ribbon icons, a floating control bar on mobile, the note's ... menu, the long-press menu, and commands you can bind to hotkeys.

Usage

Put the cursor where you want to start and run Read note from cursor — from the ribbon, the command palette, or a hotkey of your choosing.

While it reads:

ActionWhere
Pause / resumeFloating bar, ribbon, status bar, or command
Back one sentenceFloating bar or command
Skip ahead one sentenceFloating bar or command
StopFloating bar, ribbon, or command

Select text before starting and it reads only the selection. Long-press a word on mobile and choose Read from here to start there.

No hotkeys are assigned by default. Settings → Hotkeys, search for "Speak From Here", and bind what you use.

Settings

SettingDefaultWhat it does
VoiceSystem defaultAny voice installed on the device
Speed1.00.5× to 2.5×
Pitch1.0
On-screen controlsMobile onlyThe floating control bar
Pause and stop in the ribbonOnAdds two more ribbon icons beside the read icon
Controls in the note's menuOnAdds read, pause, and stop to the ... menu
Move the cursor as it readsOnKeeps the cursor on the current sentence
Read the selection when there is oneOn
Pause when Obsidian goes to the backgroundOnHolds your place when the app is backgrounded
Sentence length limit240 charactersWhere long sentences split. Shorter chunks seek more precisely but pause more often

Platform support

PlatformStatus
Windows, macOS, LinuxWorks
iOS, iPadOSWorks
AndroidNot supported

Android's system WebView does not implement the Web Speech API — window.speechSynthesis simply doesn't exist there, so the plugin shows a notice and does nothing. This is a platform limitation, not something the plugin can work around.

Two things to know on iOS:

  • Playback stops when Obsidian goes to the background or the screen locks. A WebView gets no background audio. If hands-free listening with the screen off is what you want, you need a plugin that generates audio files instead.
  • Only the pre-installed system voices are reachable. Downloaded enhanced and premium Siri voices are not exposed to web speech, so it will sound flatter than Siri does elsewhere.

Installation

Community plugins

Settings → Community plugins → Browse, search for Speak From Here, install, and enable.

Manual

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Put all three in YourVault/.obsidian/plugins/speak-from-here/.
  3. Restart Obsidian and enable the plugin in Settings → Community plugins.

Mobile vaults sync plugin folders, so installing on a desktop and enabling "Installed community plugins" in Sync settings on both devices will carry it across. Force-quit the mobile app afterwards — Obsidian only scans the plugins folder at launch.

How it works

The note is split into sentence-sized chunks, each of which remembers its character offset in the real document. Frontmatter, fenced code, block math, and comments are blanked to whitespace first, so offsets stay aligned with what's actually in the editor. Starting from the cursor is then a matter of finding the first chunk that ends past the cursor's offset.

Chunking at the sentence level also sidesteps two platform quirks: Chromium cuts off utterances longer than about fifteen seconds, and WebKit drops an utterance queued in the same tick as a cancel().

Known limitations

  • Reading view is not supported. The plugin needs an editor to read the cursor position from.
  • Rewind moves by sentence, not by seconds.
  • Pausing mid-sentence on mobile replays that sentence from its start on resume, because WebKit's pause() and resume() are unreliable in an app WebView.

License

MIT

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.