Local speech-to-speech voice app for talking with cartoon characters.
Features · Runtime · Models · Running locally · Demo
- Continuous browser voice chat with barge-in interruption.
- Native Parakeet speech recognition worker with Silero VAD.
- llama.cpp OpenAI-compatible local chat server.
- Supertonic 3 local Russian speech synthesis.
- Single maintained runtime path with no Python service or legacy TTS fallbacks.
browser mic PCM
-> Node WebSocket server
-> Rust Silero VAD + Parakeet ONNX STT
-> llama.cpp OpenAI-compatible chat server
-> Supertonic 3 TTS
-> browser PCM playback
- STT:
models/parakeet-tdt-0.6b-v3-onnx-int8 - LLM:
models/llm/smollm3-3b/HuggingFaceTB_SmolLM3-3B-Q4_K_M.gguf - TTS:
models/supertonic-3
bun run devOpen:
http://localhost:3000
bun run dev starts:
- Vite web app on
127.0.0.1:3000 - Node voice WebSocket server on
127.0.0.1:8090 - llama.cpp server on
127.0.0.1:18081
Use this when you want to keep the full voice runtime on your Mac and share a temporary HTTPS URL.
Terminal 1:
bun run devTerminal 2:
bun run demo:tunnelCloudflare prints a temporary https://...trycloudflare.com URL. The browser will use the secure tunnel for microphone access, while STT, LLM, and TTS continue running locally on your machine.
Notes:
- Install
cloudflaredfirst if needed:brew install cloudflared. - Keep both terminal processes running for the whole demo.
- The current voice server accepts one active client at a time.
- Stop the tunnel with
Ctrl+Cwhen the demo is finished.
| Command | Description |
|---|---|
bun run dev |
Start the web app, voice server, and llama.cpp server. |
bun run dev:web |
Start only the Vite web app. |
bun run dev:voice |
Start only the Node voice server. |
bun run dev:llm |
Start only the llama.cpp server. |
bun run demo:tunnel |
Expose the local Vite app through a temporary Cloudflare Tunnel URL. |
bun run check |
Run Biome, TypeScript, Node syntax checks, and tests. |
bun run build |
Build the web app. |
bun run check
bun run build