<feed xmlns='http://www.w3.org/2005/Atom'>
<title>senator-sperma/src/tts.rs, branch main</title>
<subtitle>Very big discord bot.
</subtitle>
<id>https://git.2137697.xyz/senator-sperma/atom?h=main</id>
<link rel='self' href='https://git.2137697.xyz/senator-sperma/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/'/>
<updated>2026-11-04T00:34:59Z</updated>
<entry>
<title>tts: initialize piper exactly once</title>
<updated>2026-11-04T00:34:59Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:34:59Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=fcff527349d49ef9419c4ac7f4b866ad04e8d754'/>
<id>urn:sha1:fcff527349d49ef9419c4ac7f4b866ad04e8d754</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tts: run piper loading and synthesis on blocking threads</title>
<updated>2026-11-04T00:12:12Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:12:12Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=f672d84951cf7dea4f47429475b109426f2be944'/>
<id>urn:sha1:f672d84951cf7dea4f47429475b109426f2be944</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tts: bound the audio cache and request length</title>
<updated>2026-11-04T00:11:10Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-11-04T00:11:10Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=267ebcb87b4e22859d43a618aa14dce2045afa29'/>
<id>urn:sha1:267ebcb87b4e22859d43a618aa14dce2045afa29</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: piper now not a subprocess, cache system for TTS</title>
<updated>2026-09-05T17:35:21Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-09-05T17:35:21Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=8e868894cbcaf421c263f3555af4d29bef653420'/>
<id>urn:sha1:8e868894cbcaf421c263f3555af4d29bef653420</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: local TTS via piper subprocess with Google fallback</title>
<updated>2026-08-18T21:18:37Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-18T21:18:37Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/senator-sperma/commit/?id=b252c39517b9fce181d1a0fe4761404c7d981397'/>
<id>urn:sha1:b252c39517b9fce181d1a0fe4761404c7d981397</id>
<content type='text'>
- New src/tts.rs: centralize TTS in synthesize(config, http_client, text)
  Piper subprocess primary, Google Translate fallback on error/missing
- TTS_MODEL_PATH/TTS_VOICE env config (defaults to pl_PL-bass-high)
- Fix Unknown interaction errors: spawn play_tts_in_channel in background
  so voice-state TTS no longer blocks the shard event loop (3s Discord limit)
- Best-effort confirmation replies in /tts to prevent error cascade
- Custom on_error handler: graceful interaction-expired error handling
- Comprehensive tracing logging (engine, model, duration, stderr)
</content>
</entry>
</feed>
