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.3.tar.gz (57.8 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.3-py3-none-any.whl (18.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: novavoice-0.1.3.tar.gz
  • Upload date:
  • Size: 57.8 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.3.tar.gz
Algorithm Hash digest
SHA256 206a01f2a1670ca5a6b5095487d039c0a6f88380cf5827b89dd66abd7bc09da2
MD5 5ce4a1505afe83dba82462f10d99cb0e
BLAKE2b-256 848a0fbb64a734c52ce804b0e9cd92587086c5342b9816cdcd2d3479fa69ac60

See more details on using hashes here.

Provenance

The following attestation bundles were made for novavoice-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: novavoice-0.1.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 68c9a391ff04920b78cefee43c3207c183579716f0156ad1e58ebf88446084f7
MD5 bd935fb259a204b8c5e6177cbf580374
BLAKE2b-256 6dbd96368194d4683854dbd6385583fa09bc9a0b5652131a3f95b470cc634750

See more details on using hashes here.

Provenance

The following attestation bundles were made for novavoice-0.1.3-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