Usage¶
uv manages the environment for you. If you installed into a plain virtual environment instead, activate it each time you open a new terminal and run the script directly:
Say "Hey Jarvis" followed by a command. After a command that gives no spoken reply (such as volume changes), EasySpeak keeps listening for a few seconds so you can chain commands — say "louder", "louder", "louder" without repeating the wake word each time.
Command-line options¶
| Flag | Default | Effect |
|---|---|---|
-v, --verbose |
Show debug output | |
-q, --quiet |
Show only warnings and errors | |
--configure [ITEM ...] |
extension service |
Set up the listed integrations and exit |
--preview ITEM |
Print the file content that would be configured and exit |
For --configure/--preview, each ITEM is one of extension, service,
autostart, or desktop. Verbosity can also be set with the
EASYSPEAK_LOG_LEVEL environment variable (e.g. DEBUG, INFO, WARNING),
but the command-line flags take precedence.
See core.cli and core.log for
the underlying argument parsing and logging setup.
Configuration¶
Behavior is tuned through EASYSPEAK_* environment variables, grouped below by
the module that reads each (linked to its API reference).
core.config¶
| Variable | Default | Effect |
|---|---|---|
EASYSPEAK_HOTKEY |
ctrl+shift |
Keys held to dictate without the wake word |
EASYSPEAK_OFFLINE |
strict |
Stay offline; relaxed downloads models |
EASYSPEAK_PIPER_BIN |
piper |
Piper TTS binary |
EASYSPEAK_REQUIRE_WAKE_WORD |
unset | Modes wait for the wake word each command |
EASYSPEAK_PIPER_MODEL |
bundled Amy voice | Piper voice .onnx for speech output |
EASYSPEAK_SOUNDS_DIR |
/usr/share/sounds/freedesktop/stereo |
Directory of the wake chime and error bell |
EASYSPEAK_WHISPER_COMPUTE_TYPE |
int8 |
CTranslate2 compute type |
EASYSPEAK_WHISPER_CPU_THREADS |
0 |
CPU threads for transcription (0 = auto) |
EASYSPEAK_WHISPER_MODEL |
base.en |
faster-whisper model for transcription |
EASYSPEAK_SILENCE_THRESHOLD |
measured at startup | Amplitude below which audio counts as quiet |
EASYSPEAK_SILENCE_THRESHOLD is normally left alone. On startup EasySpeak
listens to the room for a second and sets the threshold above whatever it
measures — a fixed value assumes a quiet room, and where the ambient level sits
above it (a desk fan, a desktop machine) silence is never detected, so every
recording runs to its full time cap and every command feels slow. The measured
floor is printed at startup:
Set the variable to skip the measurement, e.g. if you happen to be talking during the first second after launch.
EASYSPEAK_HOTKEY takes the ctrl/shift/alt/super aliases or raw evdev
key names joined with + (e.g. ctrl+space); set it to empty, off, or none
to turn it off, and an unrecognized key disables it too. See
Packaging for the device access it needs.
core.log¶
| Variable | Default | Effect |
|---|---|---|
EASYSPEAK_LOG_LEVEL |
INFO |
Logging level when no -v/-q flag is given |
plugins.dictation¶
| Variable | Default | Effect |
|---|---|---|
EASYSPEAK_ATSPI_PYTHON |
probed | Interpreter running the dictation AT-SPI helper |
EASYSPEAK_PASTE_KEYS |
per app | Keystroke that pastes dictated text |
Dictation types by putting the text on the clipboard and sending a paste
keystroke — every toolkit implements paste, whereas accessibility-level
insertion is widely stubbed out. EASYSPEAK_PASTE_KEYS overrides the chord, e.g.
shift+insert; by default it is Ctrl+V, or Ctrl+Shift+V when a terminal has
focus. It accepts ctrl, shift, alt, super, insert and v joined with
+.
EASYSPEAK_ATSPI_PYTHON is normally left alone. The AT-SPI helper needs
PyGObject and the AT-SPI typelib, which the application's own virtual environment
usually lacks, so candidate interpreters are probed with the helper's real import
chain and the first that works is kept. Set the variable to point straight at one
(the Nix flake does).