Back to projects
Desktop / Local AIWorking Prototype

Vozel

Windows dictation app that transcribes on-device and inserts text into the application you are using.

  • Rust
  • Tauri 2
  • ONNX Runtime
  • React
  • TypeScript
  • SQLite
  • Tailwind CSS
  • shadcn/ui

Problem

Many dictation tools send audio to a cloud service or only work inside their own editor, which is a poor fit for private text and for writing directly in other applications.

Solution

Hold Ctrl+Win to dictate: audio is captured and transcribed locally with a Parakeet-TDT speech model running on ONNX Runtime, optionally cleaned up by a small on-device language model, then inserted into the active application. Cloud transcription (Groq, OpenAI or Deepgram) is an explicit opt-in.

My contribution

Personal product developed under ExponentValue: the Rust backend (audio capture, speech recognition, text insertion, storage), the React interface and the design decisions documented in the repository.

Key features

  • Global push-to-talk (Ctrl+Win) implemented with a Windows low-level keyboard hook
  • Local speech recognition with Parakeet-TDT (INT8) on ONNX Runtime, chosen after a benchmark against whisper.cpp on French audio
  • Optional on-device text cleanup with a quantised (int4) language model in the same runtime
  • Cloud transcription behind a common provider interface (Groq, OpenAI, Deepgram), disabled by default, with API keys masked in logs
  • Text insertion into the focused application with a clipboard fallback
  • Local dictation history and personal dictionary stored in SQLite

Architecture

Microphone capture and voice-activity detection (Rust)
Local speech recognition (Parakeet-TDT, ONNX Runtime)
Optional cloud transcription
Optional on-device cleanup model
Text insertion into the active application
SQLite: dictionary, history, settings

Engineering decisions

  • Privacy by default: cloud transcription and model-based cleanup are opt-in settings.
  • All database access lives on the Rust side (sqlx); the React interface calls Tauri commands.
  • For the cleanup model, llama.cpp was dropped for ONNX Runtime because of build-dependency problems, and int8 quantisation was abandoned for int4 after quality testing.

Validation and tests

  • 58 Rust tests cover storage, cloud-provider response parsing, keyboard-combination logic and text cleanup; 8 of them need the model files or a real target application and are skipped by default.
  • Real microphone dictation into other applications was validated manually.

Status and limitations

  • Windows only for now: the macOS and Linux text-insertion adapters are placeholders.
  • The speech model (about 670 MB) is not bundled in the repository and must be installed separately.
  • The on-device cleanup model (1.5 billion parameters, int4) gives uneven rewrite quality, which is why cleanup is optional.
  • The interface has no automated tests yet. The source is public for review under an all-rights-reserved licence.

More projects