Cross-platform desktop voice-to-text app (Windows + macOS) with:
- Tray/top-bar background mode
- Global hold-to-talk hotkey (
Ctrl+Gon Windows,Cmd+Gon macOS) - Siri-style popup with streaming partials and final transcription
- Automatic clipboard copy on final result
- Local-only processing with GigaAM
v3_e2e_rnnt - Bundled Python sidecar in installer (target machine does not need Python)
- Desktop shell: Tauri v2 + React + TypeScript
- ASR sidecar: Python (
python/asr_service.py) - Model:
gigaam.load_model("v3_e2e_rnnt") - GigaAM source: GitHub
salute-developers/GigaAM(PyPI0.1.0is too old forv3_e2e_rnnt)
- Node.js 20+
- Rust toolchain (stable)
- Python 3.10+
- Windows only: Visual Studio 2022 with
Desktop development with C++and Windows 10/11 SDK - On Windows with CUDA: NVIDIA drivers + CUDA-compatible PyTorch build
Only the build machine needs Python. End users install via .exe/.dmg and do not need Python.
make setup
make devIf you want to debug the app locally without using installer and without localhost errors:
npm run run-local-winThis builds a local debug exe with embedded frontend and runs:
src-tauri/target/debug/sber-whisper.exe
By default, this command rebuilds the sidecar every run, so dependency updates are applied.
For local GPU debug sidecar build:
set SIDECAR_VARIANT=gpu && npm run run-local-winmake release builds for the current host OS:
- Windows host -> NSIS
.exe - macOS host ->
.dmg
Output artifacts are copied to artifacts/releases.
The release build first creates a standalone ASR sidecar binary (sber-whisper-sidecar) and
embeds it into the installer resources, so you can share just the installer file.
Windows installer is CPU-first by default, so resulting setup.exe stays smaller and stable for sharing.
Manual targets:
make release-win
make release-macGPU variant is separate from installer build.
Build GPU portable package (no installer):
make release-win-gpuResult:
- folder:
artifacts/releases/sber-whisper-gpu-portable-win-x64 - zip:
artifacts/releases/sber-whisper-gpu-portable-win-x64.zip
Run GPU portable build:
- Unzip package.
- Keep
sber-whisper.exeandsber-whisper-sidecar/in the same folder. - Start
sber-whisper.exe.
Build only GPU sidecar (without packaging):
make gpu-sidecar-winRun these commands on a Mac host:
xcode-select --install
brew install node python@3.11 rustup-init
rustup-init -yThen from the project directory:
make setup
make release-macResulting .dmg is copied to artifacts/releases.
- App starts hidden in tray/top-bar.
- Hold global hotkey to record; release to transcribe.
- If retriggered while busy: current job is cancelled, new one starts.
- Popup closes by timeout, close click, or any keypress while focused.
- Audio is written to temp file only during job and immediately deleted after transcription.
Settings window supports:
- Hotkey
- Popup auto-hide timeout
- Model keepalive timeout (minutes before ASR model unloads from RAM/VRAM when idle)
- Launch at login toggle
Settings are stored in app config directory as app_settings.json.
Local rotating logs (no telemetry):
app.log(Rust app)asr.log(Python sidecar)
Both are stored under app config logs folder.
Python sidecar command IPC (stdin JSON lines):
initstart_recordingstop_and_transcribecancel_currentset_confighealthcheckshutdown
Python sidecar event IPC (stdout JSON lines):
readyrecording_startedrecording_stoppedpartial_transcriptfinal_transcriptjob_cancellederrormetrics
make testIf popup shows Model 'v3_e2e_rnnt' not found, your sidecar was built with old GigaAM.
Rebuild sidecar and rerun debug/release build:
powershell -ExecutionPolicy Bypass -File scripts/build-sidecar.ps1 -Platform windowsIf you want forced GPU sidecar build:
powershell -ExecutionPolicy Bypass -File scripts/build-sidecar.ps1 -Platform windows -Variant gpuThis project is licensed under the MIT License. See LICENSE.
Third-party notice:
- GigaAM is MIT-licensed: https://github.com/salute-developers/GigaAM/blob/main/LICENSE