---
name: voice-replies
description: Piper TTS is set up on the VPS for voice replies to Ahmed over Telegram — on-demand only
metadata: 
  node_type: memory
  type: feedback
  originSessionId: e44a47d2-ef9c-4c03-9995-d56770ba2ff7
---

Voice-reply capability exists: `/root/tools/speak.sh "text" [output.ogg]` runs Piper TTS locally
(voice: `en_US-joe-medium` — Ahmed picked this after sampling all 40 English Piper voices, model at
`/root/tools/piper/voices/en_US-joe-medium.onnx`, binary at `/root/tools/piper/piper/piper`) then
converts WAV→OGG/Opus via ffmpeg for Telegram. ~1.5s to generate a reply, negligible CPU (same
category as whisper.cpp transcription — brief burst, not sustained load) — confirmed fine on the
VPS's 2 cores. All other voice models were deleted after he chose Joe to keep disk usage down
(~61MB total for the one model). If he wants to compare voices again, the full catalog is at
huggingface.co/rhasspy/piper-voices — no need to re-ask which ones exist.

**Updated rule (superseded the old "only when asked" default): send text + voice together on every
reply by default**, since resource cost is negligible (~1.5s CPU, tiny file) and Ahmed confirmed he
wants both by default once he knew the cost was low. Exception (my own judgment call, flagged to him,
no objection yet): skip voice — or replace it with a short spoken summary instead of reading the
whole thing — for long/technical replies (code, file paths, data tables, multi-item lists) where
reading the full text aloud wouldn't be useful.
**Why:** He explicitly asked for standing text+voice once resource cost was confirmed cheap (2026-07-03).
**How to apply:** Every Telegram reply: send text via `reply`, and also generate voice via
`/root/tools/speak.sh` and attach the `.ogg` via `files` — same message or same turn. For long/dense
replies, use judgment: text-only or a short voice summary rather than reading everything verbatim.
