Hold a key, speak, and it is written.
Skald is local push-to-talk speech-to-text for Windows. Tap a hotkey, talk, and your words are transcribed on your own machine and pasted into whatever window you are working in. No cloud, no API keys, no subscription, no telemetry. The skalds of the north turned spoken deeds into written saga; this one does it for your rambling first drafts, commit messages, and Discord replies.
- Tap to talk, live. Tap Right Ctrl to start. A small floating overlay shows your words as you speak, with a live level meter and timer. Tap again to stop; the text lands in your active window instantly.
- Or hold to talk. Prefer the old way?
run-classic.batgives you hold-to-record, release-to-paste, no window at all. - Everything stays on your machine. Transcription runs locally on faster-whisper. Your voice never leaves the computer.
- Never lose a thought. Every phrase is also appended to a dated transcript file the moment it is heard, so a misplaced click or a crash cannot eat your brainstorm. Old transcripts prune themselves after 30 days (configurable, or turn it off).
- Spoken commands, if you want them. Say the word "skald" before a command ("skald search kettlebell form", "skald open chrome") and it acts instead of typing. Fully local, fully deterministic, off by default until you learn it.
- Chimes you can trust. A rising two-note when the mic opens, a falling one when it closes. Your ears always know the state. Silence with
--no-chime.
- Windows 10 or 11
- Python 3.11+
- A microphone
A GPU is not required, and you don't need to know what's in your machine: Skald detects your GPU and CPU itself and picks the best engine it has for them. Run python skald.py --doctor and it will name your hardware in plain words and tell you if a faster engine is one download away. On CPU, the model size defaults to auto (picked by core count; see the table below). If you do have a GPU, NVIDIA, AMD, or Intel Arc alike, see GPU acceleration below: Skald can ride a local whisper.cpp Vulkan server for large-model accuracy at real-time speed.
git clone https://github.com/SideQuest-Adventure/skald.git
cd skald
install.batOr by hand: pip install -r requirements.txt
Then check your setup:
python skald.py --doctorDoctor verifies your Python version, every dependency, your microphone, the model cache, and the clipboard, and tells you exactly what is missing if anything is.
run.bat (live overlay mode)
run-classic.bat (hold-to-talk, console only)
python skald.py --list (list audio devices)The first run downloads the Whisper model to your cache directory and warms it up, so the first real sentence is fast.
Set MODEL_SIZE in the CONFIG block at the top of skald.py. On CPU this is the speed and accuracy dial:
| Model | Speed on CPU | Accuracy | Good for |
|---|---|---|---|
tiny.en |
fastest | drops tricky words | quick notes |
base.en |
fast | solid everyday accuracy | the default |
small.en |
moderate | noticeably better | dictating documents |
medium.en |
slower | strong | when accuracy matters most |
Other useful CONFIG dials: HOTKEY, SILENCE_THRESHOLD, MAX_RECORD_SECONDS, SAVE_TRANSCRIPTS, TRANSCRIPT_RETENTION_DAYS, CHIME, LANGUAGE.
Skald's ASR_BACKEND is auto: on every launch it looks for a local whisper.cpp ASR server at http://127.0.0.1:5075 and uses it when present, which moves transcription to your GPU through Vulkan. Vulkan means this works on AMD and Intel cards, not just NVIDIA. No server found, no problem: Skald quietly falls back to faster-whisper on CPU.
To set it up:
- Download koboldcpp (
koboldcpp-nocuda.exe, it embeds whisper.cpp with the Vulkan backend) into anengines\folder next toskald.py. - Download a whisper GGML model, for example
ggml-large-v3-turbo-q5_0.bin, into the same folder. - That is all. Skald auto-starts the server when it launches and reuses it if it is already running. Point
ASR_SERVER_URLat any other machine on your network if you keep the GPU elsewhere.
With a mid-range GPU this runs the large-v3-turbo model faster than small models run on CPU, which is the best accuracy-per-second available anywhere in local dictation.
Every dictated phrase is saved to ~/Documents/Skald Transcripts/skald-YYYY-MM-DD.md with a timestamp, one rolling file per day, independent of where the paste lands. Run with --no-save to disable for a session, or set SAVE_TRANSCRIPTS = False to disable permanently.
Run python skald.py --doctor first; it catches almost everything. The most common fix after that: if the wrong microphone is being used, run python skald.py --list and set DEVICE in CONFIG to the right index.
MIT. See LICENSE. From the SideQuest Adventure workshop.
