No description
Find a file
1yx 1932fc80dd Bump version to 0.1.1
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 14:28:33 +08:00
.github/workflows Fix automated review errors and release workflow 2026-05-16 13:19:17 +08:00
src Harden shell execution and patch fast-uri vulnerability 2026-05-16 14:25:42 +08:00
.gitignore Filter hover-link to editor/preview only, bump version to 0.1.1 2026-04-23 23:05:02 +08:00
AGENTS.md Initial release of Say plugin 2026-04-23 22:47:28 +08:00
esbuild.config.mjs Initial release of Say plugin 2026-04-23 22:47:28 +08:00
eslint.config.mjs Add activeWindow and Buffer to ESLint globals for Obsidian desktop 2026-05-16 13:35:52 +08:00
LICENSE Update LICENSE copyright holder to match GitHub username 2026-04-24 00:28:55 +08:00
manifest.json Bump version to 0.1.1 2026-05-16 14:28:33 +08:00
package.json Bump version to 0.1.1 2026-05-16 14:28:33 +08:00
pnpm-lock.yaml Harden shell execution and patch fast-uri vulnerability 2026-05-16 14:25:42 +08:00
README.md Initial release of Say plugin 2026-04-23 22:47:28 +08:00
styles.css Initial release of Say plugin 2026-04-23 22:47:28 +08:00
tsconfig.json Initial release of Say plugin 2026-04-23 22:47:28 +08:00
versions.json Bump version to 0.1.1 2026-05-16 14:28:33 +08:00

Say

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, Linux spd-say/espeak, and Windows PowerShell SpeechSynthesizer.
  • 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)

  1. Open Settings → Community Plugins
  2. Search for "Say"
  3. Click Install, then Enable

Manual

  1. Download main.js and manifest.json from the latest release
  2. Create a folder named say in your vault's .obsidian/plugins/ directory
  3. Copy both files into that folder
  4. Enable the plugin in Settings → Community Plugins

Usage

  1. Enable the plugin
  2. Hover over any internal link in the editor
  3. 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 say command
  • Linux: Requires speech-dispatcher (sudo apt install speech-dispatcher) or espeak
  • 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