Fully local
Text to Speech
Notifications, selected text, and your coding agent's answers — spoken on your machine, optionally reworded by local LLMs to sound more natural.
integration
Plug'n'play integration
with room to expand.
Everything arrives through the same queue, the same voice and the same transport controls — a tray icon, media keys, and a one-word CLI.
01 · already wired
Notifications
Already watching the session bus. Switch it on and name the applications — the settings window offers every one it has seen notifying.
[notifications] enabled = true allow = ["Signal"]
02 · one keybind
Selection and clipboard
Bind a key in sway, or anywhere that can run a command. sayd reads the PRIMARY selection itself, so the text never passes through a shell.
bindsym $mod+Shift+s exec say selection bindsym $mod+Shift+v exec say clipboard
03 · one command
Your own integrations
Anything that can run a command can speak. Pick the voice, the speed, where it lands in the queue, or ask for a rewrite first.
say --policy interrupt "build failed" say --voice af_heart --speed 1.2 "done" say --reword selection
rewording
Most text was never written to be heard.
A notification is a label, a colon and a fragment. Read out verbatim it sounds like one. sayd can put a small language model in front of the speaker to turn it into a sentence first — and nothing else.
Alice: where do you want to go for dinner
Alice is asking where you want to go for dinner.
Mutti: kommst du Sonntag?
Mum is asking whether you are coming on Sunday.
Bob: sry running late, 15min
Bob is sorry and is running 15 minutes late.
install
How to get started.
sayd is the resident daemon; say is the CLI that drives it.
Speech needs espeak-ng and ONNX Runtime, and the settings window needs GTK4 and
libadwaita — so the only real work is getting those four in place.
With Nix
The flake carries every dependency, so there is nothing to install first. It also exposes an overlay, if you would rather put sayd in environment.systemPackages.
# straight from the repository nix run github:elsirion/sayd # or from a checkout nix build
With your own package manager
Install the four native dependencies, then build. ONNX Runtime is loaded at runtime rather than linked, so point ORT_DYLIB_PATH at it.
# Debian/Ubuntu — adjust for your distribution apt install libespeak-ng-dev libonnxruntime-dev \ libgtk-4-dev libadwaita-1-dev export ORT_DYLIB_PATH=/usr/lib/x86_64-linux-gnu/libonnxruntime.so cargo build --release
credit where it is due
Inspired by sayit.
sayit by calle is private, local text to speech for Apple silicon Macs — select text, press a key, hear it, and nothing leaves the machine. An idea that good should not be exclusive to macOS. sayd aims to provide the same functionality on free and open source operating systems like Linux.