Shadoword
Read the source
An abstract spectrogram: hundreds of fine vertical frequency bins burning in magenta and cyan on black, densest at the right and dissolving to darkness at the left, over a solid rail of low-frequency light along the bottom. One column at the centre is perfectly black, carrying no signal at all.

Speech to textthat never leavesyour machine

Linux first. Local Whisper by default. You choose the model and the silicon.

Build from source — no packages yet.

Read the source

Push to talk

F2

Hold to capture

Default shortcut. Rebindable, or switch to toggle.

Runtime modes

Where transcription runs — select a mode to read what it does

Signal path

Nothing is transcribed speculatively.

  1. Capture

    Microphone input is recorded and voice activity is detected, so silence never reaches a model.

  2. Segment

    Audio accumulates into a segment. Duration, queue length, and idle time are all bounded.

  3. Commit

    A commit is what triggers inference. Until one arrives the segment simply sits there.

  4. Deliver

    The transcript arrives as text at your cursor, or as a payload to the process that asked for it.

You choose the model and the silicon

Model catalog

Whisper models the desktop client ships in its catalog, with download sizes
Model Download flag Size
Large v3 Turbo Default Recommended balance of speed and accuracy. turbo 1.51 GiB
Large v3 Largest and most accurate catalog model. large-v3 2.88 GiB
Medium High-accuracy multilingual model. medium 1.43 GiB
Small Balanced model for lower-memory systems. small 465 MiB
Base Fast model with improved accuracy over Tiny. base 141 MiB
Tiny Smallest and fastest catalog model. tiny 74 MiB

Accelerator

Build-time accelerator backends and the cargo feature each one needs
Backend Cargo feature
CPU default Plain cargo build. No feature flag.
Vulkan whisper-vulkan Opt-in cargo feature.
CUDA whisper-cuda Opt-in cargo feature.

The daemon is yours to host

Authenticated, and pointed wherever you point it. Nothing below is illustrative — it is the router and the socket as shipped.

HTTP surface

  • GET /health Public.
  • GET /v1/status
  • GET /v1/overview
  • GET /v1/config
  • PUT /v1/config Restricted DTO.
  • POST /v1/transcribe-wav Raw WAV body, 64 MiB cap.
  • GET /v1/stream WebSocket. Opus packets.
  • GET /v1/models
  • POST /v1/models/{id}/select
  • POST /v1/downloads Explicit catalog jobs only.
  • GET /v1/downloads/{id}

Streaming, in order

  1. send {"type":"Start","sample_rate":48000,"channels":1,"protocol_version":2}
  2. recv Started flow_id, credit
  3. send <binary> raw Opus packets
  4. send CommitSegment segment_index required
  5. recv Accepted outstanding, remaining_credit
  6. recv Partial one per committed segment
  7. send Finish
  8. recv Done exactly once

Opus in, credit granted at Started and returned at Accepted, one partial per committed segment, one Done at the end.

Build it and run it

Desktop — build and run

cd crates/shadoword-desktop
bun install
bun run tauri dev

Desktop — with Vulkan

nix develop
bun run tauri dev -- --features whisper-vulkan

Daemon — run locally

cargo run -p shadoword-api
# add --features whisper-cuda inside nix develop .#cuda

Daemon — install a model first

cargo run -p shadoword-api -- \
  --download-model turbo

Not yet measured

There is no published latency figure, because no run of the bench corpus has been recorded. When there is one it will name the hardware it ran on.

Harness
crates/shadoword-model-whisper/tests/whisper_integration.rs
Corpus
bench_corpus/clip_{10,15,20,30}s.wav
Model
Large v3 Turbo (turbo)