Skip to content

mtrill47/taura

Repository files navigation

Taura — Offline Voice Dictation for Linux (i3 / X11)

100% offline voice-to-text using faster-whisper. No cloud, no subscriptions, no internet needed.

Taura comes from the Shona verb kutaura — to speak.

Architecture

Hold Ctrl+Shift+Space
        │
push_to_talk.py  (systemd: dictation-listener)
  ├── shows red "● REC" indicator (rec_indicator.py)
  ├── records audio via sox → /tmp/dictation_recording.wav
  └── sends wav path via socat → ~/.dictation.sock
        │
transcription_server.py  (systemd: dictation-daemon)
  └── faster-whisper model loaded once, stays in RAM
        │
xdotool types transcribed text into the active window

Two systemd user services start at login: the daemon loads the Whisper model once and keeps it resident; the listener handles the hotkey, recording, and visual indicator.

Quick Start

git clone <this-repo> ~/dictation
cd ~/dictation
chmod +x setup.sh
./setup.sh

Reload i3 ($mod+Shift+r), then hold Ctrl+Shift+Space to record. Release to transcribe.

Files

File Purpose
setup.sh One-shot installer
transcription_server.py Daemon — holds Whisper model in memory, listens on Unix socket
push_to_talk.py Hold-to-record listener (pynput), manages recording and indicator
rec_indicator.py Floating red "● REC" bar shown while recording
dictation-daemon.service Systemd user service for the transcription daemon
dictation-listener.service Systemd user service for the push-to-talk listener

Configuration

Change model size — edit ~/.config/systemd/user/dictation-daemon.service, uncomment and set DICTATION_MODEL:

Model Size RAM Speed
tiny 75 MB ~1 GB Fastest
base 142 MB ~1 GB Fast
small 466 MB ~2 GB Default — good balance
medium 1.5 GB ~5 GB Slower, more accurate
large-v3 3 GB ~10 GB Best accuracy

Then: systemctl --user daemon-reload && systemctl --user restart dictation-daemon

Change language — same file, set DICTATION_LANG (default: en).

Change hotkey — edit the on_press / on_release functions in push_to_talk.py, then restart the listener service.

DISPLAYsetup.sh auto-detects and patches this. If the listener starts but doesn't respond to keypresses, check echo $DISPLAY and update Environment=DISPLAY= in ~/.config/systemd/user/dictation-listener.service.

About

Offline Dictation Tool

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors