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 page +

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. +

+ General page +

-### 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. +

+ Keyboard page +

+ +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 + +

+ Wakeword page +

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. +

+ STT Engines page +

+ +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 + +

+ LLM Engines page +

+ +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 + +

+ Benchmark — STT page +

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 + +

+ Benchmark — Wakeword page +

+ +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 + +

+ Log page +

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 + +

+ Manual page +

+ +Inline copy of this manual, readable without leaving the app. + +--- + +## About + +

+ About page +

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.

- Blitztext control panel + Blitztext control panel +

+ +

+ On-screen overlay while listening    - Blitztext system-tray menu + On-screen overlay showing transcription result

📖 **[User manual](MANUAL.md)** — every setting in every tab, explained. @@ -65,47 +69,124 @@ Stream: hotkey → mic PCM chunks → Riva/NIM WebSocket → live words typed ## Screenshots -Everything is configured in the GTK **Settings** window — every tab has tooltips -and screen-reader (ATK) support. Click any image to open it full size. +Everything is configured in the GTK **Settings** window — the sidebar gives quick +access to every page. All controls have tooltips and screen-reader (ATK) support. +Click any image to open it full size. + +### Main panel & overlay

- Presets settings tab
- 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. + Blitztext main panel +   + Overlay — listening +

+

+ Left: Control panel listing all presets with icons, descriptions, and hotkeys. +    + Right: On-screen overlay showing the live waveform while listening.

- Engines settings tab
- 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 — transcription result +

+

+ Overlay after transcription — preset name and recognised text appear at the cursor. +

+ +### Settings — General & Input + +

+ Presets page +   + General page +

+

+ Presets — dictation actions with keywords, hotkeys, LLM mode, and custom prompts. +    + General — microphone, output mode, language hint, notifications, overlay, autostart.

- Input settings tab
- 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 page +   + Wakeword page +

+

+ 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 page +   + LLM Engines page +

+

+ 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 page +   + Benchmark — Wakeword page +

+

+ 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 page +   + About page +

+

+ 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. + +

+ Setup — Welcome +   + Setup — Trigger mode +   + Setup — Keyboard shortcuts +

+

+ Welcome  ·  Choose trigger mode (keyboard / wakeword / both)  ·  Set keyboard shortcuts

- Wakeword (hands-free) settings
- 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. + Setup — Voice activation +   + Setup — STT engine +   + Setup — AI rewriting +

+

+ Voice activation (wakeword server)  ·  Choose STT engine  ·  Optional AI text rewriting

- General settings tab
- 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. + Setup — All done

-

- Benchmark settings tab
- 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 settings tab
- Log — the in-app log buffer: a live view of recording, transcription, routing, and wakeword events for quick troubleshooting. -

- -

- About settings tab
- About — version, source link, changelog, and licence. + Summary screen — ready to dictate.

--- diff --git a/Screenshots/main-panel.png b/Screenshots/main-panel.png new file mode 100644 index 0000000..74bb7c7 Binary files /dev/null and b/Screenshots/main-panel.png differ diff --git a/Screenshots/overlay-listening.png b/Screenshots/overlay-listening.png new file mode 100644 index 0000000..d9f20ae Binary files /dev/null and b/Screenshots/overlay-listening.png differ diff --git a/Screenshots/overlay-result.png b/Screenshots/overlay-result.png new file mode 100644 index 0000000..9c4e3d4 Binary files /dev/null and b/Screenshots/overlay-result.png differ diff --git a/Screenshots/settings-about.png b/Screenshots/settings-about.png index 4113fc2..d0b437b 100644 Binary files a/Screenshots/settings-about.png and b/Screenshots/settings-about.png differ diff --git a/Screenshots/settings-benchmark-stt.png b/Screenshots/settings-benchmark-stt.png new file mode 100644 index 0000000..961401f Binary files /dev/null and b/Screenshots/settings-benchmark-stt.png differ diff --git a/Screenshots/settings-benchmark-wakeword.png b/Screenshots/settings-benchmark-wakeword.png new file mode 100644 index 0000000..17730b9 Binary files /dev/null and b/Screenshots/settings-benchmark-wakeword.png differ diff --git a/Screenshots/settings-general.png b/Screenshots/settings-general.png index dc1e688..b35e36e 100644 Binary files a/Screenshots/settings-general.png and b/Screenshots/settings-general.png differ diff --git a/Screenshots/settings-keyboard.png b/Screenshots/settings-keyboard.png new file mode 100644 index 0000000..7a664b4 Binary files /dev/null and b/Screenshots/settings-keyboard.png differ diff --git a/Screenshots/settings-llm-engines.png b/Screenshots/settings-llm-engines.png new file mode 100644 index 0000000..67acce9 Binary files /dev/null and b/Screenshots/settings-llm-engines.png differ diff --git a/Screenshots/settings-log.png b/Screenshots/settings-log.png index ee939da..995d8fb 100644 Binary files a/Screenshots/settings-log.png and b/Screenshots/settings-log.png differ diff --git a/Screenshots/settings-manual.png b/Screenshots/settings-manual.png new file mode 100644 index 0000000..8f1fbb3 Binary files /dev/null and b/Screenshots/settings-manual.png differ diff --git a/Screenshots/settings-presets.png b/Screenshots/settings-presets.png index 940a7e4..45ff7f7 100644 Binary files a/Screenshots/settings-presets.png and b/Screenshots/settings-presets.png differ diff --git a/Screenshots/settings-stt-engines.png b/Screenshots/settings-stt-engines.png new file mode 100644 index 0000000..efc55d4 Binary files /dev/null and b/Screenshots/settings-stt-engines.png differ diff --git a/Screenshots/settings-wakeword.png b/Screenshots/settings-wakeword.png new file mode 100644 index 0000000..4361443 Binary files /dev/null and b/Screenshots/settings-wakeword.png differ diff --git a/Screenshots/setup-ai.png b/Screenshots/setup-ai.png new file mode 100644 index 0000000..7c92862 Binary files /dev/null and b/Screenshots/setup-ai.png differ diff --git a/Screenshots/setup-done.png b/Screenshots/setup-done.png new file mode 100644 index 0000000..a69bba9 Binary files /dev/null and b/Screenshots/setup-done.png differ diff --git a/Screenshots/setup-shortcuts.png b/Screenshots/setup-shortcuts.png new file mode 100644 index 0000000..16bbf68 Binary files /dev/null and b/Screenshots/setup-shortcuts.png differ diff --git a/Screenshots/setup-stt.png b/Screenshots/setup-stt.png new file mode 100644 index 0000000..e0f9b9c Binary files /dev/null and b/Screenshots/setup-stt.png differ diff --git a/Screenshots/setup-trigger.png b/Screenshots/setup-trigger.png new file mode 100644 index 0000000..c34fe2d Binary files /dev/null and b/Screenshots/setup-trigger.png differ diff --git a/Screenshots/setup-voice.png b/Screenshots/setup-voice.png new file mode 100644 index 0000000..9122bbb Binary files /dev/null and b/Screenshots/setup-voice.png differ diff --git a/Screenshots/setup-welcome.png b/Screenshots/setup-welcome.png new file mode 100644 index 0000000..be8aaf2 Binary files /dev/null and b/Screenshots/setup-welcome.png differ diff --git a/linux/README.md b/linux/README.md index 5382811..8b174c6 100644 --- a/linux/README.md +++ b/linux/README.md @@ -13,9 +13,13 @@ experiment along those lines was moved out to the optional rewrite step calls out to an LLM.

- Blitztext control panel + Blitztext control panel +

+ +

+ On-screen overlay while listening    - Blitztext system-tray menu + On-screen overlay showing transcription result

## Inspiration @@ -61,47 +65,90 @@ visible feedback. Tune the anchor with `[general] overlay_anchor`. X11 only. ## Screenshots -Everything is configured in the **Settings** window — every tab has tooltips and -screen-reader (ATK) support. Click any image to open it full size. +Everything is configured in the **Settings** window — the sidebar gives quick +access to every page. Click any image to open it full size. + +### Main panel & overlay

- Presets settings tab
- 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. + Blitztext main panel +   + Overlay — listening +

+

+ Left: Control panel listing all presets with icons, descriptions, and hotkeys. +    + Right: On-screen overlay showing the live waveform while listening.

- Engines settings tab
- 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 — transcription result +

+

+ Overlay after transcription — preset name and recognised text appear at the cursor. +

+ +### Settings — General & Input + +

+ Presets page +   + General page +

+

+ Presets — dictation actions with keywords, hotkeys, LLM mode, and custom prompts. +    + General — microphone, output mode, language hint, notifications, overlay, autostart.

- Input settings tab
- 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 page +   + Wakeword page +

+

+ 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) settings
- 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. -

+### Settings — Engines

- General settings tab
- 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 page +   + LLM Engines page +

+

+ 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 settings tab
- 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. -

+### Settings — Benchmark

- Log settings tab
- Log — the in-app log buffer: a live view of recording, transcription, routing, and wakeword events for quick troubleshooting. + Benchmark — STT page +   + Benchmark — Wakeword page +

+

+ 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 settings tab
- About — version, source link, changelog, and licence. + Log page +   + About page +

+

+ Log — live activity log for recording, transcription, routing, and wakeword events. +    + About — version, source link, inline changelog, and licence.

## Requirements