AntoineChatry/Dictata

Rust project. Local Free AI transcription based on whisper, parakeet, MoonShine, SenseVoice, Zipformer.

7

stars

16

commits

Rust

primary language

Aug 24, 2026

updated

moonshine
parakeet
rust
sensevoice
whisper
whisper-rs
zipformer

README

Dictata

100% local system-wide voice dictation for Windows, in native Rust. Press a global hotkey, speak, press again: the text is transcribed locally and pasted into the active application. No data ever leaves the machine. Transcription runs on the multi-backend Dictata Enginewhisper.cpp by default, with optional ONNX backends (Parakeet, SenseVoice, Moonshine, Zipformer).

Current release: v0.1.0 — see CHANGELOG.md.

Features

  • Hotkey dictation (toggle or push-to-talk), automatic paste into the active application, floating dock with waveform (configurable size, opacity and position).
  • Continuous mode (streaming): text is inserted as you speak, at every detected pause.
  • Silence skipping (VAD): optional whisper.cpp voice-activity detection on standard (non-streaming) dictation — less compute and fewer hallucinations on silence. Downloads a small (~2 MB) model on first use; toggle in Configuration.
  • Vulkan GPU transcription (AMD/Intel/NVIDIA) or CPU — whisper-rs with the vulkan feature.
  • Multi-backend engine: whisper.cpp by default; optional ONNX backends (NVIDIA Parakeet, SenseVoice, Moonshine, Zipformer), each enabled at build time via a Cargo feature. The backend is picked automatically from the shape of the selected model (a ggml .bin file → whisper, an ONNX bundle directory → its matching backend).
  • Audio sources: microphone, system audio (WASAPI loopback) or a mix of both (meeting mode).
  • Output modes: raw, or post-processing through a local OpenAI-compatible LLM (cleanup, email, message, list…), with customizable prompts.
  • Transcribe a file (audio/video, History page) — any format handled by ffmpeg.
  • Custom vocabulary and replacements injected as the initial prompt.
  • Built-in ggml model library: download, delete, and hardware-aware recommendations (detected GPU/VRAM when running on Vulkan, CPU/RAM otherwise).
  • Recommended ONNX models: one-click verified bundles (Parakeet, SenseVoice, Zipformer, Moonshine) in the Models page, next to the ggml catalog.
  • HuggingFace search: install any ggml .bin model or ONNX bundle from a direct URL, a repo (owner/name) or a keyword search.
  • fr / en / es interface, dark theme, system tray icon, transcription history.

Requirements

  • Windows 10/11. Linux is not supported in this release — see LINUX.md for what works, what does not, and why.
  • ffmpeg in PATH (only for "Transcribe a file").
  • To build with GPU support: the Vulkan SDK and the Visual Studio Build Tools (CMake + Ninja included).

Building

cargo build --release

Build specifics:

  • MAX_PATH workaround (Windows): whisper.cpp's vulkan-shaders-gen sub-project can exceed the Windows MAX_PATH limit (260 characters) and break MSBuild (FTK1011/C1083). If that happens, create a local (untracked) .cargo/config.toml pointing the build to a short path at a drive root:

    [build]
    target-dir = "C:/wt"   # any short path
    

    The executable and its config.json then live in <target-dir>\<profile>\.

  • After a cargo clean, rebuild inside a Visual Studio environment with the Ninja generator:

VsDevCmd.bat -arch=amd64 && set CMAKE_GENERATOR=Ninja && set CMAKE_GENERATOR_INSTANCE= && set VULKAN_SDK=<SDK path> && cargo build

For a CPU-only build (no Vulkan SDK required):

cargo build --release --no-default-features --features whisper

whisper is the transcription backend: --no-default-features drops vulkan (which is what pulls it in), so it must be re-enabled explicitly or the binary has no backend and cannot transcribe.

Transcription backends (optional)

The ONNX backends are off by default — a stock build ships whisper.cpp only. Enable one (or several) at build time; each links onnxruntime statically through ort, so no extra DLL ships alongside the executable:

cargo build --release --features parakeet      # NVIDIA Parakeet (add parakeet-directml for GPU)
cargo build --release --features sensevoice    # SenseVoice CTC
cargo build --release --features moonshine     # Moonshine
cargo build --release --features zipformer     # Zipformer transducer

All backends at once (GPU whisper + every ONNX backend):

cargo build --release --features "vulkan,parakeet-directml,sensevoice,moonshine,zipformer,vad"

Combine with vulkan (the default) to keep GPU whisper alongside an ONNX backend, e.g. --features "vulkan,parakeet-directml".

Packaging a release

powershell -ExecutionPolicy Bypass -File scripts\release-windows.ps1 -Variant both

Runs the tests, builds, and writes dist\dictata-<version>-windows-x86_64[-cpu].zip with its SHA-256. The zip contains only dictata.exe, README.md, LICENSE and CHANGELOG.md: no config.json is shipped (the app writes its own defaults on first run, and a development config.json carries personal data). The binary is self-contained — no DLL to ship alongside it; the Vulkan build uses the loader provided by the graphics driver.

The executable carries its icon and version metadata, embedded by build.rs via winresource. The icon itself is drawn by a script rather than checked in as an opaque blob — edit the numbers and regenerate all sizes at once:

powershell -ExecutionPolicy Bypass -File scripts\make-icon.ps1

scripts/release-linux.sh mirrors the packaging script, but has never been run — see LINUX.md.

Usage

  1. Launch the executable: the application lives in the system tray.
  2. Open Settings (tray menu, or set the DICTATA_OPEN_SETTINGS=1 environment variable at launch): pick a model in the Models page (built-in download), set the hotkey, language and audio source.
  3. Place the cursor where you want to write, press the hotkey (default Ctrl+Alt+Space), speak, press again. Hold Esc for about half a second to cancel the current take — Escape is read globally, so a plain tap is left to the application you are typing into.

The configuration is read from config.json next to the executable, or from the directory pointed to by the DICTATA_HOME environment variable. The file must be UTF-8 without BOM.

GPU: gpu config field — "auto" (default, uses Vulkan when available), "cpu", "vulkan", "cuda".

Architecture

ModuleRole
main.rsOrchestration: states, hotkey, dock, transcription threads
audio.rscpal capture (mic / loopback / mix), 16 kHz resampling, ffmpeg decoding
transcriber.rsFacade over the ASR engine (backend chosen from the model's shape)
engine/Multi-backend ASR engine: AsrEngine trait, EngineKind::detect, backends (whisper, Parakeet, SenseVoice, Moonshine, Zipformer)
streaming.rsContinuous mode: pause-based chunking, progressive emission
settings.rsSettings window (8 pages, egui) — presentation
settings_logic.rsSettings business logic, testable without UI
dock.rsFloating dock (waveform, states)
modes.rs / llm.rsOutput modes and local LLM post-processing
models.rsggml + ONNX catalogs, download/delete (files and bundles), HuggingFace search, paths
i18n.rsfr/en/es translations (tr())
config.rs / history.rs / paste.rs / hotkey.rs / tray.rs / hardware.rs / platform.rsConfig, history, paste, global hotkey, tray, hardware detection, Windows integration

Tests

cargo test

83 unit tests (config, resampling, mixing, modes, settings logic, hardware rating, HuggingFace query parsing, audio-context sizing, history retention, cancel gesture, download safety, backend detection, ONNX bundle handling…). A CLI example is provided:

cargo run --example transcribe -- <file.wav>   # DICTATA_GPU=1 for GPU

License

Licensed under the MIT License with the Commons Clause — see LICENSE.

  • Free to use, copy, modify, distribute and self-host, for personal or any other purpose.
  • You may not Sell it: you cannot sell the software, or offer a paid product or service (hosting, SaaS, paywall, paid support…) whose value derives substantially from it.

© 2026 Antoine Chatry.

Contributors

AntoineChatry

16 commits

AntoineChatry/Dictata

Rust project. Local Free AI transcription based on whisper, parakeet, MoonShine, SenseVoice, Zipformer.

7

stars

16

commits

Rust

primary language

Aug 24, 2026

updated

moonshine
parakeet
rust
sensevoice
whisper
whisper-rs
zipformer

README

Dictata

100% local system-wide voice dictation for Windows, in native Rust. Press a global hotkey, speak, press again: the text is transcribed locally and pasted into the active application. No data ever leaves the machine. Transcription runs on the multi-backend Dictata Enginewhisper.cpp by default, with optional ONNX backends (Parakeet, SenseVoice, Moonshine, Zipformer).

Current release: v0.1.0 — see CHANGELOG.md.

Features

  • Hotkey dictation (toggle or push-to-talk), automatic paste into the active application, floating dock with waveform (configurable size, opacity and position).
  • Continuous mode (streaming): text is inserted as you speak, at every detected pause.
  • Silence skipping (VAD): optional whisper.cpp voice-activity detection on standard (non-streaming) dictation — less compute and fewer hallucinations on silence. Downloads a small (~2 MB) model on first use; toggle in Configuration.
  • Vulkan GPU transcription (AMD/Intel/NVIDIA) or CPU — whisper-rs with the vulkan feature.
  • Multi-backend engine: whisper.cpp by default; optional ONNX backends (NVIDIA Parakeet, SenseVoice, Moonshine, Zipformer), each enabled at build time via a Cargo feature. The backend is picked automatically from the shape of the selected model (a ggml .bin file → whisper, an ONNX bundle directory → its matching backend).
  • Audio sources: microphone, system audio (WASAPI loopback) or a mix of both (meeting mode).
  • Output modes: raw, or post-processing through a local OpenAI-compatible LLM (cleanup, email, message, list…), with customizable prompts.
  • Transcribe a file (audio/video, History page) — any format handled by ffmpeg.
  • Custom vocabulary and replacements injected as the initial prompt.
  • Built-in ggml model library: download, delete, and hardware-aware recommendations (detected GPU/VRAM when running on Vulkan, CPU/RAM otherwise).
  • Recommended ONNX models: one-click verified bundles (Parakeet, SenseVoice, Zipformer, Moonshine) in the Models page, next to the ggml catalog.
  • HuggingFace search: install any ggml .bin model or ONNX bundle from a direct URL, a repo (owner/name) or a keyword search.
  • fr / en / es interface, dark theme, system tray icon, transcription history.

Requirements

  • Windows 10/11. Linux is not supported in this release — see LINUX.md for what works, what does not, and why.
  • ffmpeg in PATH (only for "Transcribe a file").
  • To build with GPU support: the Vulkan SDK and the Visual Studio Build Tools (CMake + Ninja included).

Building

cargo build --release

Build specifics:

  • MAX_PATH workaround (Windows): whisper.cpp's vulkan-shaders-gen sub-project can exceed the Windows MAX_PATH limit (260 characters) and break MSBuild (FTK1011/C1083). If that happens, create a local (untracked) .cargo/config.toml pointing the build to a short path at a drive root:

    [build]
    target-dir = "C:/wt"   # any short path
    

    The executable and its config.json then live in <target-dir>\<profile>\.

  • After a cargo clean, rebuild inside a Visual Studio environment with the Ninja generator:

VsDevCmd.bat -arch=amd64 && set CMAKE_GENERATOR=Ninja && set CMAKE_GENERATOR_INSTANCE= && set VULKAN_SDK=<SDK path> && cargo build

For a CPU-only build (no Vulkan SDK required):

cargo build --release --no-default-features --features whisper

whisper is the transcription backend: --no-default-features drops vulkan (which is what pulls it in), so it must be re-enabled explicitly or the binary has no backend and cannot transcribe.

Transcription backends (optional)

The ONNX backends are off by default — a stock build ships whisper.cpp only. Enable one (or several) at build time; each links onnxruntime statically through ort, so no extra DLL ships alongside the executable:

cargo build --release --features parakeet      # NVIDIA Parakeet (add parakeet-directml for GPU)
cargo build --release --features sensevoice    # SenseVoice CTC
cargo build --release --features moonshine     # Moonshine
cargo build --release --features zipformer     # Zipformer transducer

All backends at once (GPU whisper + every ONNX backend):

cargo build --release --features "vulkan,parakeet-directml,sensevoice,moonshine,zipformer,vad"

Combine with vulkan (the default) to keep GPU whisper alongside an ONNX backend, e.g. --features "vulkan,parakeet-directml".

Packaging a release

powershell -ExecutionPolicy Bypass -File scripts\release-windows.ps1 -Variant both

Runs the tests, builds, and writes dist\dictata-<version>-windows-x86_64[-cpu].zip with its SHA-256. The zip contains only dictata.exe, README.md, LICENSE and CHANGELOG.md: no config.json is shipped (the app writes its own defaults on first run, and a development config.json carries personal data). The binary is self-contained — no DLL to ship alongside it; the Vulkan build uses the loader provided by the graphics driver.

The executable carries its icon and version metadata, embedded by build.rs via winresource. The icon itself is drawn by a script rather than checked in as an opaque blob — edit the numbers and regenerate all sizes at once:

powershell -ExecutionPolicy Bypass -File scripts\make-icon.ps1

scripts/release-linux.sh mirrors the packaging script, but has never been run — see LINUX.md.

Usage

  1. Launch the executable: the application lives in the system tray.
  2. Open Settings (tray menu, or set the DICTATA_OPEN_SETTINGS=1 environment variable at launch): pick a model in the Models page (built-in download), set the hotkey, language and audio source.
  3. Place the cursor where you want to write, press the hotkey (default Ctrl+Alt+Space), speak, press again. Hold Esc for about half a second to cancel the current take — Escape is read globally, so a plain tap is left to the application you are typing into.

The configuration is read from config.json next to the executable, or from the directory pointed to by the DICTATA_HOME environment variable. The file must be UTF-8 without BOM.

GPU: gpu config field — "auto" (default, uses Vulkan when available), "cpu", "vulkan", "cuda".

Architecture

ModuleRole
main.rsOrchestration: states, hotkey, dock, transcription threads
audio.rscpal capture (mic / loopback / mix), 16 kHz resampling, ffmpeg decoding
transcriber.rsFacade over the ASR engine (backend chosen from the model's shape)
engine/Multi-backend ASR engine: AsrEngine trait, EngineKind::detect, backends (whisper, Parakeet, SenseVoice, Moonshine, Zipformer)
streaming.rsContinuous mode: pause-based chunking, progressive emission
settings.rsSettings window (8 pages, egui) — presentation
settings_logic.rsSettings business logic, testable without UI
dock.rsFloating dock (waveform, states)
modes.rs / llm.rsOutput modes and local LLM post-processing
models.rsggml + ONNX catalogs, download/delete (files and bundles), HuggingFace search, paths
i18n.rsfr/en/es translations (tr())
config.rs / history.rs / paste.rs / hotkey.rs / tray.rs / hardware.rs / platform.rsConfig, history, paste, global hotkey, tray, hardware detection, Windows integration

Tests

cargo test

83 unit tests (config, resampling, mixing, modes, settings logic, hardware rating, HuggingFace query parsing, audio-context sizing, history retention, cancel gesture, download safety, backend detection, ONNX bundle handling…). A CLI example is provided:

cargo run --example transcribe -- <file.wav>   # DICTATA_GPU=1 for GPU

License

Licensed under the MIT License with the Commons Clause — see LICENSE.

  • Free to use, copy, modify, distribute and self-host, for personal or any other purpose.
  • You may not Sell it: you cannot sell the software, or offer a paid product or service (hosting, SaaS, paywall, paid support…) whose value derives substantially from it.

© 2026 Antoine Chatry.

Contributors

AntoineChatry

16 commits

Languages

Rust

96.5%

PowerShell

2.6%