Repository navigation
Releases: Xhelliom/loquivox
Release list
v2.0.0 — three tools, one engine, and a conversation that looks things up
Four ways to speak to the AI have become two, on one engine — and both of them can now look things up.
Three tools instead of five
- Dictate (
R-Alt/F3): unchanged. - Chat (
F4): a spoken conversation about what is on your screen and the text you selected. Nothing is written at the end — unless you say "écris ça", and the whole exchange becomes one text, reviewed and typed like F6's. - Talk (
F6): a conversation that ends in one text. Select text first and it is the text to rework: select, F6, "make it formal", done — it replaces the selection.
Removed: Rewrite (F7) and Vision (F8). F4 covers the screenshot-and-ask case with a conversation instead of one question; F6 covers the rewrite. The one-shot review panel went with them: there is one review now, in the bubble. If your config.toml still binds ai_rewrite or vision, the lines are ignored with a warning — delete them.
During either conversation, T sends whatever you have highlighted right now, the way S re-reads the screen.
The conversation looks things up
The voice models are quick and lightly read. When one of them needs a fact, it now hands the question to a web-searching model, says it is looking, and keeps talking; the answer is given as soon as it is back, never mid-sentence. Works with both engines, cascade and Realtime, and the result feeds F6's final text too.
Settings → Models → Search picks who answers: a Groq compound model by default (measured at ~2 s, included in your Groq usage), or OpenAI's Responses API with web search (~16 s with gpt-5-mini, deeper on questions that need several sources).
Also in this release
- Settings rebuilt: every tab from the same three building blocks, one Apply button below the notebook instead of seven scattered across tabs, and the mouse wheel no longer changes whatever menu or slider it flies over.
- The assistant used to hear its own voice and stop mid-sentence, or talk over you and refuse to be interrupted with no explanation. Barge-in now measures the reply's own echo once and freezes; when the room makes interrupting hopeless, the bubble says so and what to do about it.
- The screen context of talk mode is captured as the active window, not the whole desktop — the vision model reads one window correctly and invents a 4K desktop.
- When the voice fails (a spent API key), the bubble says why instead of going silent.
- "C’est bon, on a fini." now ends a conversation: the Realtime transcript writes a typographic apostrophe the phrase list did not recognise.
Upgrading: remove ai_rewrite / vision from [hotkeys] if you set them. New keys ([models] research_provider, research; [talk] research, chat_prompt, write_phrases) are optional and documented in config.example.toml.
🤖 Generated with Claude Code
v1.4.0 — Talk mode, twice as fast and twice as visible
Talk mode (F6) reworked end to end.
Two engines, one promise — a conversation you can interrupt
Pick one in Settings → Models.
- Cascade (default): transcription, turn detection, the chat model and the voice, each swappable and each able to run on your machine. A turn now takes ~1.8 s instead of ~6.2 s.
- Realtime: one OpenAI session holds the whole conversation, speech in and speech out — ~1.0 s, and the reply keeps the prosody of speech.
Cut it off whenever you like. Start talking while it is still speaking and it stops mid-sentence and listens; your first words are kept as the start of your turn. It works out how loudly it can hear itself by listening to its own reply, so a headset needs no setting at all.
A fully local voice: Piper, no key and no network (pip install -e '.[tts]'), first sample in 0.18 s. Presets in Settings → Models pick a whole setup in one click.
You can watch it happen
A bubble opens on the hotkey, just above the recording indicator: your words appear as they are heard, the reply as it is written — sentence by sentence, not in one block when the model has finished thinking. It grows and shrinks with the exchange, stays translucent, and closes with the ✕. The finished text comes up for review right there.
Also new
- Settings → Talk → Instructions: standing instructions for the conversation — the language to answer in, the tone, the kind of work you discuss. Added to the built-in prompt, so talk mode still asks one question at a time and still knows when to stop.
- Paste without reviewing: the finished text lands at your cursor with no key to press. Off by default.
- Settings reorganised: everything about who does the work lives in Models, in the order the sound travels. Post-processing moved to its own Refinement tab. A ▶ Test button next to each voice.
Fixes
- End-of-turn detection could calibrate on your voice instead of the room, so a turn either never ended or was cut off mid-sentence. Fixed at the root: the detector is armed before the transcription session opens, and calibration can no longer conclude that a room is as loud as the voice in it.
- F6 showed nothing for half a second. The recording indicator now appears in 4 ms instead of 497.
- The chat overlay could keep the keyboard focus that dictation's paste was aimed at, which stopped dictation working until restart.
- A reply that asks a question can no longer end the conversation by itself.
- The Realtime engine no longer cuts off its own closing sentence.
- Settings tabs could redisplay pre-Apply values after a reload.
Upgrading: nothing to do. New config keys are all optional and documented in config.example.toml.
🤖 Generated with Claude Code
v1.3.0 — hotkey cheat sheet, refinement badge
Highlights
Hover hotkey cheat sheet
A thin tab sits at the top-center of the screen. Hover it and the full list of bound hotkeys drops down — keycap pills plus what each one does — retracting when the pointer leaves. Rebind a key in Settings and the next hover already shows it; unbound actions are left out.
Refinement badge on the recording overlay
While dictating, the overlay shows which post-processing the text will get — Medium, → EN, Light +fmt — as a chip in its own strip, so a live transcript or "Transcription…" can't paint over it. It follows the on-the-fly refine chooser, and applies to dictation only.
Both can be turned off in Settings → Appearance.
Under the hood
- Hotkey descriptions now live in a single place (
config.HOTKEY_DESCRIPTIONS), shared by the startup banner and the new bar. - Wayland uses
gtk-layer-shellanchored to the top edge with no exclusive zone; X11 a keep-above POPUP. The bar's animation tick only runs during a transition — no idle loop.
Full Changelog: v1.2.0...v1.3.0
v1.2.0 — hotkey hints, vocabulary, waveform fix
Hotkey hints on the recording overlay
The overlay now widens into a strip of keycap pills naming the hotkeys that actually do something at that moment — pause / refine / cancel while recording, cancel alone once transcribing. Keys are read from your live [hotkeys] config, so rebound (or unbound) actions are shown truthfully. Toggle it in Settings → Appearance → "Show available hotkeys next to the waveform".
Vocabulary: stop losing rare & foreign words
Speech engines silently drop words they don't expect — proper nouns, jargon, loanwords (a French dictation losing its English terms). Settings → Transcription → Vocabulary takes a comma-separated list and hands it to whichever mechanism your backend speaks:
| Backend | Sent as |
|---|---|
groq, whispercpp |
Whisper's prompt |
deepgram |
keyterm (nova-3 only; works with language=multi) |
openai_realtime |
not supported |
Also settable as [transcription] vocabulary = "..." in config.toml. Empty by default.
Fixed: the waveform's right half was dead
Only the left of the waveform ever moved. Each audio block was thinned by 10 and then spread across the 28 bars — but PortAudio delivers blocks of 4–139 frames, leaving ~20 bars with an empty slice, pinned at zero. Levels now scroll right-to-left, one per frame, from the RMS of everything captured (not the peak — a real mic idles at rms≈0.02 yet peaks past 0.5 on room noise alone, which pegs every bar with nobody talking). VIZ_GAIN is the calibration knob.
Also fixed: a stray diagonal drawn across the overlay by the transcribing spinner.
v1.1.1
Corrections
- Overlay (mode pill) : la forme d'onde garde désormais une largeur fixe pendant que la transcription en direct s'écrit. Auparavant le texte qui grandissait rognait le graphique de voix.
Note de version : resynchronisation de __version__ (était resté à 1.0.0).
v1.1.0
What's Changed
- Packaging groundwork: offline engine + AUR & .deb (Linux-first) by @Xhelliom in #29
- Hotkey combos (Alt+Space) + post-processing Refinement slider by @Xhelliom in #30
- Audit hotkeys/features, add CLAUDE.md + typed chat, fix Vision screenshot by @Xhelliom in #31
- feat: microphone selection + pill overlay style by @Xhelliom in #32
- ci(release): auto-build .deb + publish AUR on GitHub Release by @Xhelliom in #33
Full Changelog: whisper-engine-v1.8.6...v1.1.0
whisper.cpp engine v1.8.6
Prebuilt, statically-linked, portable whisper-cli binaries for Loquivox offline transcription. Consumed by the .deb and AppImage packaging recipes.