Voice
voice.py adds text-to-speech using KittenTTS, an ~80M ONNX model that runs on CPU with no GPU required.
The current emotional state adjusts the speaking rate. Positive states speed it up; negative states slow it down, so delivery reflects the system's state, not just the text.
The system uses a single default voice as part of a consistent identity, but the voice can be changed at any time.
Code blocks, URLs, and markdown are stripped before speaking. If a reply contained code, the system says the code is shown on screen instead of reading it aloud.
Switch at any time with voice Luna in the chat loop.
python
from voice import NeroVoice
v = NeroVoice(voice="Jasper")
v.speak("Hello. I am Nero.") # play now
v.save("Hello.", "out.wav") # write a wav fileVoice is optional. If the dependencies are not installed, the system prints a single warning and continues in text-only mode without interruption.