v0.1.4-preview · Windows Local Voice Input
Application version: 0.1.4. This release focuses on usable, repeatable recording and a reproducible distribution path. It keeps the -preview label so hardware-specific feedback can continue. See the documentation index.
Latest Release | Chinese release notes | English release notes | Fix and validation report
⚠️ Preview Release — This is an early preview version for testing and feedback. Expect bugs and breaking changes before the stable release.
A privacy-first, fully-local voice input tool for Windows. Speak into your microphone and your words appear wherever your cursor is — no typing needed. Speech recognition runs entirely on your GPU via Qwen3-ASR, so no audio ever leaves your computer.
This is a Windows desktop preview built with React, Tauri, Rust, and Python. The desktop layer handles recording, hotkeys, and safe text entry; the Python service listens only on a random local loopback port and runs the model on a local NVIDIA GPU.
- ✅ Source version is synchronized at 0.1.4 across React, Rust/Tauri, and the Python sidecar
- ✅ Local NVIDIA GPU, Qwen3-ASR loading, microphone recording, and automatic text entry have been verified
- ✅ WASAPI capture is owned by a dedicated worker and audio-level events no longer block the realtime callback
- ✅ The release flow validates fresh extraction, sidecar health, and a SHA-256 manifest
⚠️ Preview release: elevated windows, games, and custom controls may still reject simulated input
VoiceInput is like having a friend who types everything you say. Instead of using your keyboard, you just:
- Hold a key (Alt+V) on your keyboard
- Talk into your microphone
- Let go of the key
- Your words magically appear where your cursor is blinking!
It works in most standard text fields — Word, chat boxes, and browser search bars. Some elevated windows, games, and custom-drawn controls may block simulated input and need separate validation.
- 🎙️ Push-to-talk — Hold
Alt+V, speak, release to transcribe and paste automatically - 🖱️ Click to talk — Click the microphone button, click again to stop
- 🌐 Language switching —
Alt+Lcycles Auto / Chinese / English - 🔒 100% offline — All recognition runs on the local GPU, zero cloud calls
- 📝 Custom terms — Define ASR misrecognition → correct-text mappings
- 🩺 Auto-recovery — Backend crash auto-restart + file logging
- 🖥️ System tray — Quick access to settings, logs, and quit
- ⚡ VAD auto-stop — Detects silence and stops recording automatically
- 📋 Clipboard-safe input — Returns to the prior window and types without altering clipboard data
- 🧪 Audio diagnostics — Includes a developer probe to distinguish microphone/input and Bluetooth speaker/output problems
| Requirement | Detail |
|---|---|
| OS | Windows 10 1903+ / Windows 11 |
| GPU | NVIDIA graphics card with CUDA support, ≥ 4 GB VRAM |
| Disk | ~2.7 GB runtime + ~1.9 GB model (downloaded once); keep 6 GB free |
| RAM | 8 GB+ |
| Input | A microphone (built-in or external) |
⚠️ Important: An NVIDIA graphics card is required. Intel/AMD integrated graphics are not supported. If you're not sure what GPU you have, look for "NVIDIA" in your Task Manager → Performance tab.
- Go to the Releases page
- This release currently has no downloadable runtime asset because the complete 0.1.4 onedir ZIP is about 2.73 GB and exceeds the GitHub Release per-asset limit. GitHub's source archives are not runnable packages; build from source using the instructions below or use a complete ZIP hosted in an external large-file store.
- If the release includes
VoiceInput-v0.1.4-preview-win64.zip, download it. If the asset is temporarily unavailable, build from source using the instructions below. GitHub's generated source archive is not runnable by itself.
- Find the downloaded
.zipfile (usually in your Downloads folder) - Right-click the zip file → Extract All...
- Choose a location, for example:
C:\VoiceInput - Click Extract
💡 Tip: Don't put it in a folder that needs admin permission (like
C:\Program Files\), or it might not work properly.
- Open the extracted folder
- Double-click
voiceinput.exe - A small floating window will appear on your screen
🛡️ If Windows shows a "Windows protected your PC" warning, click More info → Run anyway. This is normal for apps that aren't from the Microsoft Store.
The first time you run VoiceInput, it needs to download the AI model (about 1.9 GB). This happens only once.
- The app will show a download screen
- Choose ModelScope (recommended, faster for China) or HuggingFace (international)
- Click 开始下载 (Start Download)
- Wait for the download to finish (this depends on your internet speed, usually 5-20 minutes)
- Click 加载模型 (Load Model) — this takes about 10-20 seconds
- Open any program where you can type (e.g., a Word document, a chat box, a search bar)
- Click where you want the text to appear
- Press and hold
Alt+Von your keyboard - Speak into your microphone
- Release
Alt+V - Your words will appear automatically!
The small window on your screen has these parts:
- Microphone button (big circle): Click to start/stop recording
- Language badge (top-left, shows "Auto"/"中"/"EN"): Click to switch language
- Gear icon (top-right): Click to open Settings
- X icon (top-right): Click to hide the window (app keeps running in system tray)
| Shortcut | What it does |
|---|---|
Alt+V (hold) | Push-to-talk: hold while speaking, release to transcribe |
Alt+L | Switch language: Auto → Chinese → English → Auto |
A green microphone icon appears in your system tray (bottom-right of screen, near the clock). Right-click it to:
- Show/hide the panel
- Open Settings
- Switch language
- Load/unload the model (free GPU memory)
- View log files
- Quit the app
Open Settings by clicking the gear icon on the floating window, or right-click the tray icon → 设置.
Choose which microphone to use. Click Test to record a short sample and see if it works.
Change the push-to-talk hotkey (default: Alt+V) and language-switch hotkey (default: Alt+L).
Adjust sample rate, audio normalization, silence trimming, and silence threshold.
- Model strategy: How the AI model uses GPU memory
- Balanced (default): Unloads after 30 minutes idle
- Performance: Always loaded (fastest response)
- Memory saver: Unloads after each use (lowest VRAM)
- Accurate: Maximum precision
- Punctuation mode: How punctuation is handled
- Simple (default): Auto-adds periods at the end
- Raw: No changes
- Input method: Removes end punctuation (good for search boxes)
- Auto space (Chinese-English): Adds spaces between Chinese and English
- VAD silence detection: Automatically stops recording after 2 seconds of silence
- Auto-start on boot: Start VoiceInput when Windows starts
- Input delay, max recording time, request timeout (automatic input does not touch the clipboard)
Add custom word corrections. For example, if the AI always mishears your name "Xiaoming" as "Xiao Ming", add a rule to fix it.
- Windows 10 1903+ / Windows 11 and an NVIDIA CUDA GPU are required; CPU, AMD, and Intel GPU inference are not supported.
- The model download is about 1.9 GB; the release ZIP is about 2.7 GB, so plan for both separately.
- Automatic entry depends on the target application accepting Windows input events; elevated windows, custom controls, and some games may reject it.
- Compiled binaries and model caches are not committed to the repository. Download the complete release package and keep
asr_backend/_internalbeside the backend executable. audio_hardware_probeis a developer diagnostic binary, not the normal application entry point; it reports the default devices and measured capture energy.
- Most likely cause: No NVIDIA GPU. VoiceInput requires an NVIDIA graphics card. Check Task Manager → Performance tab for "NVIDIA".
- Solution: Install the latest NVIDIA driver. If you have a laptop with both Intel and NVIDIA, set VoiceInput to use NVIDIA in NVIDIA Control Panel.
- VoiceInput is already open. Look for the green microphone icon in your system tray (bottom-right of screen).
- Check: Is the model loaded? Open Settings → Advanced → Model strategy. If it says "not loaded", click the tray icon → 预加载模型.
- Check: Is your microphone working? Open Settings → Microphone → Test.
- VoiceInput pastes text at your cursor position. Click where you want the text before speaking.
- Some apps (like certain games) may block paste. Try clicking in a text box first.
- First recognition after loading takes longer (the model is warming up). Subsequent ones are faster.
- Try changing Model Strategy to Performance (always loaded) in Settings.
- Make sure no other heavy GPU programs are running.
- Choose ModelScope if you're in China (faster), or HuggingFace for international.
- The download supports resume — if it stops, just click download again to continue.
- Node.js 20.19+ and npm
- Rust (stable toolchain)
- Python 3.10+ with backend dependencies (
torch,fastapi,qwen_asr, ...) - Tauri CLI 2.x (
npm install -D @tauri-apps/cli) - NVIDIA CUDA Toolkit 11.8+
# 1. Install frontend dependencies
npm install
# 2. Install backend dependencies and a fixed packager in a dedicated environment
python -m pip install -r backend\requirements.txt
python -m pip install pyinstaller==6.22.1
# 3. Build the Python ASR backend (PyInstaller onedir → src-tauri/binaries/asr_backend/)
.\build_backend.bat
# 4. Build the Tauri executable
npm run tauri -- build
# 5. Build and fresh-extraction validate the release zip
powershell -ExecutionPolicy Bypass -File .\build_release_zip.ps1The release zip is output to .\release\VoiceInput-v0.1.4-preview-win64.zip.
Packaging note — The backend is an onedir runtime (~2.7 GB including torch and transformers) to avoid unpacking a giant executable on every launch. The project ships a ZIP; keep the complete
asr_backend/_internaldirectory besideasr_backend.exe.
voiceinput.exe (Tauri/Rust) ──spawn──▶ asr_backend.exe (Python/FastAPI)
│ │
├─ cpal (audio capture) ├─ Qwen3-ASR-0.6B (GPU inference)
├─ Windows SendInput (safe text entry) ├─ uvicorn (random 127.0.0.1 port)
├─ rdev (global hotkeys) └─ postprocess (term correction)
└─ React 18 (floating UI)
| Layer | Tech | Key Files |
|---|---|---|
| Frontend | React 18 + TypeScript + Tailwind | src/ |
| Native shell | Rust + Tauri 2 | src-tauri/src/ |
| ASR backend | Python + FastAPI + PyTorch | backend/ |
User config lives at %LOCALAPPDATA%\VoiceInput\config.json. Logs at %LOCALAPPDATA%\VoiceInput\logs\.
voice-input-v2/
├─ src/ # React frontend
├─ src-tauri/ # Rust + Tauri native shell
│ ├─ src/ # Rust source
│ ├─ binaries/ # PyInstaller sidecar output (gitignored)
│ └─ tauri.conf.json # Tauri bundle config
├─ backend/ # Python ASR backend
│ ├─ server.py # FastAPI server
│ ├─ model_manager.py # Model download/load
│ ├─ postprocess.py # Text post-processing
│ └─ asr_backend.spec # PyInstaller spec
├─ resources/ # Default config, icon
├─ build_backend.bat # Build sidecar EXE
├─ build_release_zip.ps1 # Build release zip
└─ docs/PRD.md # Product requirements
MIT — see LICENSE.
- Qwen3-ASR — the ASR model
- Tauri — the app framework
- PyInstaller — Python bundling
This release is focused on real usability, repeated use, and a reproducible release process. The desktop shell, recorder, Python sidecar, build scripts, and bilingual documentation are synchronized at 0.1.4.
Code and reliability:
- 🎙️ Dedicated WASAPI recorder thread — Each session creates, owns, and releases the
cpalstream on one dedicated thread, reducing lifecycle conflicts between Tauri commands and Windows audio sessions. - 📈 Decoupled audio-level delivery — The realtime callback only converts samples, maintains the bounded buffer, and stores an atomic level snapshot. A lightweight 50 ms sampler sends
audio-levelevents so the waveform and microphone test remain responsive. - ⏱️ VAD timing fix — Silence timing starts after the audio stream is actually running; WASAPI initialization time is not counted as user silence. Minimum-duration and continuous-silence guards remain enabled.
- 🩺 Better observability — Stop logs include total RMS/peak; VAD logs include current/maximum RMS. A separate hardware probe can play Bluetooth-speaker audio while measuring microphone capture.
- 🛡️ Startup cleanup — Recorder startup timeouts and failures wait for the worker to exit instead of leaving an orphan audio thread.
Release and documentation:
package.json, Cargo, Tauri, FastAPI, and sidecar startup logging are synchronized to0.1.4.- The onedir release flow validates complete extraction, the relative
asr_backend/_internallayout, the manifest, and backend health. - Added Chinese and English 0.1.4 release notes, upgrade guides, and validation records; 0.1.3 and 0.1.2 notes remain historical.
Upgrade notes:
- Replace
voiceinput.exeand the completeasr_backenddirectory together; do not replace only one component. - Existing model caches remain compatible and do not need to be downloaded again. Re-select or re-download only if the model directory is damaged.
- After upgrading, use Settings → Microphone → Test once, then complete a short voice input in Notepad or a browser text field.
This release is a full stability, privacy, and distribution upgrade covering local GPU inference, recording, model lifecycle, safe text entry, recovery, and onedir packaging, with local validation completed.
New Features:
- 📋 Single instance lock — Prevents running two copies at once
- 🔒 Local loopback transport — Uses a random port and a fresh token per run
Improvements:
- 💬 Friendly error messages — Errors now show clear Chinese explanations (e.g., "microphone not found" instead of raw error codes)
- 🖥️ GPU error dialog — When NVIDIA GPU is not found, a clear popup explains the problem instead of silently crashing
- ⚙️ Settings panel — Increased height to fit all new settings without scrolling issues
- 📝 Default config — Added missing P2 feature fields (auto_start, punctuation, VAD, spacing)
Bug Fixes:
- Fixed tray "Settings" menu not working (was looking for a nonexistent window)
- Fixed
process_manager.rscomment missing "memory" strategy - Fixed
build_release_zip.ps1hardcoded version string
New Features:
- 🧠 Memory strategy — New model strategy that releases VRAM after each recognition
- 🔇 VAD silence detection — Auto-stops recording after 2 seconds of silence
- 🚀 Auto-start on boot — Optionally start VoiceInput when Windows starts
- 〽️ Punctuation modes — Choose how punctuation is handled (raw/simple/input_method)
- 🀄 Chinese-English spacing — Auto-adds spaces between Chinese and English text
/model/strategyAPI endpoints for runtime strategy switching
Initial Release:
- Core push-to-talk voice input (Alt+V)
- 100% local Qwen3-ASR recognition
- Auto-paste at cursor position
- Multi-language support (Auto/Chinese/English)
- Model download from ModelScope/HuggingFace
- System tray, settings panel, custom terms
- Backend crash auto-restart