Add local-first TTS/STT providers, event-driven architecture, and uv/justfile tooling#1
Open
lancekrogers wants to merge 13 commits intoethanplusai:mainfrom
Open
Add local-first TTS/STT providers, event-driven architecture, and uv/justfile tooling#1lancekrogers wants to merge 13 commits intoethanplusai:mainfrom
lancekrogers wants to merge 13 commits intoethanplusai:mainfrom
Conversation
…h edge-tts default
…or each pipeline step
…ning/transcribing phases
Replace static status dot with pulsing waveform bars animation that shows real-time visual feedback during voice capture phases.
Extract conversation logic into engine.py with event bus (events.py), allowing UI hot-reload without losing conversation state.
…ation Default STT provider is now Whisper instead of Google, completing the move to fully local providers (Kokoro TTS was already default). No API keys needed out of the box. Also adds real-time mic level tracking with smooth waveform animation that responds to actual voice input, replacing the static looping frames. The mic animation now shows idle breathing dots when waiting and a live level-driven waveform when speech is detected.
Add configurable TTS/STT provider system with Kokoro-82M local TTS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Major overhaul that makes Samantha fully usable without any API keys or cloud services. Adds a pluggable provider system for both TTS and STT, replaces the tightly-coupled conversation loop with an event-driven architecture, and modernizes the build/dev tooling.
Local-First Audio Providers
faster-whisper, no internet requiredTTSProvider/STTProvider) for easy extensibilityEvent-Driven Architecture
EventBus(samantha/events.py) decouples the conversation engine from the UIConversationEngine(samantha/engine.py) manages the listen → think → speak loop independently of display concernslistening,thinking,speaking,error, etc.) instead of being called directlyNew CLI Commands
samantha test— end-to-end mic + speaker test with per-provider diagnosticssamantha voices— list available TTS voices with locale/gender filteringsamantha providers— show installed/active TTS and STT providers with install hintsBuild & Tooling
setuptoolstohatchlingbuild backenduvas the package manager with optional dependency groups ([whisper],[fish],[edge],[local],[cloud],[all])python-dotenvfor.envfile supportjustfilesystem with modular recipes:voice.just,dev.just,install.justOther Improvements
CLAUDE.mdto reflect new defaults and zero-API-key setupChanged Files
samantha/tts/— New TTS provider package (kokoro, edge, fish + base class)samantha/stt/— New STT provider package (whisper, google + base class)samantha/engine.py— New conversation engine (decoupled from UI)samantha/events.py— New event bus for engine↔UI communicationsamantha/voice.py— Refactored to provider-agnostic orchestrationsamantha/cli.py— New subcommands (test, voices, providers)samantha/config.py— New provider settings and defaultssamantha/ui.py— Event-driven status display with waveform animationpyproject.toml— hatchling backend, optional deps, dotenvjustfile+.justfiles/— Full modular just recipe systemuv.lock— Lockfile for reproducible installsTest Plan
samantha --textworks with default Kokoro TTS (no API keys)samanthaworks with default Whisper STT + Kokoro TTS (fully local)samantha testcorrectly reports mic and speaker statussamantha providersshows installed vs missing providerssamantha voiceslists available voices for the active TTS providersamantha config tts_provider edgeworksjustrecipes work (just talk,just text,just voice go-local)