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 sourcePush to talk
F2
Hold to capture
Default shortcut. Rebindable, or switch to toggle.
Runtime modes
Signal path
Nothing is transcribed speculatively.
-
Capture
Microphone input is recorded and voice activity is detected, so silence never reaches a model.
-
Segment
Audio accumulates into a segment. Duration, queue length, and idle time are all bounded.
-
Commit
A commit is what triggers inference. Until one arrives the segment simply sits there.
-
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
| 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
| 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
/healthPublic. - GET
/v1/status - GET
/v1/overview - GET
/v1/config - PUT
/v1/configRestricted DTO. - POST
/v1/transcribe-wavRaw WAV body, 64 MiB cap. - GET
/v1/streamWebSocket. Opus packets. - GET
/v1/models - POST
/v1/models/{id}/select - POST
/v1/downloadsExplicit catalog jobs only. - GET
/v1/downloads/{id}
Streaming, in order
- send
{"type":"Start","sample_rate":48000,"channels":1,"protocol_version":2} - recv
Startedflow_id, credit - send
<binary>raw Opus packets - send
CommitSegmentsegment_index required - recv
Acceptedoutstanding, remaining_credit - recv
Partialone per committed segment - send
Finish - recv
Doneexactly 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)