otter-vox turns text into speech on your machine using an embedded Kokoro TTS model. No internet connection required.
otter-vox is part of otter-shell-extras, not the base otter-shell metapackage. Install with pikman install otter-shell-extras.
Usage
Pipe text into otter-vox or pass it as a positional argument. Use --no-play to write a WAV stream to stdout, or -o to save to a file.
printf 'Welcome to Otter Shell.' | otter-vox --no-play | pw-play - # pipe to PipeWire
printf 'Welcome to Otter Shell.' | otter-vox -o speech.wav # save to file
otter-vox --voice bm_lewis --play 'Welcome to Otter Shell.' # speak with voice
otter-vox --check-model # verify model
otter-vox --list-voices # list all voices
Voices
otter-vox ships with Kokoro voice files embedded in the binary, covering several languages and accents.
| Prefix | Language / Accent | Example voices |
|---|
af_* | American female | alloy, bella, jessica, nova, heart, kore, nicole, river, sarah, sky |
am_* | American male | adam, echo, michael, onyx, eric, fenrir, liam, puck |
bf_* | British female | alice, emma, isabella, lily |
bm_* | British male | daniel, george, lewis, fable |
df_* | German female | eva, victoria |
dm_* | German male | bernd, martin |
ef_* | Spanish female | dora |
em_* | Spanish male | alex, santa |
ff_* | French female | siwis |
hf_* | Hindi female | alpha, beta |
hm_* | Hindi male | omega, psi |
if_* | Italian female | sara |
im_* | Italian male | nicola |
jf_* | Japanese female | alpha, gongitsune, nezumi, tebukuro |
jm_* | Japanese male | kumo |
pf_* | Portuguese female | dora |
pm_* | Portuguese male | alex, santa |
zf_* | Chinese female | xiaobei, xiaoni, xiaoxiao, xiaoyi |
zm_* | Chinese male | yunjian, yunxi, yunxia, yunyang |
Run otter-vox --list-voices to see all embedded voice names available in your install.
Output Options
- Default: plays audio through your system audio output
--no-play: writes a raw WAV stream to stdout for piping to another program
-o PATH / --output PATH: saves audio to a file instead of (or alongside) playing it
-o speech.wav with playback enabled: saves the file and plays it at the same time
Configuration
otter-vox reads ~/.config/otter-shell/otter-vox.conf.
model_dir = ""
output_path = "-"
playback = true
voice = "bm_george"
cpu_threads = 4
model_dir: empty uses the embedded model, extracted at runtime. Set a directory path to use your own Kokoro model and voice files
output_path: output destination (- for stdout)
playback: play audio after synthesis
voice: default voice name
cpu_threads: thread count for inference