local-voice is a small desktop voice scratchpad for terminal and agent workflows.
It is built to be:
- offline after setup
- fast to trigger with a global shortcut
- editable before copy or paste
- disposable by default, with no transcript history
Current implementation:
- Tauri desktop shell
- native Linux microphone capture through
ffmpeg - local Python backend managed with
uv faster-whispertranscription- editable transcript panel
- global shortcuts for record toggle and paste-current-transcript
- tray/app-indicator integration
This repository is currently prepared for:
- Ubuntu / Debian-like Linux
- source-based local setup
- maintainer-built AppImage packaging on Linux
- offline use after the first setup and local model download
Desktop support status:
- Ubuntu GNOME on X11: tested primary path
- Lubuntu / LXQt on X11: likely supported, but not yet fully desktop-verified
- Wayland sessions: secondary path with more paste/input caveats
From the repository root:
./setup.sh
./doctor.sh
./run-dev.shThat setup flow will:
- install Linux system packages needed for Tauri and
ffmpeg - install Node.js 20.x from NodeSource if a suitable local Node install is missing
- install
rustupif missing - install
uvif missing - run
npm ci - create and sync the Python backend environment
- download the default local
smallmodel if it is missing
First-time setup is not tiny:
- on a fresh machine, expect several minutes rather than seconds
- the default local
smallmodel is about464 MB - the heavy part is the one-time toolchain and model download, not normal app usage
The easiest end-user path is now a Linux AppImage release rather than a source checkout.
Current packaged build status:
- AppImage packaging works on the primary Ubuntu path
- published GitHub Releases can attach the AppImage automatically
- the packaged app bundles the Tauri shell and Python backend
- the packaged backend currently expects a compatible system
python3on the target machine - the packaged app still expects system-installed
ffmpeg - the packaged app does not bundle a speech model by default
For maintainers, build the Linux package from the repo root with:
npm run package:linuxFor end users, the intended path is:
- open the latest GitHub Release
- download the
.AppImage - ensure
ffmpegand a compatiblepython3exist on the machine - launch the AppImage
- download the default model from Settings on first use if needed
Current verified output on this machine:
src-tauri/target/release/bundle/appimage/Local Voice_0.1.0_amd64.AppImage
Important packaged-app first-run note:
- users still need a local model before transcription works
- the packaged app can download the default
smallmodel from the settings panel - maintainers can bundle the model with
scripts/build-package-linux.sh --with-model, but that should be treated as a separate redistribution decision
./doctor.sh
./run-dev.sh
npm run build
npm run package:linux
source "$HOME/.cargo/env" && cargo check --manifest-path src-tauri/Cargo.toml
npm run smoke:ubuntu- no cloud APIs
- no telemetry by default
- no transcript history by default
- no backend server
- temp audio and transcript artefacts are cleaned on a schedule
- Linux microphone capture is native through
ffmpeg, not browser-stylegetUserMedia - FFmpeg is treated as a system dependency and is not bundled in the current source release
- the tray is implemented as an app-indicator, not as a custom GNOME shell widget
- Linux paste automation is best-effort:
- terminal-like windows use
Ctrl+Shift+V - general GUI apps use
Ctrl+V
- terminal-like windows use
- X11 is the strongest path for cross-app paste behavior right now
- Ubuntu installation details
- Contributing
- Permissions and platform notes
- Troubleshooting
- Desktop verification
- Release checklist
- Third-party notices
- Backend notes
src/: frontend widget UI and local statesrc-tauri/: native shell, tray, shortcuts, cleanup, clipboard, paste integrationpython-backend/: FFmpeg +faster-whisperworkerscripts/: setup, doctor, smoke-test, and verification helpersdocs/: install, platform notes, troubleshooting, and release workflow
- Linux is the primary supported platform right now
- paste automation is less reliable on Wayland than on X11
- Lubuntu / LXQt on X11 is a likely good fit, but is not yet marked as fully tested
- the Python worker is still one-shot, so first-transcript latency is higher than a warm worker design