Shush
Local-AI · Android + PythonA conversation mood ring that tells you when to shut up — before you regret it.
Your phone becomes a dumb microphone and a single breathing circle. Everything else — transcription, judging the mood, deciding when you're about to cross a line — happens on your own machine. Nothing ever leaves the room.
The idea
It started as a friend's joke — "someone should make an app that tells you when to shut up." In a heated conversation it's hard to notice your own voice climbing until it's too late. Shush is the device that notices for you: a calm circle that warms to amber as things get tense and goes red when you're about to say the thing you can't take back.
How it works
The phone (Kotlin + Jetpack Compose) streams raw PCM audio over a LAN WebSocket to a Python server. The server runs a deliberate two-layer design so the interface always feels instant:
- Fast layer — a NumPy loop tracks loudness and a rolling 5-second history, driving the circle's size and a "voices rising" early-warning the moment things start climbing, even before anyone is loud.
- Slow layer — faster-whisper transcribes each phrase and a local LLM (Ollama,
llama3.2:3b) reads the escalation arc and returns a verdict plus a trend: easing, steady, or rising.
Live speaker counting uses SpeechBrain ECAPA voice embeddings, clustered online so the circle knows how many people are talking.
Predict, don't just react
The whole point is to warn you early. Two trajectory signals feed the alarm: an acoustic one that flags your voice rising above your own rolling baseline, and a verbal one where the judge reserves the red "stop" for an imminent blow-up and uses amber for the build-up. When the trend is rising, the circle physically throbs.
Privacy by design
Privacy isn't a setting, it's the architecture. Audio never leaves your network; every WebSocket frame is AES-256-GCM encrypted; pairing is trust-on-first-use over mDNS auto-discovery, so there's no token to type and none broadcast. Transcripts and voiceprints are deliberately not stored by default.
Gallery
Built with
Android: Kotlin, Jetpack Compose, OkHttp WebSocket, AudioRecord (PCM16 mono 16 kHz). Server: Python, websockets, NumPy, faster-whisper (multilingual medium), SpeechBrain ECAPA diarization, Ollama for the judge. Ops: AES-GCM crypto, zeroconf/mDNS discovery, Docker + docker-compose with GPU passthrough.