Supersedes draft PR #24 (hermes/tts-voice-hfc-female): Brad changed the decision after that task landed, so this starts fresh from origin/main instead of building on it. Bakes three checksum-pinned Piper voices (en_US-amy-medium, ru_RU-irina-medium, es_MX-claude-high) alongside the existing lessac set, and adds deterministic, allow-listed language routing to hermes-jetson-tts-server.py: an explicit request "language" field maps through a fixed dict to one of the three baked voices, with unknown, missing, or malformed input always falling back to English amy. A client-supplied "voice" field is never read, so no client input can reach a filesystem path. All three voices are eagerly preloaded at process start (measured ~243MB RSS for three vs. ~88MB for one). The WebUI has no signal for the language of the text it is about to speak (verified: hermes-webui-atlas-voice.js sends only text and engine), so no client- or server-side language detection is added; this gap is documented in NOTES.md and the PR description rather than papered over. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
titan-iac
Flux-managed Kubernetes desired-state config for bstein.dev.
Canonical source URL:
ssh://git@scm.bstein.dev:2242/atlas/titan-iac.git
Scope
This repo contains cluster configuration consumed by Flux:
- platform/infrastructure manifests
- service manifests and kustomizations
- operational scripts for render/reconcile workflows
Apply model
I use Git + Flux as the source of truth and avoid manual in-cluster edits for durable changes.
Description
Languages
Python
74%
JavaScript
10.2%
Shell
6.2%
TypeScript
3.9%
Go
2.1%
Other
3.4%