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 
Scribe is a speech-to-text CLI and tray app that pipes transcribed text into the focused window. It supports local and cloud-based APIs, batch and streaming workflows.
- Five backends, one interface. Records from your mic and transcribes via Vosk (local, streaming), Whisper (local, batch), Whisper FUTO (local, batch — ACFT-tuned for short dictations), OpenAI (cloud, batch or streaming), or Groq (cloud, batch).
- Four ways to deliver the transcript. Paste into the focused window (default), copy to the clipboard, print to the terminal, or append to a file.
- Tray or terminal. Runs as a system tray icon with a single Record button, or as an interactive terminal TUI — same menu in both.
- Hotkey-friendly. Hooks into your desktop's keyboard shortcuts via
SIGUSR1(toggle recording) andSIGUSR2(cancel), plus built-in global hotkeys on X11 / Windows. - Cross-platform. Tested on Ubuntu (X11 and Wayland), macOS, and Windows; works under Termux for clipboard / terminal output.
Installation
Linux / macOS:
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
Windows (PowerShell) — no system packages needed; sounddevice bundles
PortAudio and the clipboard is native, so skip the apt/brew step:
py -m venv .venv
.\.venv\Scripts\Activate.ps1 # if blocked: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
pip install scribe-cli[whisper] # local Whisper; or [all], or a cloud backend
$env:GROQ_API_KEY = "YOURAPIKEY" # or OPENAI_API_KEY, or skip and run local
See the installation page for the full per-platform walkthrough (extras, Ubuntu / GNOME tray libs, the Windows quickstart).
Quickstart
scribe
This launches the system tray icon. Press Record, speak, press Stop — the
transcription lands in the focused window. Scribe picks the first backend whose
key / dependency is present, in order groq → openai → whisper-futo →
whisper → vosk. Override the defaults or drop the tray entirely:
scribe --backend whisper --model small # local, no API key
scribe --frontend terminal # interactive TUI menu
scribe --mode clipboard # copy to clipboard, no keystroke
See the quickstart for more.
Documentation
Full documentation lives at https://perrette.github.io/scribe/:
- Installation & dependencies — PortAudio, extras, Ubuntu / GNOME tray libs, Windows.
- Quickstart — your first dictation.
- Backends in detail — model lists, streaming recipes, vocabulary biasing, the realtime model.
- Output 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.
From the same author
A few other open-source tools I maintain.
Scientific writing & data
- texmark — write scientific articles in Markdown and convert them to journal-ready LaTeX/PDF.
- papers — command-line BibTeX bibliography and PDF library manager.
- datamanifest — declarative, reproducible dataset management. (See also the datamanifest.toml format spec and the DataManifest.jl Julia port.)
Speech to Text (dictate) and Text to Speech (read-aloud) tools
- bard — text-to-speech reader.
Compatibility
| OS | Status |
|---|---|
| Ubuntu 24.04 | Primary dev platform (GNOME, X11 and Wayland). |
| macOS | Works. |
| Windows 11 | Tested and working on Python 3.14 (64-bit / win_amd64). Dependencies resolve pre-built wheels; no C toolchain or Python downgrade needed. |
Wayland keystroke injection is convoluted but solved.
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-1.2.0.tar.gz.
File metadata
- Download URL: scribe_cli-1.2.0.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a20469d7b1e1e4b7b7af55d3816a0ba6f993506d038f9d3eb7286fcc736f367
|
|
| MD5 |
6354efcc6430f528a5e14f9f280dcf63
|
|
| BLAKE2b-256 |
221a9de81b51915e211f2f0b2df7253cdbc0b6b3373a682a33737378537a4c3c
|
Provenance
The following attestation bundles were made for scribe_cli-1.2.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-1.2.0.tar.gz -
Subject digest:
9a20469d7b1e1e4b7b7af55d3816a0ba6f993506d038f9d3eb7286fcc736f367 - Sigstore transparency entry: 1779720871
- Sigstore integration time:
-
Permalink:
perrette/scribe@c1c4cb389356af54c5c9157630828d04dcb484af -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/perrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@c1c4cb389356af54c5c9157630828d04dcb484af -
Trigger Event:
push
-
Statement type:
File details
Details for the file scribe_cli-1.2.0-py3-none-any.whl.
File metadata
- Download URL: scribe_cli-1.2.0-py3-none-any.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afde31fed293e9b9382a6b979f1f8c9220ab78333d77da2308e4d271ffb1e5ed
|
|
| MD5 |
a731ede79ef7a52598610a0d45ff99a8
|
|
| BLAKE2b-256 |
64ae360f02bc5331280b691b7d69f2d5509b87b6894570c4c2afcfbd12c4eb33
|
Provenance
The following attestation bundles were made for scribe_cli-1.2.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-1.2.0-py3-none-any.whl -
Subject digest:
afde31fed293e9b9382a6b979f1f8c9220ab78333d77da2308e4d271ffb1e5ed - Sigstore transparency entry: 1779722301
- Sigstore integration time:
-
Permalink:
perrette/scribe@c1c4cb389356af54c5c9157630828d04dcb484af -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/perrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@c1c4cb389356af54c5c9157630828d04dcb484af -
Trigger Event:
push
-
Statement type: