cd /news/artificial-intelligence/show-hn-audio-chat-box-offline-speec… · home › topics › artificial-intelligence › article
[ARTICLE · art-160215] src=github.com ↗ pub= topic=artificial-intelligence verified=true sentiment=↑ positive

Show HN: Audio-chat-box – offline speech in and out for any program, over stdio

A developer released audio-chat-box, an open-source Rust program that gives any application offline speech-to-text and text-to-speech over standard input/output using one JSON message per line. The tool runs entirely locally through sherpa-onnx, reading text aloud with Kokoro (54 voices) and transcribing speech with Nvidia's Parakeet TDT 0.6B v2, with Silero VAD detecting utterances; models total roughly 834 MB (Kokoro 350 MB, Parakeet 482 MB, Silero VAD 2 MB) and are SHA-256 verified. A Docker Hub demo image, pnxstudios/audio-chat-box-demo at about 880 MB for Linux amd64, lets users try it at localhost:8080 with no network, account or API key.

read5 min views2 publishedOct 29, 2026
Show HN: Audio-chat-box – offline speech in and out for any program, over stdio
Image: Michielbdejong (auto-discovered)

Add the ability to speak with your AI project • hands free • offline • local-first

Speech for a program that talks with people, on the computer it runs on. audio-chat-box reads text aloud with Kokoro, turns speech into text with Parakeet TDT 0.6B v2, and can listen: the client streams its microphone, Silero VAD finds each thing said, and Parakeet hears it once the speaker s. It all runs locally, through sherpa-onnx, with nothing sent anywhere.

It is a program of its own that your program starts and talks to over standard input and output, one JSON message a line (docs/protocol.md). It never touches a microphone or a speaker: your program records and plays. It knows nothing of your product's domain: your program tells it which words to expect (hotwords), and it favours them where the sound allows, "knight" over "night" for a chess board, your product's names for yours.

The fastest way to try audio-chat-box, with nothing to build: pull the Parrot Service demo from Docker Hub and run it. You speak, it shows what it heard, and it reads it back.

docker pull pnxstudios/audio-chat-box-demo
docker run --rm --platform linux/amd64 -p 127.0.0.1:8080:8080 pnxstudios/audio-chat-box-demo

Then open http://localhost:8080 (that address, not 127.0.0.1), press Record and allow the microphone. You can also type text and hear it in any of Kokoro's 54 voices. Ctrl+C stops it.

The image (about 880 MB to download) carries the program and its models, Kokoro and Parakeet, so it runs with no network, account or API key. It is built for Linux amd64; on Apple Silicon, Docker runs it under emulation, which works but is slower. This is a speech demo, not an LLM chatbot. The Docker demo guide covers building the image yourself, running it with fewer privileges, the models' licences, privacy, browser requirements and limits.

cargo build --release
target/release/audio-chat-box --models <folder>
Option
--models <folder> Where the models are, and are downloaded to the first time: Kokoro 350 MB, Parakeet 482 MB, Silero VAD 2 MB, each checked against its SHA-256
--models-url <url> Where the models are downloaded from. The default is this repository's models-v1 release ; a product can name its own copy of the same files
--speak <model> kokoro (the default),kokoro-int8 , ornone
--hear <model> parakeet (the default), ornone
--listen <model> silero-vad , ornone (the default): listen to speech as it comes (voice/listen ), heard with the--hear model
--offline Never download: a model that isn't in the folder fails

It then reads messages, one JSON line each, and answers:

→ {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocol": "1.0", "client": {"name": "me", "version": "1"}}}
← {"jsonrpc": "2.0", "id": 1, "result": {"protocol": "1.0", "node": {"name": "audio-chat-box", …}, "capabilities": {"voice": {"speak": true, "transcribe": true, "hotwords": true, "formats": ["wav", "pcmF32"]}}, …}}
← {"jsonrpc": "2.0", "method": "voice/modelState", "params": {"id": "kokoro", "state": {"stage": "ready"}}}
→ {"jsonrpc": "2.0", "id": 2, "method": "voice/speak", "params": {"text": "Your table is ready.", "voice": "am_michael"}}
← {"jsonrpc": "2.0", "id": 2, "result": {"format": "wav", "sampleRate": 24000, "audio": "UklGR…", "durationMs": 1150}}

voice/voices lists Kokoro's 54 voices, voice/models the models and how ready each is, and voice/transcribe hears a WAV file or raw samples, with the hotwords given. On an M1 Max both models load in about a second, and a sentence is read in under one.

voice/listen takes 16 kHz raw samples in voice/audio notifications, as they come from the microphone, and says voice/speechStarted when someone starts speaking and voice/heard with what they said once they (800 ms unless the listen says otherwise). One listen at a time. docs/protocol.md has every message.

cargo run --release --example say, hear, listen and bakeoff read text aloud to a WAV file, hear WAV files, listen to WAV files as a stream, and compare transcription models on recordings of your own, for measuring.

The models are downloaded once, the first time each is needed, and each archive is checked against the size and SHA-256 built into the program (src/models.rs) before it is unpacked. By default they come from this repository's models-v1 release: copies of sherpa-onnx's archives, unchanged, and Silero VAD packed the same way, with a NOTICE.txt of their licences. A product may host the same files itself and pass --models-url; a file that differs from the one built in is refused. CREDITS.md says where each came from.

audio-chat-box began as solrac-voice, the voice of Solrac, an AI-based Chess Coach. Solrac's chat reads its replies aloud and hears its player, by Talk or hands-free, and this program grew out of that work: its models were chosen in Solrac's bake-off of speech recognisers, its listening was tuned on a player's moves said at speed-chess pace, and its protocol is the voice domain of the Chess Node Protocol, which Solrac speaks to all its modules. The comments still cite Solrac's issues (cjus/chessgui#…), as the history of why each choice was made. It was renamed in October 2026, once what was chess in it, the words it favoured, had moved to the client, so that any product can use it.

Our own code is licensed under either of MIT or Apache-2.0, at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

The audio-chat-box program as built links sherpa-onnx's prebuilt library, which includes eSpeak NG (GPL-3.0-or-later): Kokoro uses it to sound out words its lexicon doesn't have. So the program as a whole is GPL-3.0-or-later, and its source is this repository with the source of the libraries in sherpa-onnx's prebuilt library: this repository's sources-v1 release, which tools/sources.sh gathers. The models have licences of their own: Kokoro Apache-2.0, Parakeet CC-BY-4.0 (by NVIDIA), Silero VAD MIT.

Every copy of the program goes with the notices of what it is built with: tools/notices.sh writes them to target/licences/THIRD-PARTY-NOTICES.txt. They are the crates' licences (with cargo-about 0.9: cargo install --locked cargo-about@0.9.2 --features cli), then those of the C and C++ libraries in sherpa-onnx's prebuilt library, which the archive doesn't carry, so they are kept in licences/ with where each came from.

Copyright (c) 2026 Carlos Justiniano.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @audio-chat-box 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-audio-chat-b…] indexed:0 read:5min 2026-10-29 · —