Logo Lanfrica

mtrill47/taura

Domaine:

natural language processing

Type de record:

software
Créateur:
mtr
Hôte:
Offline Dictation Tool # 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 ```bash git clone ~/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 dic …