Voice control for Linux desktops. Fully local, no cloud, Wayland-native.
Project description
EasySpeak 
Voice control for Linux desktops. Fully local, no cloud, Wayland-native.
Say "Hey Jarvis" and control your desktop with your voice.
⚠️ Early development. This project works but is not polished. Expect bugs, incomplete docs, and changes without notice.
Why EasySpeak?
Linux desktop voice control is a gap. Talon exists but has a steep learning curve and costs money for the full version. Most other tools are X11-only, abandoned, or cloud-dependent.
EasySpeak is free and open source (GPL-3.0), fully local (no cloud, no accounts), Wayland-native, simple ("Hey Jarvis, open downloads"), and extensible (drop a Python file in plugins/). Built for people with RSI, accessibility needs, hands-busy workflows, or anyone who wants to talk to their computer.
- Wake word activation ("Hey Jarvis")
- Mouse grid and experimental head tracking
- Browser control, dictation, app launcher, media and system controls
- pyopen-wakeword + Whisper + Piper, all on-device
Demo
Quickstart
Requirements: Linux with GNOME Shell 47+ on Wayland, Python 3.10–3.14 (tested against 3.10, 3.11, 3.12, 3.13, and 3.14), a microphone, and ~2 GB disk for models. Tested on Fedora 43.
# 1. System packages (Fedora; see the docs for the full list)
sudo dnf install python3 python3-devel gcc portaudio-devel \
pipewire-utils wireplumber at-spi2-core python3-gobject libadwaita qutebrowser \
glib2 ffmpeg-free pulseaudio-utils sound-theme-freedesktop
# 2. Get EasySpeak and run it (uv manages the virtualenv for you)
git clone https://github.com/ctsdownloads/easyspeak.git ~/easyspeak
cd ~/easyspeak
uv run easyspeak
You also need Piper TTS installed for voice feedback. See the Installation guide for the venv-based path, head tracking, and full details.
Prefer prebuilt packages? Grab the easyspeak app .deb/.rpm plus a language
pack (e.g. easyspeak-lang-en) from the
Releases page and install them
together — a self-contained, offline install (Python runtime, piper, GNOME
extension, and speech models). See the
Packaging guide.
Then say "Hey Jarvis" followed by a command. Say "help" to list all commands.
Documentation
- Installation — system packages, Python, Piper TTS
- Usage — running the daemon, CLI flags, configuration
- Commands — the full command reference
- Writing plugins — extend EasySpeak with a Python file
- Troubleshooting — common problems and fixes
- How it works — the architecture
- API reference — generated from the source docstrings
- Contributing — how to set up a dev environment and submit changes
- License — GPL-3.0
Acknowledgments
- pyopen-wakeword — Wake word detection
- faster-whisper — Speech recognition
- Piper — Text-to-speech (we use the last standalone binary from the original rhasspy/piper repo)
- Talon — Inspiration for voice control concepts
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file easyspeak_linux-0.5.0.tar.gz.
File metadata
- Download URL: easyspeak_linux-0.5.0.tar.gz
- Upload date:
- Size: 87.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fc444f5a6e77be01924b08f29f371b8a57c947e8892b8d2527449f802a5ce9f
|
|
| MD5 |
12640e1542c71da54c4a3aeebbc9cdea
|
|
| BLAKE2b-256 |
82c9bea4df2b7ea06b06d7d783c4b19958ea1aaa9c6efbeac8abb3bbb5b5bd62
|
Provenance
The following attestation bundles were made for easyspeak_linux-0.5.0.tar.gz:
Publisher:
release.yml on ctsdownloads/easyspeak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easyspeak_linux-0.5.0.tar.gz -
Subject digest:
0fc444f5a6e77be01924b08f29f371b8a57c947e8892b8d2527449f802a5ce9f - Sigstore transparency entry: 2015344280
- Sigstore integration time:
-
Permalink:
ctsdownloads/easyspeak@626699f051f6509771287129d8e2b5d405c154c8 -
Branch / Tag:
refs/tags/0.5.0 - Owner: https://github.com/ctsdownloads
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@626699f051f6509771287129d8e2b5d405c154c8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file easyspeak_linux-0.5.0-py3-none-any.whl.
File metadata
- Download URL: easyspeak_linux-0.5.0-py3-none-any.whl
- Upload date:
- Size: 102.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a58bec8d602e0cffc8edf67d7f11f54b2b57f4a6480b2f4043085dd36c36bc4
|
|
| MD5 |
cdf3433b0ca8a29a33c269ccd93715d3
|
|
| BLAKE2b-256 |
36df42fb7225acc4008f2bd96006631f11f22e29097e6b77ebc9190f33156aca
|
Provenance
The following attestation bundles were made for easyspeak_linux-0.5.0-py3-none-any.whl:
Publisher:
release.yml on ctsdownloads/easyspeak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easyspeak_linux-0.5.0-py3-none-any.whl -
Subject digest:
3a58bec8d602e0cffc8edf67d7f11f54b2b57f4a6480b2f4043085dd36c36bc4 - Sigstore transparency entry: 2015344478
- Sigstore integration time:
-
Permalink:
ctsdownloads/easyspeak@626699f051f6509771287129d8e2b5d405c154c8 -
Branch / Tag:
refs/tags/0.5.0 - Owner: https://github.com/ctsdownloads
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@626699f051f6509771287129d8e2b5d405c154c8 -
Trigger Event:
release
-
Statement type: