Fluentry
Version 1.0.1 is out

Say it once.
Fluentry types it.

You think faster than you type. Hold a key, say what you mean, and the words appear in whatever app you are already in — your editor, your browser, your chat window. The speech model runs on your own machine, so it is quick and nothing you say leaves the computer.

Free and open sourcePython 3.11+X11 & Wayland

What it does

Built on the parts of Linux you already run.

Your microphone through PipeWire, your shortcuts read straight from the keyboard, your API keys in your keyring — and speech models that never phone home.

Speech that stays on your machine

Whisper and Parakeet run on your own hardware — no account, no upload, no per-minute bill. A short phrase comes back in about 300 ms on a plain CPU, in dozens of languages.

Teach it your words

Colleagues’ names, project code names, the jargon your field runs on. Tell Fluentry once what it keeps mishearing and it stops. Leave the replacement blank to cut a word entirely.

Say the punctuation

“literal comma” becomes a comma. Switch on filler-word removal and the “um”s and “uh”s go with it, and a closing phrase can press Return, so a whole message goes out without your hands leaving the desk.

Polish, if you want it

Send a transcript through a language model to tidy the grammar — running locally under Ollama or LM Studio, or wherever you like. Off unless you turn it on, and you can switch it off for the apps where raw text is what you want.

Looks like the rest of your desktop

Picks up your colour scheme, accent colour, icon theme and UI font, so it sits alongside your other windows instead of announcing itself. Tray icon, recording overlay, and settings laid out the Adwaita way.

In your language

The interface itself speaks eleven languages — English, Spanish, French, German, Portuguese, Italian, Japanese, Korean, Chinese, Hindi and Arabic — and follows your system locale on first run, with a picker in Settings if you want another. Arabic lays the whole window out right-to-left.

Works from the shell too

Transcribe a recording with one command, or switch on a loopback HTTP API and let your own tools read the history, manage the dictionary and ask for transcripts.

Screenshots

Six screens and a pill that floats.

Adwaita’s own greys, so it sits next to GNOME Settings without announcing itself. These are rendered straight from the running app in both the light and the dark it ships with — you are seeing whichever one your system is set to.

Fluentry
The Welcome screen: the dictation shortcut set to Right Alt, a Setup list confirming the speech model, microphone, text insertion and global hotkey, and today's counts of words dictated, dictations and time saved.
What it opens to: your shortcut, whether this machine can actually dictate, and what today came to.
Fluentry — Voice Engine
The Voice Engine screen: Parakeet TDT v3 Multilingual selected and already downloaded, spoken language set to Automatic, and a list of microphones in the order they will be tried.
Every engine with its size and whether it is on disk yet. Microphones are tried in the order you put them in, so unplugging one just moves to the next.
Fluentry — History
The History screen: a searchable list of past dictations by date, with the selected one shown in full beside the app and window it was typed into, and how long transcription took.
Every dictation, searchable, next to the app it went into and how long the model took. A SQLite file on your own disk, which you can set to clear itself.
Fluentry — Custom Dictionary
The Custom Dictionary screen: a two-column table pairing mishearings such as “pipe wire” and “way land” with the corrections PipeWire and Wayland, and a last row whose replacement is left empty.
What the model keeps mishearing, and what to put there instead. Leave the replacement empty, as the last row does, and the word is simply dropped.
Fluentry — Stats
The Stats screen: totals for words, dictations, time saved and day streak, a bar chart of the last thirty days, and details including average words per dictation, busiest hour and the apps dictated into most.
Counted from the history already on your disk. Nothing is uploaded to produce any of it.
Fluentry — AI Enhancement
The AI Enhancement screen, switched on and pointed at Ollama running on localhost with the model llama3.1:8b, an empty API key field, and the prompt sent with every dictation.
Off until you turn it on. Point it at Ollama on localhost, as here, or at anything else that speaks the same API.
Fluentry — Settings
The Dictation section of Settings: the shortcut recorder showing Right Alt, an activation mode, the text insertion mode, and switches for spoken punctuation, slash commands, filler-word removal and other formatting rules.
Record a new shortcut by pressing it. Everything the text passes through on its way to the keyboard is a switch in here.

While you talk, this is all that appears.

A pill at the edge of the screen with a level meter, and the words so far if you have asked for them. It never takes focus, so the cursor stays exactly where you left it and a screen reader stays on the document you are actually writing.

The recording overlay: a rounded pill labelled “Listening”, an orange level meter, and the transcribed words so far.
Install

Installed and dictating in a minute.

On Debian and Ubuntu the package brings everything with it, including the piece that lets Wayland remember your permission. The first launch walks you through picking a language, downloading an engine and trying a dictation.

$ sudo apt install ./fluentry_1.0.1_all.deb
$ fluentry

Not on Debian or Ubuntu? pip install 'fluentry[gui,audio,input,whisper,parakeet,libei]' — but a virtualenv cannot see the system python3-gi, so create it with --system-site-packages or the permission dialog returns on every launch.

guitray, overlay, windows
audiolow-latency capture
inputglobal hotkeys
whisperthe Whisper engines
parakeetthe Parakeet engines
onnxNemotron and Cohere
libeityping on Wayland
Engines

Pick the model that fits your machine.

Models download the first time you use them and live in your cache directory, so uninstalling takes them with it. Switch whenever you like.

EngineRuntimeNotes
Whisper Tiny … Largefaster-whisper or whisper.cpp99 languages; the runtime is fetched when you pick one, or an existing whisper.cpp binary is used
Parakeet TDT v3 / v2onnx-asr~640 MB int8, multilingual, ~300 ms for a short phrase
Nemotron, Cohere Transcribesherpa-onnxtheir exports use that runtime’s layout
Compatibility

Wayland, honestly.

Wayland withholds things from every application, Fluentry included. Typing into other apps is solved — through the input path the compositor sanctions, which asks your permission once. Here is what is left, and fluentry --check tells you which applies to your session before you hit it.

CapabilityX11WaylandWhat it needs there
Typing into other apps Works Works Through libei and the RemoteDesktop portal, which asks once and remembers. Needs python-libei and your distribution’s libei and python3-gi
Global hotkeys Works Needs a group sudo usermod -aG input "$USER", then log back in
Knowing the focused app
(per-app rules, and Ctrl+Shift+V in terminals)
Works Works Hyprland, Sway and KWin expose it directly. GNOME hides it, so the package ships a small Shell extension — enable Fluentry Focus, then log out and back in
Privacy

Where your words go: nowhere, unless you send them.

  • Transcription needs no network. The models run locally; dictation works with the machine offline.
  • History stays local, and can expire. A SQLite database on your disk that clears itself after a day, 7, 30 or 90 days if you ask it to.
  • Keys live in your keyring. The freedesktop Secret Service, never a plain-text file.
  • AI cleanup fails closed. Off by default. A provider is only contacted after you verify it, and what is stored is a hash of the endpoint-and-key pair — change either and the verification lapses.
  • The local API is loopback-only and switched off until you turn it on.

Stop typing what you could just say.