Speech-to-Text TUI — offline transcription powered by faster-whisper
Project description
stttui: Speech To Text Terminal User Interface
v0.2.0 | Python 3.10+ | MIT License
A local, fully offline speech-to-text tool powered by faster-whisper. Record audio with a global hotkey from any window, transcribe it on-device, and get the result copied straight to your clipboard — no cloud, no API keys, no latency.
Comes with a polished terminal UI built on Textual, complete with a live audio level meter, transcription history, and on-the-fly model switching.
Features
- Fully offline — runs entirely on your machine using faster-whisper with int8 quantization. No data ever leaves your device.
- Global hotkeys — record from anywhere without focusing the terminal
- Live audio meter — real-time visual feedback while recording
- Transcription history — timestamped, scrollable log of every dictation
- Model switching — swap between
tiny,base,small,medium, andlargewhisper models on the fly - Clipboard integration — transcriptions are automatically copied and ready to paste
- Cross-platform — works on Windows, macOS, and Linux
- Three modes — rich TUI (default), lightweight CLI (
--cli), or headless (--headless) for scripting/piping
Installation
Homebrew (macOS / Linux)
brew tap aholten/tap
brew install stttui
pip / pipx
# With pipx (recommended — isolated environment)
pipx install stttui
# Or with pip
pip install stttui
From source
git clone https://github.com/aholten/sttui.git
cd stttui
pip install .
On macOS you may need to grant terminal accessibility permissions for global hotkeys. On Linux, install
portaudio(sudo apt install portaudio19-dev) andxclipfor clipboard support.
Usage
Hotkeys
These work globally — even when the terminal is not focused:
| Hotkey | Action |
|---|---|
Ctrl+Shift+Space |
Start / stop recording |
Ctrl+C |
Quit |
Workflow
- Launch the tool — the whisper model loads in the background
- Switch to any application (browser, editor, chat, etc.)
- Press Ctrl+Shift+Space to start recording
- Speak
- Press Ctrl+Shift+Space again to stop
- The transcription is copied to your clipboard — paste with Ctrl+V
TUI Mode (default)
stttui
The terminal interface includes:
- Model selector — dropdown to switch whisper models without restarting
- Status badge — shows IDLE / RECORDING / TRANSCRIBING state
- Level meter — live audio input visualization
- Transcription history — scrollable log with timestamps
- Status log — model loading progress and system messages
CLI Mode
stttui --cli
Minimal output, no UI — just hotkeys and clipboard.
Headless Mode
Record, transcribe, print to stdout, and exit. No hotkeys or UI — ideal for scripts and piping.
# Record until crtl+shift+space is pressed
stttui --headless
# Record for exactly 10 seconds
stttui --headless --duration 10
# Pipe transcription to another command
stttui --headless --duration 5 | xargs echo "You said:"
Status messages go to stderr, transcription goes to stdout.
Options
| Flag | Description | Default |
|---|---|---|
--cli |
Run in CLI-only mode (no TUI) | off |
--headless |
Record, transcribe, print to stdout, and exit | off |
--duration |
Recording duration in seconds (headless mode; omit to wait for Enter) | — |
--model |
Whisper model size | base |
--version |
Print version and exit | — |
# Example: launch with the small model
stttui --model small
Model Sizes
Larger models are more accurate but slower to load and transcribe. All models run on CPU with int8 quantization.
| Model | Parameters | Speed |
|---|---|---|
tiny |
39M | Fastest |
base |
74M | Fast |
small |
244M | Moderate |
medium |
769M | Slow |
large |
1550M | Slowest |
In TUI mode you can switch models from the dropdown at any time.
Platform Notes
| Platform | Notes |
|---|---|
| Windows | Works out of the box via Git Bash or MSYS2. |
| macOS | Clipboard works via pbcopy. You may need to grant terminal accessibility permissions for global hotkeys. |
| Linux | Install xclip or xsel for clipboard support (sudo apt install xclip). |
Transcription Log
All transcriptions are automatically saved to transcription_log.txt with timestamps for reference.
License
MIT
Author
Anthony Holten @aholten on GitHub
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 stttui-0.2.0.tar.gz.
File metadata
- Download URL: stttui-0.2.0.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9a2ad2251fa634d72096f9a32693bc44b00cae1153cd0b59a4aadc29a6f92ce
|
|
| MD5 |
ed05240671c7accc76e92d44be480839
|
|
| BLAKE2b-256 |
854d58a06dcf9429c1b20e024acff4933e7ff6afebfe98310ed8a9884979fcf3
|
Provenance
The following attestation bundles were made for stttui-0.2.0.tar.gz:
Publisher:
publish.yml on aholten/stttui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stttui-0.2.0.tar.gz -
Subject digest:
c9a2ad2251fa634d72096f9a32693bc44b00cae1153cd0b59a4aadc29a6f92ce - Sigstore transparency entry: 1109259114
- Sigstore integration time:
-
Permalink:
aholten/stttui@dfdb57552e3da060d3c53d3ced0cca592908b1cb -
Branch / Tag:
refs/tags/v0.2.0rc - Owner: https://github.com/aholten
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dfdb57552e3da060d3c53d3ced0cca592908b1cb -
Trigger Event:
release
-
Statement type:
File details
Details for the file stttui-0.2.0-py3-none-any.whl.
File metadata
- Download URL: stttui-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bab036aa8c29f5119ef17312cf80d566aba8d9c8e64e946318271bb410085210
|
|
| MD5 |
39d1cb458b9e23d12296079021b659a8
|
|
| BLAKE2b-256 |
14df644e7ef950d902b93d2e9498103d302d19875e24f082665e1554323afe24
|
Provenance
The following attestation bundles were made for stttui-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on aholten/stttui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stttui-0.2.0-py3-none-any.whl -
Subject digest:
bab036aa8c29f5119ef17312cf80d566aba8d9c8e64e946318271bb410085210 - Sigstore transparency entry: 1109259118
- Sigstore integration time:
-
Permalink:
aholten/stttui@dfdb57552e3da060d3c53d3ced0cca592908b1cb -
Branch / Tag:
refs/tags/v0.2.0rc - Owner: https://github.com/aholten
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@dfdb57552e3da060d3c53d3ced0cca592908b1cb -
Trigger Event:
release
-
Statement type: