Skip to main content

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

pypi

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 five backends — Vosk (local, streaming), Whisper (local, batch), Whisper FUTO (local, batch — ACFT-tuned for short dictations), OpenAI (cloud, batch or streaming), Groq (cloud, batch).
  • Delivers the transcript four ways: paste into the focused window (default), copy to clipboard, print to the terminal, or write to a file.
  • 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) and SIGUSR2 (cancel).
  • Cross-platform: tested on Ubuntu (X11 and Wayland), macOS, Windows; works under Termux for clipboard / terminal output.

Install

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

See documentation below for setting up keyboard input on Ubuntu Wayland.

Usage

In a terminal:

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 groqopenaiwhisper-futowhispervosk, so with GROQ_API_KEY set the command above is equivalent to:

scribe --backend groq --model whisper-large-v3-turbo

You can override the defaults or drop the tray entirely:

scribe --backend openai --model gpt-4o-mini-transcribe # OpenAI sweet spot
scribe --backend openai --model gpt-realtime-whisper   # OpenAI streaming
scribe --backend whisper --model small                 # local, no API key
scribe --frontend terminal                             # interactive TUI menu
scribe --record                                        # start recording immediately on launch (works in tray or terminal)
scribe --record --frontend terminal --mode file        # one-shot batched dictation → file
scribe --record --frontend terminal --mode file --stream  # streamed: chunks appended live as you speak
scribe --mode clipboard                                # copy to clipboard, no keystroke
scribe --mode terminal                                 # only print to stdout
scribe --mode file -o transcript.txt                   # append to a file (no keystroke / clipboard)

With --no-interactive (terminal frontend only), scribe skips the interactive menu and starts recording right away — handy for scripted, one-shot transcriptions.

Bias the recogniser toward names, jargon, or a domain glossary with --prompt "free text hint" and --words word1 word2 ... (each also accepts a --prompt-file / --words-file companion). See docs/backends.md › Vocabulary biasing for what each backend does with them.

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 FUTO (local) whisper-futo small pip install scribe-cli[whisper-futo]
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.

Getting an API key

Groq is the recommended cloud backend by default — extremely fast (by a wide margin compared to other cloud STT options, especially in Stream mode where the per-chunk roundtrip latency dominates the perceived speed), 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.

Documentation

Related projects

  • bard — TTS sibling of scribe, same tray/CLI architecture in reverse: highlight text, hear it spoken. Shares the desktop-ai-core backbone (frontends, providers, dialog helpers).

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scribe_cli-1.0.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

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

scribe_cli-1.0.0-py3-none-any.whl (2.0 MB view details)

Uploaded Python 3

File details

Details for the file scribe_cli-1.0.0.tar.gz.

File metadata

  • Download URL: scribe_cli-1.0.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scribe_cli-1.0.0.tar.gz
Algorithm Hash digest
SHA256 fae0cd9f4201b6acef622f93d849bc28f766f516c89ec41c3a2b760f9c9408d7
MD5 a8e65a63fa8d77c5fe0ff0fc414c096d
BLAKE2b-256 00afdc04584b31aeea7e51cca45c67cf7833da259eb5c5b04ab68b4a71e8a171

See more details on using hashes here.

Provenance

The following attestation bundles were made for scribe_cli-1.0.0.tar.gz:

Publisher: pypi.yml on perrette/scribe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scribe_cli-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: scribe_cli-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scribe_cli-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 902cb91d5ab557f8d1331e7f2c5ce122562d838e81f3f90ad76414269ec7f018
MD5 64789be0f13512f0a9fe5bdaead45ef8
BLAKE2b-256 918881025c5c38362d5133508e503a6129087976106875790d36f9aaac751fe9

See more details on using hashes here.

Provenance

The following attestation bundles were made for scribe_cli-1.0.0-py3-none-any.whl:

Publisher: pypi.yml on perrette/scribe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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