Speech-to-text CLI and system-tray app for dictating into any focused window. Local (vosk, faster-whisper) or cloud (groq, openai) backends, batch or streaming.
Project description
Scribe 
Talk. It types. Scribe is a speech-to-text CLI and tray app that pipes transcribed text straight into the focused window. It supports local and cloud-based APIs, batch and streaming workflows.
What it does
- Records from your mic and transcribes via one of four backends — Vosk (local, streaming), Whisper (local, batch), OpenAI (cloud, batch or streaming), Groq (cloud, batch).
- Delivers the transcript three ways: paste into the focused window (default), copy to clipboard, or print to the terminal.
- Runs as a system tray icon with a single Record button, or as an interactive terminal TUI — same menu in both.
- Hooks into your DE's keyboard shortcuts via
SIGUSR1(toggle recording) andSIGUSR2(cancel). - Cross-platform: tested on Ubuntu (X11 and Wayland), macOS, Windows; works under Termux for clipboard / terminal output.
Getting started
sudo apt-get install portaudio19-dev xclip # Ubuntu; macOS: brew install portaudio
pip install scribe-cli[all]
export GROQ_API_KEY=YOURAPIKEY # or OPENAI_API_KEY, or skip and run local
scribe
Scribe picks the first backend whose key / dependency is present, in
order groq → openai → whisper → vosk, and launches the
tray icon. Press Record, speak, press Stop.
See documentation below for setting up keyboard input on Ubuntu Wayland.
Getting an API key
Groq is a good cloud backend to start with — very fast, quite accurate, and the
free tier is generous enough for everyday dictation. Sign up at
console.groq.com, create an API key
under Settings → API Keys, and export it as GROQ_API_KEY.
I personally use OpenAI with gpt-4o-mini-transcribe as it is also fast and perhaps more accurate for my accent-tainted English.
Backends at a glance
| Backend | --backend |
Default model | Streaming model(s) | Requires |
|---|---|---|---|---|
| Groq (cloud) | groq |
whisper-large-v3-turbo |
— | GROQ_API_KEY |
| OpenAI (cloud) | openai |
gpt-4o-mini-transcribe |
gpt-realtime-whisper |
OPENAI_API_KEY |
| Whisper (local) | whisper |
small |
— | pip install scribe-cli[whisper] |
| Vosk (local) | vosk |
language-dependent | all Vosk models | pip install scribe-cli[vosk] |
Whether a transcription appears live as you speak or all at once when you stop depends on the model picked — see docs/backends.md.
Documentation
- Installation & dependencies — PortAudio, extras, Ubuntu / GNOME tray libs.
- Backends in detail — model lists, when to pick which, the realtime model.
- Keyboard modes & typer backends — keystroke vs
clipboard, Wayland /
eitype,--type-direct. - System tray & global hotkeys — menu tree, icon
states,
SIGUSR1/SIGUSR2. - Desktop entry & autostart (
scribe-install) — GNOME / KDE launcher integration. - Fine tuning & CLI reference — every
scribe --helpflag with examples.
Compatibility
Initially developed for Python 3 on Ubuntu 24.04 (GNOME + Wayland);
works on macOS and Windows too. Wayland keystroke injection is
convoluted but solved. For dependencies of
individual subsystems, check pynput (keyboard) and pystray (tray
icon).
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 scribe_cli-0.16.0.tar.gz.
File metadata
- Download URL: scribe_cli-0.16.0.tar.gz
- Upload date:
- Size: 143.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce31f9d21b441e6d936b8ca4fa1ae8b528619e58d55b6a50e287af5206d77e1d
|
|
| MD5 |
0ffb92f29510a1e5cb5603ad7b7e6201
|
|
| BLAKE2b-256 |
40ee4c495b79aa4e3a5e943a36dd9633007ff012b096ccf1ce2b58fe00b9f97b
|
Provenance
The following attestation bundles were made for scribe_cli-0.16.0.tar.gz:
Publisher:
pypi.yml on perrette/scribe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scribe_cli-0.16.0.tar.gz -
Subject digest:
ce31f9d21b441e6d936b8ca4fa1ae8b528619e58d55b6a50e287af5206d77e1d - Sigstore transparency entry: 1575609090
- Sigstore integration time:
-
Permalink:
perrette/scribe@5ebf91e9ea79b57c88e8ae3cbf7d76a81c4c3715 -
Branch / Tag:
refs/tags/v0.16.0 - Owner: https://github.com/perrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@5ebf91e9ea79b57c88e8ae3cbf7d76a81c4c3715 -
Trigger Event:
push
-
Statement type:
File details
Details for the file scribe_cli-0.16.0-py3-none-any.whl.
File metadata
- Download URL: scribe_cli-0.16.0-py3-none-any.whl
- Upload date:
- Size: 58.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5549f35e98fd19a6526f66ef7217e19f13e23cd1e0bcb3e421b64a6c472172e7
|
|
| MD5 |
aafb5dc0dfdf98fa5fc5bc509edab2ef
|
|
| BLAKE2b-256 |
66b836f690fd1ec0acd2dda5a9ced69e7e52d664c36404a3132d7753b4cf3727
|
Provenance
The following attestation bundles were made for scribe_cli-0.16.0-py3-none-any.whl:
Publisher:
pypi.yml on perrette/scribe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
scribe_cli-0.16.0-py3-none-any.whl -
Subject digest:
5549f35e98fd19a6526f66ef7217e19f13e23cd1e0bcb3e421b64a6c472172e7 - Sigstore transparency entry: 1575609139
- Sigstore integration time:
-
Permalink:
perrette/scribe@5ebf91e9ea79b57c88e8ae3cbf7d76a81c4c3715 -
Branch / Tag:
refs/tags/v0.16.0 - Owner: https://github.com/perrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@5ebf91e9ea79b57c88e8ae3cbf7d76a81c4c3715 -
Trigger Event:
push
-
Statement type: