diff --git a/MANUAL.md b/MANUAL.md index 98a5eb9..f5c8c73 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -1,10 +1,11 @@ # Blitztext — User Manual -A reference for every setting in the Blitztext **Settings** window, tab by tab. +A reference for every setting in the Blitztext **Settings** window, page by page. Open Settings from the system-tray menu (**Settings…**) or the control panel. The -window has seven tabs — **Presets · Engines · Input · General · Benchmark · Log · -About** — and three buttons along the bottom. +sidebar lists all pages: **Presets · General · Keyboard · Wakeword · STT Engines · +LLM Engines · Benchmark — STT · Benchmark — Wakeword · Log · Manual · About**. +Three buttons run along the top: **Save**, **Save & Restart**, and **✕ Close**. > **Where settings are stored:** `~/.config/blitztext/config.toml` > (or `$XDG_CONFIG_HOME/blitztext/config.toml`). You can edit that file directly; @@ -20,7 +21,11 @@ About** — and three buttons along the bottom. --- -## Presets tab +## Presets + +
Presets are your dictation **actions**. Each one either types what you say, or rewrites it through the language model first (e.g. into a polished email). Trigger @@ -44,54 +49,35 @@ Use the dropdown at the top to pick a preset to edit, **+ Add** to create one, o --- -## Engines tab +## General -Engines do the work: the **speech-to-text (STT)** engine turns your voice into -text; the **language model (LLM)** rewrites it. Each engine can run locally or on -a server you specify. A **green dot** means it's reachable, **red** means offline. -The currently selected engine in each dropdown is the **active** one. + -### Speech-to-text engine - -Buttons: **+ Add** (cloud/OpenAI-style), **+ Stream** (realtime Riva/NIM), -**Delete**, **Test** (records 4 s and transcribes), **Refresh** (re-check status). -Each engine maps to a `[[stt_engine]]` entry; the active one is `[stt] active`. +Microphone, text delivery, language, notifications, the on-screen overlay, and +autostart. | Setting | TOML key | Description | |---|---|---| -| **Name** | `name` | A label for this engine (e.g. "faster-whisper GPU"). | -| **Type** | `type` | `local` (in-process faster-whisper) · `openai` (any OpenAI-compatible `/v1` STT server) · `riva_realtime` (live streaming engine). | -| **URL** | `url` | Server endpoint. Example: `http://localhost:8010/v1` · realtime: `http://localhost:8006/v1`. Ignored for `local`. | -| **Model** | `model` | Model name. For `local`: `tiny`/`base`/`small`/`medium`/`large-v3` or a path. For remote: blank = server default, or pick from the searchable list fetched from the URL. | -| **API key env** | `api_key_env` | *Name of the environment variable* holding the API key (e.g. `GROQ_API_KEY`). Optional. | - -**Local engine (faster-whisper) — device & precision** (global, `[whisper]`): - -| Setting | TOML key | Description | -|---|---|---| -| **Device** | `device` | `auto` (try CUDA, fall back to CPU) · `cpu` · `cuda`. | -| **Compute type** | `compute_type` | `auto` · `int8` · `float16` · `int8_float16`. Lower precision is faster and uses less memory. | - -### Language model (rewrite) - -Buttons: **+ Add**, **Delete**, **Refresh**. Each maps to a `[[llm_engine]]` -entry; the active one is `[llm] active`. - -| Setting | TOML key | Description | -|---|---|---| -| **Name** | `name` | A label for this LLM (e.g. "Local Qwen"). | -| **Type** | `type` | `local` (a server on this machine) or `cloud`. | -| **Base URL** | `url` | OpenAI-compatible endpoint, e.g. `http://localhost:28080/v1` or `https://api.openai.com/v1`. | -| **Model** | `model` | The model to use; pick from the list once the URL is set. | -| **API key env** | `api_key_env` | Environment-variable name holding the key (e.g. `OPENAI_API_KEY`). Blank for local servers. | -| **Temperature** | `temperature` | Default creativity for rewrites (e.g. `0.3`). Presets can override this. | +| **Microphone** | `mic` | Which input device Blitztext records from. | +| **Input level** | — | Live level bar (read-only); should move when you speak. | +| **Output** | `output` | `type` types the text key-by-key · `paste` copies it and presses Ctrl+V (faster for long text). | +| **Language hint** | `language` | Spoken-language code (`de`, `en`, …). Blank = auto-detect. | +| **Notifications** | `notify` | Show desktop notifications for recording/transcription status and errors (manual sessions). | +| **Announce matched preset** | `notify_routing` | After a voice command, pop a notification showing which preset (and spoken keyword) matched — shown **even for hands-free** sessions, with the preset's emoji. Only fires on a real match. | +| **Visual overlay** | `overlay_enabled` | Show a translucent bubble at the cursor while you dictate — a pulsing **microphone**, a **live waveform** of your mic level, and the **recognised text** (word-by-word with a streaming engine, or the final result as a brief confirmation). The tail points at where the text lands, and it gives **hands-free** sessions visible feedback. Click-through; never takes focus. *(X11 only.)* | +| **Launch on login** | *(autostart file)* | Start Blitztext automatically when you log in (writes a desktop autostart entry, not `config.toml`). | --- -## Input tab +## Keyboard -Controls **how you start and stop** dictating, the noise filter, hands-free -wakeword, and audio cues. + + +Controls **how you start and stop** dictating with the keyboard, the noise filter, and audio cues. ### Input mode & keys @@ -120,7 +106,26 @@ in the `[quality]` section. | **Reject hallucinations** | `reject_hallucinations` | Drop STT "ghost" outputs like *"Thank you."* / *"Bye."* that Whisper invents from silence. | | **Strip trailing punctuation** | `strip_trailing_punctuation` | Remove ending periods from delivered text — handy for code insertion. | -### Hands-free (Wakeword) +### Audio cues (manual dictation) + +These control the chimes for **manual** (keyboard/hotkey) dictation only. The +hands-free wakeword sounds are **separate and independent** (see Wakeword page). + +| Setting | TOML key | Description | +|---|---|---| +| **Play audio cues** | `[sounds] enabled` | On/off for the **manual** start/stop chimes below. Does **not** affect the wakeword sounds. | +| **Play before** | `[sounds] before` | Chime when recording **starts** (manual dictation). Empty = built-in system sound. | +| **Play after** | `[sounds] after` | Chime when recording **stops** (paste, paste+Enter, or auto-stop on silence). Empty = built-in system sound. | + +> Each sound row has ▶ (preview) and ⌫ (clear). + +--- + +## Wakeword + + Start dictation with a spoken keyword via an external [Wyoming](https://github.com/rhasspy/wyoming) openWakeWord server. Maps to the @@ -143,20 +148,7 @@ Start dictation with a spoken keyword via an external > You can also pause/resume detection from the tray ("Pause wakeword"), which > toggles the `/tmp/wake_muted` flag. -### Audio cues (manual dictation) - -These control the chimes for **manual** (keyboard/hotkey) dictation only. The -hands-free wakeword sounds above are **separate and independent**. - -| Setting | TOML key | Description | -|---|---|---| -| **Play audio cues** | `[sounds] enabled` | On/off for the **manual** start/stop chimes below. Does **not** affect the wakeword sounds above. | -| **Play before** | `[sounds] before` | Chime when recording **starts** (manual dictation). Empty = built-in system sound. | -| **Play after** | `[sounds] after` | Chime when recording **stops** (paste, paste+Enter, or auto-stop on silence). Empty = built-in system sound. | - -> Each sound row has ▶ (preview) and ⌫ (clear). -> -> **The two pairs differ by trigger *and* by empty-behaviour:** +> **The two sound pairs differ by trigger *and* by empty-behaviour:** > > | | Plays on | Used for | When empty | > |---|---|---|---| @@ -165,28 +157,69 @@ hands-free wakeword sounds above are **separate and independent**. --- -## General tab +## STT Engines -Microphone, text delivery, language, notifications, the on-screen overlay, and -autostart. + + +The **speech-to-text** engine turns your voice into text. Each engine can run +locally or on a server. A **green dot** means it's reachable, **red** means +offline. The active engine is the one selected in the top dropdown. + +Buttons: **+ Add** (batch/cloud/OpenAI-style), **+ Stream** (realtime Riva/NIM), +**Delete**, **Test** (records 4 s and transcribes), **Refresh** (re-check status). +Each engine maps to a `[[stt_engine]]` entry; the active one is `[stt] active`. | Setting | TOML key | Description | |---|---|---| -| **Microphone** | `mic` | Which input device Blitztext records from. | -| **Input level** | — | Live level bar (read-only); should move when you speak. | -| **Output** | `output` | `type` types the text key-by-key · `paste` copies it and presses Ctrl+V (faster for long text). | -| **Language hint** | `language` | Spoken-language code (`de`, `en`, …). Blank = auto-detect. | -| **Notifications** | `notify` | Show desktop notifications for recording/transcription status and errors (manual sessions). | -| **Announce matched preset** | `notify_routing` | After a voice command, pop a notification showing which preset (and spoken keyword) matched — shown **even for hands-free** sessions, with the preset's emoji. Only fires on a real match. | -| **Visual overlay** | `overlay_enabled` | Show a translucent bubble at the cursor while you dictate — a pulsing **microphone**, a **live waveform** of your mic level, and the **recognised text** (word-by-word with a streaming engine, or the final result as a brief confirmation). The tail points at where the text lands, and it gives **hands-free** sessions visible feedback. Click-through; never takes focus. *(X11 only.)* | -| **Launch on login** | *(autostart file)* | Start Blitztext automatically when you log in (writes a desktop autostart entry, not `config.toml`). | +| **Name** | `name` | A label for this engine (e.g. "faster-whisper GPU"). | +| **Type** | `type` | `local` (in-process faster-whisper) · `openai` (any OpenAI-compatible `/v1` STT server) · `riva_realtime` (live streaming engine). | +| **URL** | `url` | Server endpoint. Example: `http://localhost:8010/v1` · realtime: `http://localhost:8006/v1`. Ignored for `local`. | +| **Model** | `model` | Model name. For `local`: `tiny`/`base`/`small`/`medium`/`large-v3` or a path. For remote: blank = server default, or pick from the searchable list fetched from the URL. | +| **API key env** | `api_key_env` | *Name of the environment variable* holding the API key (e.g. `GROQ_API_KEY`). Optional. | + +**Local engine (faster-whisper) — device & precision** (global, `[whisper]`): + +| Setting | TOML key | Description | +|---|---|---| +| **Device** | `device` | `auto` (try CUDA, fall back to CPU) · `cpu` · `cuda`. | +| **Compute type** | `compute_type` | `auto` · `int8` · `float16` · `int8_float16`. Lower precision is faster and uses less memory. | --- -## Benchmark tab +## LLM Engines + + + +The **language model** rewrites your dictated text (e.g. into a polished email). +Each engine can be a local LAN server or a cloud service. The active engine is +the one selected in the top dropdown. + +Buttons: **+ Add**, **Delete**, **Refresh**. Each maps to a `[[llm_engine]]` +entry; the active one is `[llm] active`. + +| Setting | TOML key | Description | +|---|---|---| +| **Name** | `name` | A label for this LLM (e.g. "Local Qwen"). | +| **Type** | `type` | `local` (a server on this machine) or `cloud`. | +| **Base URL** | `url` | OpenAI-compatible endpoint, e.g. `http://localhost:28080/v1` or `https://api.openai.com/v1`. | +| **Model** | `model` | The model to use; pick from the list once the URL is set. | +| **API key env** | `api_key_env` | Environment-variable name holding the key (e.g. `OPENAI_API_KEY`). Blank for local servers. | +| **Temperature** | `temperature` | Default creativity for rewrites (e.g. `0.3`). Presets can override this. | + +--- + +## Benchmark — STT + + Compare your STT engines for **speed and accuracy** on the same clip. Add an -engine preset (Engines tab) for each model you want to compare. No persistent +engine in the STT Engines page for each model you want to compare. No persistent settings — it's a one-off tool. 1. **Audio (.wav)** — a recording to transcribe. @@ -213,7 +246,24 @@ A summary line names the **fastest** and **most accurate** engine. Click any col --- -## Log tab +## Benchmark — Wakeword + + + +Stress-test your wakeword detection by generating speech with a TTS server and +checking whether the wake word fires correctly. Reports **recall** (how often it +fires when it should) and **false-fire rate** (how often it fires on non-wake +speech) across multiple synthetic voices. + +--- + +## Log + + A live activity log — useful to watch a model load/download or to diagnose a problem (recording, transcription, routing, and wakeword events all appear here). @@ -227,7 +277,21 @@ problem (recording, transcription, routing, and wakeword events all appear here) --- -## About tab +## Manual + + + +Inline copy of this manual, readable without leaving the app. + +--- + +## About + + Read-only information: diff --git a/README.md b/README.md index 452cf2c..c8241d6 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,13 @@ Blitztext is a native Linux dictation tool that captures your voice, transcribes > No hosted backend — bring your own models and endpoints.
-
+
+
+
-
+
- 
- Presets — your dictation actions. Each preset is either a plain transcription or an LLM rewrite, and carries its own spoken keyword(s) for voice routing, an optional global hotkey, and a custom rewrite prompt.
+
+
+
+
+ Left: Control panel listing all presets with icons, descriptions, and hotkeys. + + Right: On-screen overlay showing the live waveform while listening.
- 
- Engines — your speech-to-text and language-model back-ends, local or remote. Add and rename engines, watch live online/offline status, and pick models from a searchable list fetched straight from the endpoint.
+
+
+ Overlay after transcription — preset name and recognised text appear at the cursor. +
+ +### Settings — General & Input + + ++ Presets — dictation actions with keywords, hotkeys, LLM mode, and custom prompts. + + General — microphone, output mode, language hint, notifications, overlay, autostart.
- 
- Input — how you start and stop dictation: the modifier-key scheme (Ctrl+Win / Ctrl / Alt / Esc) or custom hotkeys, plus the silence-based auto-stop (VAD), the quality gate, and audio cues.
+
+
+
+
+ Keyboard — modifier-key scheme or direct hotkeys, quality gate, audio cues. + + Wakeword — hands-free dictation via a Wyoming/openWakeWord server, with live level meter and model picker. +
+ +### Settings — Engines + + ++ STT Engines — speech-to-text back-ends (local faster-whisper, OpenAI-compatible server, or Riva realtime), with green/red status dot and Test button. + + LLM Engines — language-model back-ends for text rewriting (LAN server or cloud service). +
+ +### Settings — Benchmark + + ++ Benchmark — STT — compare every configured engine against a reference WAV + transcript; results table shows speed, accuracy, device, and language support. + + Benchmark — Wakeword — stress-test wakeword detection using a TTS server to synthesise wake phrases in random voices, reporting recall and false-fire rates. +
+ +### Settings — Log & About + + ++ Log — live activity log for recording, transcription, routing, and wakeword events. + + About — version, source link, inline changelog, and licence. +
+ +### Setup Wizard + +The first-run wizard guides you through the essentials in a few steps. + + ++ Welcome · Choose trigger mode (keyboard / wakeword / both) · Set keyboard shortcuts
- 
- Wakeword (hands-free) — point Blitztext at a Wyoming/openWakeWord server, choose a wake model, and test the connection live so a spoken keyword starts dictation with no keys at all.
+
+
+
+
+
+
+ Voice activation (wakeword server) · Choose STT engine · Optional AI text rewriting
- 
- General — core preferences: microphone with a live level meter, output mode (type vs. paste), language hint, type delay, the on-screen dictation overlay, and autostart on login.
+
- 
- Benchmark — compare every configured STT engine against a reference WAV + transcript to find the fastest and most accurate, with a Device column (CPU / GPU / remote).
-
- 
- Log — the in-app log buffer: a live view of recording, transcription, routing, and wakeword events for quick troubleshooting.
-
- 
- About — version, source link, changelog, and licence.
+ Summary screen — ready to dictate.
-
+
+
+
-
+
- 
- Presets — your dictation actions. Each preset is either a plain transcription or an LLM rewrite, and carries its own spoken keyword(s) for voice routing, an optional global hotkey, and a custom rewrite prompt.
+
+
+
+
+ Left: Control panel listing all presets with icons, descriptions, and hotkeys. + + Right: On-screen overlay showing the live waveform while listening.
- 
- Engines — your speech-to-text and language-model back-ends, local or remote. Add and rename engines, watch live online/offline status, and pick models from a searchable list fetched straight from the endpoint.
+
+
+ Overlay after transcription — preset name and recognised text appear at the cursor. +
+ +### Settings — General & Input + + ++ Presets — dictation actions with keywords, hotkeys, LLM mode, and custom prompts. + + General — microphone, output mode, language hint, notifications, overlay, autostart.
- 
- Input — how you start and stop dictation: the modifier-key scheme (Ctrl+Win / Ctrl / Alt / Esc) or custom hotkeys, plus the silence-based auto-stop (VAD), the quality gate, and audio cues.
+
+
+
+
+ Keyboard — modifier-key scheme or direct hotkeys, quality gate, audio cues. + + Wakeword — hands-free dictation via a Wyoming/openWakeWord server, with live level meter and model picker.
-
- 
- Wakeword (hands-free) — point Blitztext at a Wyoming/openWakeWord server, choose a wake model, and test the connection live so a spoken keyword starts dictation with no keys at all.
-
- 
- General — core preferences: microphone with a live level meter, output mode (type vs. paste), language hint, type delay, the on-screen dictation overlay, and autostart on login.
+
+
+
+
+ STT Engines — speech-to-text back-ends (local faster-whisper, OpenAI-compatible server, or Riva realtime), with green/red status dot and Test button. + + LLM Engines — language-model back-ends for text rewriting (LAN server or cloud service).
-
- 
- Benchmark — compare every configured STT engine against a reference WAV + transcript. The results table shows time, accuracy (WER), device (CPU / GPU / remote), language support, and RAM usage (MB loaded during first run — useful for sizing local models). Also includes a wakeword benchmark: point it at any OpenAI-compatible TTS server (Kokoro, XTTS, …), and it synthesizes your wake phrase in random voices, streams it to your wyoming-openwakeword server, and reports recall + false-fires per voice.
-
- 
- Log — the in-app log buffer: a live view of recording, transcription, routing, and wakeword events for quick troubleshooting.
+
+
+
+
+ Benchmark — STT — compare engines against a reference WAV + transcript; table shows speed, accuracy, device, and language support. + + Benchmark — Wakeword — stress-test wakeword detection via a TTS server, reporting recall and false-fire rates per voice.
+### Settings — Log & About +
- 
- About — version, source link, changelog, and licence.
+
+
+
+
+ Log — live activity log for recording, transcription, routing, and wakeword events. + + About — version, source link, inline changelog, and licence.
## Requirements