Ubuntu
KDE / GNOME
Whisper
whisper.cpp
faster-whisper
GPLv3
Lettera Ink lets you speak and have text typed into the window you’re using.
It records from your microphone, runs a local Whisper engine (Snap whisper-gael, whisper.cpp, or faster-whisper via whisper-ctranslate2),
and types the transcription in the focused application.
Source code & full technical docs (README): https://gitlab.com/gd-pub/lettera-ink
The name “Lettera Ink” is a small homage to the classic Olivetti Lettera machines – portable, practical, meant to write anywhere.
This is the voice-driven version, living quietly in ~/lettera-ink.
Voice to text on your desktop: how it works
The core idea is very simple: record → transcribe → type → log.
Lettera Ink keeps everything under ~/lettera-ink so engines can see the audio without sandbox issues,
and so you can inspect, debug, or remove things whenever you like.
- record with PipeWire (
pw-record) or ALSA (arecord) - transcribe with your chosen engine:
Snap
whisper-gael.whisper, localwhisper.cpp(whisper-cli), orfaster-whisperviawhisper-ctranslate2 - type with
xdotool(orwtype/ydotool) into the focused window - log to
~/lettera-ink/lettera.logwith timestamps
Engines are defined by simple YAML files under ~/lettera-ink/implementations/.
This page is the overview and the “why” / “what it feels like”; the README in the repository is the detailed technical reference
(all commands, engine internals, placeholders, model directories).
Install Lettera Ink
Stable release (main branch):
bash <(curl -fsSL https://gitlab.com/gd-pub/lettera-ink/-/raw/main/installer.sh)
This installer will (high level):
- ensure
gitis available and clone the project into~/lettera-ink - set up the CLI (
~/.local/bin/lettera) and helper scripts /.desktopentries - check/install base desktop tools (PipeWire/ALSA,
xdotool) where possible - run
lettera config --installerto:- list available implementations (engines)
- let you pick one (recommended first choice: Snap whisper-gael)
- optionally set up a local whisper.cpp build or a local faster-whisper CLI for better performance
- pick default language, model, timeout per engine
Curious about development builds or release candidates? The README on GitLab explains how to install from the staging branch.
Use it: start and stop dictation
Lettera Ink is built around a very simple, two-step workflow:
1. Start recording
lettera start it base
This starts recording in Italian using the base model.
If you omit arguments, it uses the defaults stored in ~/lettera-ink/config.yaml for the currently selected engine.
Examples:
lettera start en base, lettera start it small, or simply lettera start to reuse your defaults.
2. Stop and transcribe
lettera stop
This stops the recorder, runs your selected engine, and types the result into the current window. If the focused window looks like a terminal, newlines are turned into spaces to avoid accidentally running commands.
You can force the “no real newlines” behavior anywhere by running:
LETTERA_NO_NEWLINES=1 lettera stop.
The README explains the safety heuristics in more detail.
Other commands include: lettera status, lettera clean,
lettera config, lettera log, lettera help – see the README for the full CLI reference.
Configure language, model, timeout
Change defaults with an interactive command:
lettera config
It shows available implementations, checks their requirements, and asks for your language/model/timeout.
Values are stored per engine under ~/lettera-ink/config.yaml.
If an engine uses local model files, Lettera Ink can also download them for you. If a download fails (network hiccup, server side issue), you can retry or choose a different model without redoing the entire configuration.
The installer runs lettera config --installer once, so after the first install you can usually just:
lettera start
# speak…
lettera stop
Keyboard shortcuts for KDE / GNOME
The installer creates helper scripts in ~/lettera-ink/shortcuts/:
lettera-start.sh– runslettera startlettera-stop.sh– runslettera stoplettera-config.sh– opens the interactive config
Bind them in KDE (System Settings → Shortcuts → Add Application) or in GNOME (Settings → Keyboard → Custom Shortcuts) to get global “start talking / stop talking” keys.
The README goes into more detail for KDE, GNOME and other desktop environments, with step-by-step instructions and screenshots.
Privacy and local processing
Lettera Ink runs on your machine. Audio is recorded locally (PipeWire/ALSA) into ~/lettera-ink/tmp/
and passed to a local engine (Snap whisper-gael, whisper.cpp, or faster-whisper).
The project itself does not send your audio or text to cloud services.
Logs are stored in ~/lettera-ink/lettera.log so you can inspect, rotate, or delete them as you like.
If you want to audit exactly which commands are run and where files live, the README documents the shell scripts and directory layout in detail.
Why “Lettera”? A short note
Olivetti’s “Lettera” typewriters were small, portable, and built so people could write almost anywhere. Lettera Ink keeps that spirit, but replaces the mechanical keys with your voice, and the paper with whatever window you have open.
It also stays small and lives in your home directory, so you can read, edit, and update it easily – in the same spirit as lifting the cover of a typewriter and replacing the ribbon yourself.
License and project link
Lettera Ink is Free Software, released under the GNU GPLv3. You can run it, study it, share it, and modify it. If you distribute modified versions, you keep the same license.
Project repository (with README, installer, and latest changes):
https://gitlab.com/gd-pub/lettera-ink
This page is the high-level overview and quickstart. For exact CLI reference, engine internals, YAML examples and dev workflow, please read the README in the repository.