The upstream app is macOS-only (Swift/SwiftUI, CoreML/WhisperKit) and can't run on Linux or in a container. This adds a native host tool under linux/ that reproduces the workflow: focus any text field, press a hotkey, speak, and the optionally-rewritten text is typed into that field. - Engine: pynput global hotkeys → mic record → local faster-whisper → optional OpenAI-compatible rewrite → xdotool typing into the focused window - Frontends: system tray (AppIndicator, default), tkinter control panel, and headless modes - Config-driven workflows in ~/.config/blitztext/config.toml with per-workflow prompt/model/temperature overrides - Packaging: install.sh, requirements.txt, systemd user unit - Targets X11; local transcription runs CPU int8 on this arm64 host See linux/CHANGELOG.md and linux/README.md for details. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
Changelog
All notable changes to Blitztext for Linux (the native dictation tool in
linux/) are documented here. The format follows
Keep a Changelog, and this project
adheres to Semantic Versioning.
The version is defined in blitztext/__init__.py.
Unreleased
1.0.0 - 2026-06-03
First release of the Linux port. The upstream project is a macOS-only menu-bar app (Swift/SwiftUI, CoreML/WhisperKit) that cannot run on Linux or in a container; this is a native host tool that reproduces the workflow — focus any text field, press a hotkey, speak, and the (optionally rewritten) text is typed into that field.
Added
- Native dictation engine (
daemon.py): global hotkeys via pynput, each hotkey toggles record → transcribe → optional rewrite → deliver. - Local transcription via faster-whisper (
transcribe.py);device="auto"tries CUDA and falls back to CPUint8(CPU-only on this arm64 host). - Microphone recording (
recorder.py) through pw-record / parecord / arecord — 16 kHz mono WAV, no Python audio bindings required. - Optional LLM rewrite (
rewrite.py) against any OpenAI-compatible endpoint (OpenAI, or a local vLLM / llama-swap), configurable per workflow. - Typing into the focused window via xdotool (
paste.py):typedirectly orpastethrough the clipboard; re-activates the target window first. - Configurable workflows (
config.py) in~/.config/blitztext/config.toml, with five defaults (Transcribe, Nicer email, Improve text, Calm down, Add emojis), per-workflow prompt/model/temperature overrides, and a TOML writer. - Control-panel window (
gui.py, tkinter): workflow rows with monogram avatars, hotkey badges, per-row Record buttons, a live status dot, and a Settings window that edits config and can Save & Restart. - System-tray mode (
tray.py, AppIndicator): macOS-menu-bar-style status icon with a menu to trigger each workflow, Show panel, Settings…, and Quit; shares one daemon/model/hotkey set with the window. Falls back to the window with an install hint when PyGObject is absent. - CLI (
__main__.py):tray(default),gui,run,transcribe,config-path, and--version. - Packaging:
install.sh(venv with--system-site-packages),requirements.txt, and ablitztext.servicesystemd user unit.
Notes
- Targets an X11 session (uses xdotool); Wayland would need ydotool/wtype.
- System tray requires a one-time
sudo apt install python3-gi(the GTK / AppIndicator typelibs and GNOMEubuntu-appindicatorsextension are already present on the target host).