Skip to main content

Voice typing for Linux. Talk it. Type it. Ship it.

Project description

undertone

undertone

talk it. type it. ship it.

License Python Platform Groq

Voice typing for Linux that actually works.
Hold a key, speak, release -- your words appear wherever you're typing.


Demo

$ undertone

  ╭────────────────────────────────────────╮
  │  UNDERTONE                             │
  │  talk it. type it. ship it.            │
  ╰────────────────────────────────────────╯

  Status: vibing
  Hotkeys: Right Ctrl (hold) | F8 (toggle)

undertone> _

Quick Start

# Install
pipx install undertone

# Run (interactive setup on first launch)
undertone

# Upgrade to latest version
pipx upgrade undertone

That's it. 30 seconds to voice typing.


Features

Feature Description
Speed < 1 second latency Groq's Whisper API is blazing fast
Smart Grammar + filler fix LLM fixes grammar, punctuation, removes filler words
Free No credit card Groq's free tier is generous
Offline Local fallback Works without internet via faster-whisper
Private Privacy mode Keep voice 100% on your machine
Auto Runs on login Always ready when you are

How It Works

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Hold Key   │ -> │   Speak     │ -> │  Release    │ -> │ Text Appears│
│  (Right Ctrl)    │  naturally  │    │   key       │    │  at cursor  │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
                            |
                            v
                   ┌─────────────────┐
                   │  Groq Whisper   │
                   │ + LLM cleanup   │
                   └─────────────────┘
  1. Press hotkey (Right Ctrl = hold, F8 = toggle)
  2. Speak naturally
  3. Release -- text appears in < 1 second

Works everywhere: browser, terminal, IDE, Slack, Discord, anywhere you type.


Commands

Run undertone to open the interactive CLI:

Command Description
/setup Configure API key & hotkeys
/start Start voice typing
/stop Take a break
/status Check the vibe
/logs View receipts
/config Tweak settings
/help Get backup
/quit Peace out

Requirements

  • OS: Linux (X11, Wayland, or XWayland)
  • Python: 3.10+
  • API Key: Free from console.groq.com

System dependencies (auto-detected and installed during setup):

X11:

sudo apt install xclip xdotool

Wayland:

sudo apt install wl-clipboard wtype    # wlroots (Sway, Hyprland)
sudo apt install wl-clipboard ydotool  # GNOME, KDE, others

Undertone auto-detects your display server and uses the right tools.


Text Cleanup

Undertone uses a two-stage cleanup pipeline:

  1. Regex filler removal -- instantly strips "um", "uh", "like", "you know", etc.
  2. LLM grammar fix -- sends text to Groq's llama-3.1-8b-instant for grammar, punctuation, and capitalization fixes (~160ms extra latency)

Toggle LLM cleanup on/off:

undertone> /config
# Select "LLM grammar fix on/off"

When LLM is off or fails, regex cleanup runs as fallback.


Privacy Mode

By default, audio goes to Groq for fast transcription. Want to keep it local?

undertone> /config
# Select "Privacy mode" -> "local"

Local mode uses faster-whisper on your CPU. Slower (~3-5s) but your voice never leaves your machine.


Troubleshooting

No audio input detected
  • Check your mic is connected
  • Run arecord -l to list audio devices
Text not appearing
  • X11: sudo apt install xclip xdotool
  • Wayland (Sway/Hyprland): sudo apt install wl-clipboard wtype
  • Wayland (GNOME/KDE): sudo apt install wl-clipboard ydotool
  • Check logs with /logs to see which tools were detected
Service won't start
  • Check logs: run undertone then /logs
  • Verify API key at console.groq.com

Uninstall

# Stop service
undertone
# > /stop
# > /quit

# Remove package
pipx uninstall undertone

# Remove config (optional)
rm -rf ~/.config/undertone
rm ~/.config/systemd/user/undertone.service
systemctl --user daemon-reload

Tech Stack


Contributing

PRs and issues welcome!

Report Bug

Request Feature


License

MIT - do whatever you want with it.


Built with caffeine and voice commands

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

undertone-0.3.0.tar.gz (34.5 kB view details)

Uploaded Source

Built Distribution

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

undertone-0.3.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file undertone-0.3.0.tar.gz.

File metadata

  • Download URL: undertone-0.3.0.tar.gz
  • Upload date:
  • Size: 34.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for undertone-0.3.0.tar.gz
Algorithm Hash digest
SHA256 9dba8ae3e23f685a8ab23b19b965ad9816c5ca985c0869a41d0b312104e183a6
MD5 30b96f18df3403817362e06bc77efdf8
BLAKE2b-256 7d71b7fae27636de95080fd74f9491426b01286ec6ded551124813548f8fec81

See more details on using hashes here.

File details

Details for the file undertone-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: undertone-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for undertone-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b7e2c23aacfca0bd59c51dc93abd6239e25478c9e2dc6e63c27b233f80e841d
MD5 908b35bfa2e69cef427c04cb0eb2e7d6
BLAKE2b-256 705cc5ac1d8615064016688bf7a1e09d918863041f73df03f14b749c97afa912

See more details on using hashes here.

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