Metadata-Version: 2.4
Name: easyspeak-linux
Version: 0.6.0
Summary: Voice control for Linux desktops. Fully local, no cloud, Wayland-native.
Author-email: Matt Hartley <matt@matthartley.com>
Maintainer-email: Matt Hartley <matt@matthartley.com>
License-Expression: GPL-3.0-only
Project-URL: Homepage, https://easyspeak.dev
Project-URL: Source Code, https://github.com/ctsdownloads/easyspeak
Keywords: control,desktop,gnome,head,offline,tracking,voice,wayland
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Desktop Environment :: Gnome
Classifier: Topic :: Home Automation
Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
Classifier: Topic :: Utilities
Requires-Python: <3.15,>=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: evdev-binary>=1.7; sys_platform == "linux"
Requires-Dist: faster-whisper>=1.2.1
Requires-Dist: jeepney>=0.9
Requires-Dist: numpy>=2.2.6
Requires-Dist: onnxruntime>=1.23.2
Requires-Dist: onnxruntime<1.24; python_full_version < "3.11"
Requires-Dist: pyaudio>=0.2.14
Requires-Dist: pyopen-wakeword>=1.1
Provides-Extra: acceptance
Requires-Dist: pytest>=8; extra == "acceptance"
Requires-Dist: pytest-bdd>=7; extra == "acceptance"
Provides-Extra: benchmark
Requires-Dist: pytest>=8; extra == "benchmark"
Requires-Dist: pytest-benchmark>=5; extra == "benchmark"
Provides-Extra: docs
Requires-Dist: mike>=2.1; extra == "docs"
Requires-Dist: mkdocs<2; extra == "docs"
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
Requires-Dist: mkdocstrings[python]>=0.27; extra == "docs"
Provides-Extra: head-tracking
Requires-Dist: opencv-python>=4.13.0.90; extra == "head-tracking"
Requires-Dist: sixdrepnet>=0.1.6; extra == "head-tracking"
Provides-Extra: integration
Requires-Dist: pytest>=8; extra == "integration"
Provides-Extra: mypy
Requires-Dist: mypy>=1.19.1; extra == "mypy"
Requires-Dist: types-pyaudio>=0.2.16.20250801; extra == "mypy"
Provides-Extra: unittest
Requires-Dist: coverage[toml]>=7.14; extra == "unittest"
Requires-Dist: pytest>=8; extra == "unittest"
Dynamic: license-file

# EasySpeak [![PyPI](https://img.shields.io/pypi/v/easyspeak-linux)](https://pypi.org/project/easyspeak-linux/)

Voice control for Linux desktops. Fully local, no cloud, Wayland-native.

Say "Hey Jarvis" and control your desktop with your voice.

[![License](https://img.shields.io/badge/license-GPL--3.0-blue.svg)](https://github.com/ctsdownloads/easyspeak/blob/main/LICENSE)
[![Platform](https://img.shields.io/badge/platform-Linux-lightgrey.svg)](https://easyspeak.dev/latest/installation/)
[![Desktop](https://img.shields.io/badge/desktop-GNOME%20%7C%20Wayland-green.svg)](https://easyspeak.dev/latest/how-it-works/)
[![Status](https://img.shields.io/badge/status-Alpha-orange.svg)](https://github.com/ctsdownloads/easyspeak/releases)
[![Pipeline](https://github.com/ctsdownloads/easyspeak/actions/workflows/pipeline.yml/badge.svg)](https://github.com/ctsdownloads/easyspeak/actions/workflows/pipeline.yml)
[![Safety](https://github.com/ctsdownloads/easyspeak/actions/workflows/safety.yml/badge.svg)](https://github.com/ctsdownloads/easyspeak/actions/workflows/safety.yml)
[![Release](https://github.com/ctsdownloads/easyspeak/actions/workflows/release.yml/badge.svg)](https://github.com/ctsdownloads/easyspeak/actions/workflows/release.yml)
[![Docs](https://github.com/ctsdownloads/easyspeak/actions/workflows/docs.yml/badge.svg)](https://github.com/ctsdownloads/easyspeak/actions/workflows/docs.yml)
[![Benchmarks](https://img.shields.io/badge/%F0%9F%90%B0%20Bencher-performance-FD7E14.svg)](https://bencher.dev/perf/easyspeak)

> ⚠️ **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

[![Demo](https://img.youtube.com/vi/dl5m2Zo1oIE/maxresdefault.jpg)](https://www.youtube.com/watch?v=dl5m2Zo1oIE)

## 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.

```bash
# 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](https://easyspeak.dev/latest/installation/#3-piper-tts) installed for voice feedback.
See the **[Installation guide](https://easyspeak.dev/latest/installation/)** 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](https://github.com/ctsdownloads/easyspeak/releases) and install them
together — a self-contained, offline install (Python runtime, `piper`, GNOME
extension, and speech models). See the
**[Packaging guide](https://easyspeak.dev/latest/packaging/)**.

Then say "Hey Jarvis" followed by a command. Say "help" to list all commands.

## Documentation

- **[Installation](https://easyspeak.dev/latest/installation/)** — system packages, Python, Piper TTS
- **[Usage](https://easyspeak.dev/latest/usage/)** — running the daemon, CLI flags, configuration
- **[Commands](https://easyspeak.dev/latest/commands/)** — the full command reference
- **[Writing plugins](https://easyspeak.dev/latest/plugins/)** — extend EasySpeak with a Python file
- **[Troubleshooting](https://easyspeak.dev/latest/troubleshooting/)** — common problems and fixes
- **[How it works](https://easyspeak.dev/latest/how-it-works/)** — the architecture
- **[API reference](https://easyspeak.dev/latest/reference/core/)** — generated from the source docstrings
- **[Contributing](https://easyspeak.dev/latest/contributing/)** — how to set up a dev environment and submit changes
- **[License](https://easyspeak.dev/latest/license/)** — GPL-3.0

## Acknowledgments

- [pyopen-wakeword](https://github.com/rhasspy/pyopen-wakeword) — Wake word detection
- [faster-whisper](https://github.com/guillaumekln/faster-whisper) — Speech recognition
- [Piper](https://github.com/OHF-Voice/piper1-gpl) — Text-to-speech (we use the last standalone binary from the original [rhasspy/piper](https://github.com/rhasspy/piper) repo)
- [Talon](https://talonvoice.com/) — Inspiration for voice control concepts
