Skip to main content

Local, offline voice dictation daemon for Linux — hold Space, speak, release

Project description

NovaVoice

Local, offline voice dictation for Linux. Hold Space anywhere on your desktop, speak, release — the transcribed text appears in whatever app is focused. No cloud, no GPU required.

Tests PyPI


How it works

Hold Space (> 0.5s) → microphone opens → speak → release Space → text appears

Powered by faster-whisper (CPU/int8). Works in browsers, terminals, VS Code, and any other app.


Install

Option 1 — One-line installer (recommended)

bash <(curl -fsSL https://raw.githubusercontent.com/novafabric/novavoice/main/install.sh)

Installs system dependencies, sets up auto-start on login, and guides you through the one-time setup.


Option 2 — pipx

# System dependencies
sudo apt install libportaudio2 xdotool xclip pipx

# Keyboard access (requires logout)
sudo usermod -aG input $USER
logout

# Install
pipx install novavoice
pipx ensurepath

# Auto-start on login
mkdir -p ~/.config/systemd/user
curl -fsSL https://raw.githubusercontent.com/novafabric/novavoice/main/contrib/novavoice.service \
  -o ~/.config/systemd/user/novavoice.service
systemctl --user enable --now novavoice.service

Option 3 — .deb package

Download the latest .deb from Releases, then:

sudo apt install ./novavoice_*.deb

# Keyboard access (requires logout)
sudo usermod -aG input $USER
logout

# Auto-start on login
systemctl --user enable --now novavoice.service

Usage

Once running, NovaVoice works silently in the background.

Action Result
Hold Space (0.5s+), speak, release Text injected into focused app
novavoice status Check if daemon is running
novavoice stop Stop the daemon
novavoice start Start the daemon
novavoice doctor Check all prerequisites
novavoice inject "hello" Test injection without recording

Configuration

Copy the example config and customize:

mkdir -p ~/.config/novavoice
cp examples/config.example.toml ~/.config/novavoice/config.toml

Key settings:

[stt]
model = "tiny.en"   # faster; try "base.en" for better accuracy

[hotkey]
hold_threshold_ms = 500   # how long to hold Space before recording starts

[audio]
max_record_seconds = 90

System requirements

Requirement Notes
Ubuntu 22.04+ (or any Linux with systemd) X11 or Wayland
Python 3.11+
libportaudio2 sudo apt install libportaudio2
xdotool (X11) or ydotool/wtype (Wayland) For text injection
User in input group sudo usermod -aG input $USER then re-login

Run novavoice doctor to check everything at once.


Troubleshooting

evdev access fails

sudo usermod -aG input $USER
# Log out and back in (required)

Nothing happens when holding Space

novavoice status    # is it running?
novavoice doctor    # check all prerequisites
journalctl --user -u novavoice.service -f   # view daemon logs

Poor transcription quality Set model = "base.en" in ~/.config/novavoice/config.toml. Slower but more accurate.

Wayland injection not working Install ydotool and ensure ydotoold is running:

sudo apt install ydotool
sudo ydotoold &

License

Apache 2.0 — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

novavoice-0.1.0.tar.gz (57.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

novavoice-0.1.0-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

Details for the file novavoice-0.1.0.tar.gz.

File metadata

  • Download URL: novavoice-0.1.0.tar.gz
  • Upload date:
  • Size: 57.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for novavoice-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c9041141b748cf4042f075aaf1dbe2e28cae15232efdd7633881c5b646d6b8dc
MD5 11d51ab2be804c07d38b84505656922c
BLAKE2b-256 2f2028500cda920cb4b0a90bcacfad009454949bd1876260b51e0418907770cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for novavoice-0.1.0.tar.gz:

Publisher: release.yml on novafabric/novavoice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file novavoice-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: novavoice-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for novavoice-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52ccf30402dffa0b523044587cccd5b64ab3602a8a5391f807f6d6328927771a
MD5 614ebf57008eca2cc270c7c08ae03edc
BLAKE2b-256 ef0e1bed9ee2486b9d02d163c14a2d45efa0c4df44afc906f0e6a8aa7f9da5a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for novavoice-0.1.0-py3-none-any.whl:

Publisher: release.yml on novafabric/novavoice

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page