Ears

From The Hei Canon

ears is the fleet's production-grade speech-recognition daemon for Linux. Integrates with whisper.cpp (or any OpenAI-compatible ASR server) and the desktop workflow.

Stack: Rust. Private repo.

Features

  • Interactive TUI — real-time status, VAD mode, live transcription, config.
  • Push-to-talk — bind ears toggle to a keyboard shortcut.
  • VAD mode — Voice Activity Detection for hands-free continuous transcription (ears vad).
  • Streaming — LocalAgreement policy for stable text.
  • Text filters — optional lowercase / punctuation removal.
  • Language detection — from keyboard layout (Hyprland + GNOME).
  • Smart text inputwtype on Hyprland / Wayland, clipboard paste via ydotool elsewhere.
  • PipeWire native audio; audio feedback (embedded beeps, override support).
  • State management — file-based locking with crash recovery.
  • Post-transcribe hooks — run custom scripts after each transcription.

Server URL rule

ears appends /v1/audio/transcriptions for you. Set server to the host base without a trailing /v1. Groq is https://api.groq.com/openai, not .../openai/v1. A trailing /v1 doubles to /v1/v1/... and 404s; ears test warns about this.

Security

api_key is stored in plaintext — ears writes config files with 0600. EARS_* environment overrides only apply to interactive runs; a keybind-launched ears toggle inherits the graphical session env, not your shell, so push-to-talk keys must live in the actual config.

Sources

See also

  • trost — sibling voice project (VibeVoice TTS API).
  • discord-bot — consumes ASR in a live voice pipeline.