siddhantparadox/dictate

10

stars

34

commits

TypeScript

primary language

Apr 6, 2026

updated

README

Dictate

Minimal voice typing for desktop.

Hold Ctrl+Shift, speak, release, and Dictate transcribes locally into the active text field. The project is intentionally narrow: fast hold-to-talk dictation with clean model management, low-friction setup, and no extra workflow.

Release Status

Dictate is currently in beta for its initial open-source release.

  • Windows-first desktop app
  • Windows-only release for now
  • Linux build is planned shortly after the initial release
  • macOS support will take longer
  • Local CPU and cloud dictation are the most stable paths today
  • Local NVIDIA GPU support is available, but still evolving
  • TensorRT is planned, not shipped in the current build

What It Is

Dictate is a Windows-first desktop app built with:

  • Electrobun for the desktop shell
  • React for the app UI
  • A Python sidecar for speech recognition
  • Local ASR models from Moonshine and NVIDIA
  • Optional cloud transcription through Groq, Deepgram, AssemblyAI, and OpenRouter with bring-your-own API key flows

The app is designed around one primary interaction:

  1. Focus any text box in any app.
  2. Hold Ctrl+Shift.
  3. Speak while the pill is visible.
  4. Release the hotkey.
  5. Dictate transcribes and auto-pastes the result.

Current Scope

  • Local, on-device transcription
  • Optional Groq, Deepgram, AssemblyAI, and OpenRouter cloud transcription with saved local API key configuration
  • Global hotkey: Ctrl+Shift
  • Live pill overlay while recording
  • Model download, warm-up, selection, and deletion
  • Local and cloud model selection from the Models page
  • CPU and NVIDIA CUDA runtime modes
  • Recent transcription history
  • Light and dark glassmorphism UI

Screenshots

Overview

Dictate Overview

Models: Local

Dictate Local Models

Models: Cloud

Dictate Cloud Models

History

Dictate History

Settings

Dictate Settings

Usage

App Setup

Install Dictate

  1. Download the latest Windows canary installer .exe from GitHub Releases.
  2. Run the installer.
  3. Launch Dictate from the Start Menu or desktop shortcut.

First Launch

  1. Open Dictate.
  2. Go to Models.
  3. Choose Local or Cloud.
  4. For Local, install the model you want to use.
  5. For Cloud, connect Groq, Deepgram, AssemblyAI, or OpenRouter with your API key and select a cloud model.
  6. Keep Acceleration mode on Auto unless you specifically want to force CPU or GPU.
  7. Set the model you want as default.

Local Setup Notes

  • Moonshine models are the easiest local starting point and work without the NVIDIA path.
  • NVIDIA local models require the Dictate GPU runtime.
  • The Dictate GPU runtime uses your existing NVIDIA driver and GPU, but installs Dictate's own local Python packages under %USERPROFILE%\.dictateapp.
  • On a fresh NVIDIA setup, preparing the Dictate GPU runtime can take roughly 4 to 5 minutes.
  • Settings shows a live progress bar while the Dictate GPU runtime is being prepared.
  • Local models warm up after selection, especially larger NVIDIA models.
  • Loading a local model into memory can take about 1 minute, depending on the model and machine.
  • The first local transcription can be slower while the selected model loads into memory and finishes warming up.
  • Once warm, later local transcriptions are much faster.

Cloud Provider Setup

Groq:

Deepgram:

AssemblyAI:

OpenRouter:

  • Create a key in OpenRouter Keys
  • OpenRouter docs home: OpenRouter Docs
  • Dictate currently exposes one fixed OpenRouter speech model: google/gemini-3.1-flash-lite-preview:nitro

Dictation Flow

  1. Put the cursor in a text field.
  2. Hold Ctrl+Shift.
  3. Speak.
  4. Release Ctrl+Shift.
  5. Dictate transcribes and sends the text into the active field.

What the UI Shows

  • Overview: current model, runtime state, latest transcript, warnings, and readiness
  • History: recent transcription jobs and outcomes
  • Models: local vs cloud model source, install state, Groq, Deepgram, AssemblyAI, and OpenRouter connection state, and select/delete actions
  • Settings: acceleration mode, appearance, paste behavior, and debug flags

Models

Local Models

ModelRuntimeSizeNotes
Moonshine Tiny StreamingCPU176 MBFast fallback model for lower-end hardware
Moonshine Medium StreamingCPU1.06 GBBalanced default for local CPU dictation
NVIDIA Parakeet-TDT-0.6B-v3NVIDIA GPU2.51 GBMultilingual model with strong GPU accuracy
NVIDIA Canary-Qwen-2.5BNVIDIA GPU5.12 GBLarger English model for stronger NVIDIA GPUs

Cloud Models

Cloud transcription is optional and uses your own provider API key.

ProviderModelNotes
Groqwhisper-large-v3-turboRecommended default for cloud dictation: faster and lower cost
Groqwhisper-large-v3Higher accuracy option with translation support
Deepgramnova-3Recommended Deepgram default for prerecorded BYOK dictation
Deepgramnova-2Deepgram compatibility fallback
AssemblyAIuniversal-3-proRecommended AssemblyAI default for BYOK dictation with automatic universal-2 fallback
AssemblyAIuniversal-2Standalone AssemblyAI fallback for broad language coverage
OpenRoutergoogle/gemini-3.1-flash-lite-preview:nitroFixed Gemini audio-input path through OpenRouter's Nitro routing

Runtime Modes

  • Auto: prefers CUDA when a working CUDA sidecar runtime is available, otherwise falls back to CPU
  • CPU: forces the CPU sidecar runtime
  • CUDA: requests the CUDA sidecar runtime and warns if it is unavailable

Important:

  • GPU models require compatible NVIDIA hardware.
  • TensorRT is planned, but not shipped in the current build. NVIDIA models currently run on the PyTorch CUDA path.
  • Local models require a warm-up step after launch or model changes.
  • On a fresh NVIDIA setup, the Dictate GPU runtime can take roughly 4 to 5 minutes to prepare.
  • Local model loading can take about 1 minute before the first transcription is ready.
  • The first local transcription can be slower because the selected model has to load and warm up.
  • The app shows warm-up state in the Models page for installed local models.

Development Setup

Prerequisites

  • Bun
  • Python 3 available on PATH
  • PowerShell 7 on Windows
  • Optional: NVIDIA GPU for CUDA acceleration

Install

From the repository root:

bun install
pwsh -File dictate-app/sidecar/bootstrap.ps1

Optional CUDA runtime setup:

pwsh -File dictate-app/sidecar/bootstrap.ps1 -Runtime cuda

Optional setup for both CPU and CUDA runtimes:

pwsh -File dictate-app/sidecar/bootstrap.ps1 -Runtime both

Run

Recommended development mode:

bun run dev:hmr

This starts:

  • the Vite dev server for the React UI
  • the Electrobun desktop process

Quality Gates

From the repository root:

bun run typecheck
bun run lint
bun run build:canary

Windows release installer build:

bun run build:canary
bun run build:canary:installer

The maintainer-facing Windows installer is built with Inno Setup as a per-user install under %LocalAppData%\Programs\Dictate. The user-facing installer should be the generated canary installer .exe; Electrobun's canary payload remains the underlying app/update bundle.

Data and Model Storage

By default, Dictate stores model assets under:

%USERPROFILE%\.dictateapp

Key locations:

  • Hugging Face cache: %USERPROFILE%\.dictateapp\models\huggingface\hub
  • Moonshine cache: %USERPROFILE%\.dictateapp\models\moonshine
  • Torch cache: %USERPROFILE%\.dictateapp\torch
  • Cloud provider config: %USERPROFILE%\.dictateapp\providers.json

You can override the root with:

DICTATE_HOME

App settings and transcription history are stored in the app user data directory in a local SQLite database. Groq, Deepgram, AssemblyAI, and OpenRouter BYO-key configuration is stored separately under .dictateapp\providers.json.

Repository Layout

dictate-app/
  src/
    bun/         Main process, hotkey handling, runtime orchestration
    mainview/    React UI
    shared/      Shared model catalog and RPC types
  sidecar/       Python transcription worker and runtime bootstrap

Known Limitations

  • Windows is the primary supported platform today.
  • The current open-source beta release is Windows-only.
  • Linux support is planned shortly after the initial Windows release.
  • macOS support will take more time because platform-specific packaging, permissions, and runtime validation are still pending.
  • This is a beta release, not a stable v1.
  • Auto-paste is currently Windows-only and uses clipboard + Ctrl+V.
  • Launch on startup is implemented on Windows via the current user's Run registry entry and opens tray-first on login.
  • GPU acceleration depends on the installed sidecar runtime, CUDA availability, and compatible hardware.
  • Local NVIDIA GPU support is still evolving and needs more real-world validation across drivers, CUDA environments, and hardware tiers.
  • TensorRT is not available in the current build. A rollout plan exists in docs/plans/2026-03-30-tensorrt-rollout-plan.md.
  • Cloud provider flows depend on your own API key, provider account limits, and provider-side model availability.
  • Windows packaging is split between the Electrobun canary app payload and the Inno Setup installer layer. Keep both paths in sync when changing release behavior.

Contributing

The project is still being hardened for public collaboration. If you open issues or pull requests, include:

  • Windows version
  • CPU and GPU details
  • selected model
  • acceleration mode
  • reproduction steps

License

See LICENSE.

Contributors

siddhantparadox

34 commits

siddhantparadox/dictate

10

stars

34

commits

TypeScript

primary language

Apr 6, 2026

updated

README

Dictate

Minimal voice typing for desktop.

Hold Ctrl+Shift, speak, release, and Dictate transcribes locally into the active text field. The project is intentionally narrow: fast hold-to-talk dictation with clean model management, low-friction setup, and no extra workflow.

Release Status

Dictate is currently in beta for its initial open-source release.

  • Windows-first desktop app
  • Windows-only release for now
  • Linux build is planned shortly after the initial release
  • macOS support will take longer
  • Local CPU and cloud dictation are the most stable paths today
  • Local NVIDIA GPU support is available, but still evolving
  • TensorRT is planned, not shipped in the current build

What It Is

Dictate is a Windows-first desktop app built with:

  • Electrobun for the desktop shell
  • React for the app UI
  • A Python sidecar for speech recognition
  • Local ASR models from Moonshine and NVIDIA
  • Optional cloud transcription through Groq, Deepgram, AssemblyAI, and OpenRouter with bring-your-own API key flows

The app is designed around one primary interaction:

  1. Focus any text box in any app.
  2. Hold Ctrl+Shift.
  3. Speak while the pill is visible.
  4. Release the hotkey.
  5. Dictate transcribes and auto-pastes the result.

Current Scope

  • Local, on-device transcription
  • Optional Groq, Deepgram, AssemblyAI, and OpenRouter cloud transcription with saved local API key configuration
  • Global hotkey: Ctrl+Shift
  • Live pill overlay while recording
  • Model download, warm-up, selection, and deletion
  • Local and cloud model selection from the Models page
  • CPU and NVIDIA CUDA runtime modes
  • Recent transcription history
  • Light and dark glassmorphism UI

Screenshots

Overview

Dictate Overview

Models: Local

Dictate Local Models

Models: Cloud

Dictate Cloud Models

History

Dictate History

Settings

Dictate Settings

Usage

App Setup

Install Dictate

  1. Download the latest Windows canary installer .exe from GitHub Releases.
  2. Run the installer.
  3. Launch Dictate from the Start Menu or desktop shortcut.

First Launch

  1. Open Dictate.
  2. Go to Models.
  3. Choose Local or Cloud.
  4. For Local, install the model you want to use.
  5. For Cloud, connect Groq, Deepgram, AssemblyAI, or OpenRouter with your API key and select a cloud model.
  6. Keep Acceleration mode on Auto unless you specifically want to force CPU or GPU.
  7. Set the model you want as default.

Local Setup Notes

  • Moonshine models are the easiest local starting point and work without the NVIDIA path.
  • NVIDIA local models require the Dictate GPU runtime.
  • The Dictate GPU runtime uses your existing NVIDIA driver and GPU, but installs Dictate's own local Python packages under %USERPROFILE%\.dictateapp.
  • On a fresh NVIDIA setup, preparing the Dictate GPU runtime can take roughly 4 to 5 minutes.
  • Settings shows a live progress bar while the Dictate GPU runtime is being prepared.
  • Local models warm up after selection, especially larger NVIDIA models.
  • Loading a local model into memory can take about 1 minute, depending on the model and machine.
  • The first local transcription can be slower while the selected model loads into memory and finishes warming up.
  • Once warm, later local transcriptions are much faster.

Cloud Provider Setup

Groq:

Deepgram:

AssemblyAI:

OpenRouter:

  • Create a key in OpenRouter Keys
  • OpenRouter docs home: OpenRouter Docs
  • Dictate currently exposes one fixed OpenRouter speech model: google/gemini-3.1-flash-lite-preview:nitro

Dictation Flow

  1. Put the cursor in a text field.
  2. Hold Ctrl+Shift.
  3. Speak.
  4. Release Ctrl+Shift.
  5. Dictate transcribes and sends the text into the active field.

What the UI Shows

  • Overview: current model, runtime state, latest transcript, warnings, and readiness
  • History: recent transcription jobs and outcomes
  • Models: local vs cloud model source, install state, Groq, Deepgram, AssemblyAI, and OpenRouter connection state, and select/delete actions
  • Settings: acceleration mode, appearance, paste behavior, and debug flags

Models

Local Models

ModelRuntimeSizeNotes
Moonshine Tiny StreamingCPU176 MBFast fallback model for lower-end hardware
Moonshine Medium StreamingCPU1.06 GBBalanced default for local CPU dictation
NVIDIA Parakeet-TDT-0.6B-v3NVIDIA GPU2.51 GBMultilingual model with strong GPU accuracy
NVIDIA Canary-Qwen-2.5BNVIDIA GPU5.12 GBLarger English model for stronger NVIDIA GPUs

Cloud Models

Cloud transcription is optional and uses your own provider API key.

ProviderModelNotes
Groqwhisper-large-v3-turboRecommended default for cloud dictation: faster and lower cost
Groqwhisper-large-v3Higher accuracy option with translation support
Deepgramnova-3Recommended Deepgram default for prerecorded BYOK dictation
Deepgramnova-2Deepgram compatibility fallback
AssemblyAIuniversal-3-proRecommended AssemblyAI default for BYOK dictation with automatic universal-2 fallback
AssemblyAIuniversal-2Standalone AssemblyAI fallback for broad language coverage
OpenRoutergoogle/gemini-3.1-flash-lite-preview:nitroFixed Gemini audio-input path through OpenRouter's Nitro routing

Runtime Modes

  • Auto: prefers CUDA when a working CUDA sidecar runtime is available, otherwise falls back to CPU
  • CPU: forces the CPU sidecar runtime
  • CUDA: requests the CUDA sidecar runtime and warns if it is unavailable

Important:

  • GPU models require compatible NVIDIA hardware.
  • TensorRT is planned, but not shipped in the current build. NVIDIA models currently run on the PyTorch CUDA path.
  • Local models require a warm-up step after launch or model changes.
  • On a fresh NVIDIA setup, the Dictate GPU runtime can take roughly 4 to 5 minutes to prepare.
  • Local model loading can take about 1 minute before the first transcription is ready.
  • The first local transcription can be slower because the selected model has to load and warm up.
  • The app shows warm-up state in the Models page for installed local models.

Development Setup

Prerequisites

  • Bun
  • Python 3 available on PATH
  • PowerShell 7 on Windows
  • Optional: NVIDIA GPU for CUDA acceleration

Install

From the repository root:

bun install
pwsh -File dictate-app/sidecar/bootstrap.ps1

Optional CUDA runtime setup:

pwsh -File dictate-app/sidecar/bootstrap.ps1 -Runtime cuda

Optional setup for both CPU and CUDA runtimes:

pwsh -File dictate-app/sidecar/bootstrap.ps1 -Runtime both

Run

Recommended development mode:

bun run dev:hmr

This starts:

  • the Vite dev server for the React UI
  • the Electrobun desktop process

Quality Gates

From the repository root:

bun run typecheck
bun run lint
bun run build:canary

Windows release installer build:

bun run build:canary
bun run build:canary:installer

The maintainer-facing Windows installer is built with Inno Setup as a per-user install under %LocalAppData%\Programs\Dictate. The user-facing installer should be the generated canary installer .exe; Electrobun's canary payload remains the underlying app/update bundle.

Data and Model Storage

By default, Dictate stores model assets under:

%USERPROFILE%\.dictateapp

Key locations:

  • Hugging Face cache: %USERPROFILE%\.dictateapp\models\huggingface\hub
  • Moonshine cache: %USERPROFILE%\.dictateapp\models\moonshine
  • Torch cache: %USERPROFILE%\.dictateapp\torch
  • Cloud provider config: %USERPROFILE%\.dictateapp\providers.json

You can override the root with:

DICTATE_HOME

App settings and transcription history are stored in the app user data directory in a local SQLite database. Groq, Deepgram, AssemblyAI, and OpenRouter BYO-key configuration is stored separately under .dictateapp\providers.json.

Repository Layout

dictate-app/
  src/
    bun/         Main process, hotkey handling, runtime orchestration
    mainview/    React UI
    shared/      Shared model catalog and RPC types
  sidecar/       Python transcription worker and runtime bootstrap

Known Limitations

  • Windows is the primary supported platform today.
  • The current open-source beta release is Windows-only.
  • Linux support is planned shortly after the initial Windows release.
  • macOS support will take more time because platform-specific packaging, permissions, and runtime validation are still pending.
  • This is a beta release, not a stable v1.
  • Auto-paste is currently Windows-only and uses clipboard + Ctrl+V.
  • Launch on startup is implemented on Windows via the current user's Run registry entry and opens tray-first on login.
  • GPU acceleration depends on the installed sidecar runtime, CUDA availability, and compatible hardware.
  • Local NVIDIA GPU support is still evolving and needs more real-world validation across drivers, CUDA environments, and hardware tiers.
  • TensorRT is not available in the current build. A rollout plan exists in docs/plans/2026-03-30-tensorrt-rollout-plan.md.
  • Cloud provider flows depend on your own API key, provider account limits, and provider-side model availability.
  • Windows packaging is split between the Electrobun canary app payload and the Inno Setup installer layer. Keep both paths in sync when changing release behavior.

Contributing

The project is still being hardened for public collaboration. If you open issues or pull requests, include:

  • Windows version
  • CPU and GPU details
  • selected model
  • acceleration mode
  • reproduction steps

License

See LICENSE.

Contributors

siddhantparadox

34 commits

Languages

TypeScript

78.3%

CSS

10.2%

Python

6.7%

PowerShell

3.4%