Voice typing for Linux. Talk it. Type it. Ship it.
Project description
undertone
talk it. type it. ship it.
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 │
└─────────────────┘
- Press hotkey (Right Ctrl = hold, F8 = toggle)
- Speak naturally
- 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:
- Regex filler removal -- instantly strips "um", "uh", "like", "you know", etc.
- 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 -lto 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
/logsto see which tools were detected
Service won't start
- Check logs: run
undertonethen/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
- STT: Groq Whisper API / faster-whisper
- Cleanup: Regex filler removal + LLM grammar fix (Groq llama-3.1-8b-instant)
- Audio: sounddevice
- Hotkeys: pynput
- CLI: Rich
Contributing
PRs and issues welcome!
Report Bug
License
MIT - do whatever you want with it.
Built with caffeine and voice commands
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dba8ae3e23f685a8ab23b19b965ad9816c5ca985c0869a41d0b312104e183a6
|
|
| MD5 |
30b96f18df3403817362e06bc77efdf8
|
|
| BLAKE2b-256 |
7d71b7fae27636de95080fd74f9491426b01286ec6ded551124813548f8fec81
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b7e2c23aacfca0bd59c51dc93abd6239e25478c9e2dc6e63c27b233f80e841d
|
|
| MD5 |
908b35bfa2e69cef427c04cb0eb2e7d6
|
|
| BLAKE2b-256 |
705cc5ac1d8615064016688bf7a1e09d918863041f73df03f14b749c97afa912
|