Skip to content

Releases: Xhelliom/loquivox

v2.0.0 — three tools, one engine, and a conversation that looks things up

Choose a tag to compare

@Xhelliom Xhelliom released this 04 Sep 12:34

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

Choose a tag to compare

@Xhelliom Xhelliom released this 25 Aug 15:37

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

Choose a tag to compare

@Xhelliom Xhelliom released this 30 Jul 14:11

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-shell anchored 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

Choose a tag to compare

@Xhelliom Xhelliom released this 16 Jul 08:31

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

Choose a tag to compare

@Xhelliom Xhelliom released this 19 Jun 08:27

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

Choose a tag to compare

@Xhelliom Xhelliom released this 16 Jun 14:25
4f3a770

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

Choose a tag to compare

@github-actions github-actions released this 11 Jun 20:00
3b978b8

Prebuilt, statically-linked, portable whisper-cli binaries for Loquivox offline transcription. Consumed by the .deb and AppImage packaging recipes.