README file from
GithubSay
A lightweight Obsidian plugin that reads aloud the H1 heading of a target note when you hover over an internal link, using the system's built-in TTS engine.
Features
- Hover to read — Hover over any internal link to hear the target note's H1 heading (falls back to filename if no H1).
- Cross-platform — Works with macOS
say, Linuxspd-say/espeak, and Windows PowerShellSpeechSynthesizer. - Configurable — Choose your TTS command, voice, speech rate, and trigger delay.
- Arguments template — Power users can specify a custom argument template (e.g.
-v {voice} -s {rate} {text}) to override defaults.
Installation
From Obsidian Community Plugins (pending review)
- Open Settings → Community Plugins
- Search for "Say"
- Click Install, then Enable
Manual
- Download
main.jsandmanifest.jsonfrom the latest release - Create a folder named
sayin your vault's.obsidian/plugins/directory - Copy both files into that folder
- Enable the plugin in Settings → Community Plugins
Usage
- Enable the plugin
- Hover over any internal link in the editor
- The plugin will read the target note's H1 heading aloud
Settings
| Setting | Description |
|---|---|
| Enable auto-read | Toggle hover-to-speak on/off |
| Speech engine | Shows install instructions for your platform |
| Command | TTS executable name or full path |
| Voice | Voice for speech synthesis (updates dynamically based on selected command) |
| Speech rate | Rate multiplier (1 = normal) |
| Trigger delay | Milliseconds before speaking after hover |
| Arguments template | Optional custom argument template that overrides voice and rate settings |
Arguments Template
The template field supports three placeholders:
{voice}— The selected voice name{rate}— The speech rate value{text}— The text to speak
Example: -v {voice} -s {rate} {text}
When non-empty, this overrides the voice and rate settings above.
Compatibility
- macOS: Uses the built-in
saycommand - Linux: Requires
speech-dispatcher(sudo apt install speech-dispatcher) orespeak - Windows: Uses PowerShell
SpeechSynthesizer(built-in)
Desktop only — requires Node.js child_process API.
Development
pnpm install
pnpm dev # Watch mode
pnpm build # Production build
pnpm lint # Lint check
pnpm typecheck # TypeScript check
License
MIT