Show HN: Real-time AI (audio/video in, voice out) on an M3 Pro with Gemma E2B
TL;DR Highlight
We open-sourced a real-time multimodal AI speech and video conversation system that runs completely locally on Apple Silicon M3 Pro without the internet. It is attracting attention for its ability to handle speech recognition, video understanding, and TTS simultaneously without cloud costs.
Who Should Read
Developers who want to build their own on-device AI voice assistants, or backend/ML developers who want to build a multimodal pipeline locally without cloud AI API costs.
Core Mechanics
- This project (Parlor) is a real-time multimodal conversation system that takes microphone and camera input and responds with voice, with all processing done only on the user's device.
- It uses Google's recently released Gemma 4 E2B model for language understanding and video recognition, and utilizes the LiteRT-LM runtime for GPU acceleration.
- Kokoro is used for TTS (text-to-speech). It operates with the MLX backend on Mac and the ONNX backend on Linux.
- The structure streams microphone and camera data from the browser to a FastAPI server via WebSocket, and the server returns the processed audio to the browser via WebSocket.
- The browser runs Silero VAD (Voice Activity Detection model) to enable hands-free conversation without push-to-talk, and also supports barge-in functionality to interrupt the AI while it's speaking.
- TTS is streamed sentence by sentence, so audio playback starts before the entire response is generated, reducing perceived latency.
- The motivation for development was to eliminate server costs and make an English learning service sustainable. Six months ago, RTX 5090 was required for real-time processing, but now it's possible with M3 Pro.
- The developer particularly emphasized that Gemma 4 E2B supports multilingualism, allowing users to freely mix their native language and the language they are learning in conversation, which is especially useful for language learning.
Evidence
- "During offline environment testing, a bug was discovered where the page would stop at 'loading...' when localhost was first opened with the internet disconnected. One user reported that it works normally if the page is loaded once while connected to the internet and then the connection is disconnected. I was impressed with the fast performance, including video input, on an M4 Pro 48GB.\n\nA developer who is creating a similar project shared that Gemma 4 E2B is still too heavy despite being E2B, and they are using the Qwen 0.8B model instead. This demonstrates the trade-off between model size and real-time responsiveness is a real barrier.\n\nMultiple comments agreed that the latency of Kokoro TTS is very low, and one developer commented, 'Apple should have used this in Siri,' criticizing Apple for falling behind in technology.\n\nA comment shared information that only the text portion of Gemma 4 E2B can be fine-tuned. They shared their experience of fine-tuning it into an 'AI that talks like a pirate' along with a related video link, and also noted that the TTS portion cannot be fine-tuned.\n\nSome users reported that the voice recognition speed of Gemma E2B does not reach real-time on hardware such as M1 Max (64GB), RTX 5060 Ti (16GB), and Snapdragon 8 Gen 2, and asked for solutions. This suggests that performance may not be guaranteed in environments other than M3 Pro."
How to Apply
- If you need a hands-free workshop assistant or a voice AI while driving long distances, you can launch Parlor as a local server and open a browser to use a voice assistant for timer, calculation, memo search, etc. without the internet and without push-to-talk.
- If you are operating an English learning service or a multilingual conversation app and cloud API costs are burdensome, you can eliminate server costs by referring to the structure of Parlor (FastAPI + WebSocket + Gemma 4 E2B + Kokoro) and converting it to an on-device pipeline.
- If you want to change the response style of the Gemma 4 E2B model to a specific domain, you can apply text fine-tuning to the E2B model to learn the desired tone or response pattern. Keep in mind that fine-tuning does not apply to the TTS portion, so it only applies to the text generation stage.
- If you feel that Gemma 4 E2B is too heavy for low-spec environments (M1 or lower, 16GB or lower GPU, etc.), as mentioned in the comments, it is a good idea to first try replacing it with a smaller model like Qwen 0.8B and measure the real-time latency to confirm the trade-off.
Code Example
# Architecture flow (excerpt from README)
Browser (mic + camera)
│
│ WebSocket (audio PCM + JPEG frames)
▼
FastAPI server
├── Gemma 4 E2B via LiteRT-LM (GPU) → understands speech + vision
└── Kokoro TTS (MLX on Mac, ONNX on Linux) → speaks back
│
│ WebSocket (streamed audio chunks)
▼
Browser (playback + transcript)
# Installation and execution (based on README)
git clone https://github.com/fikrikarim/parlor
cd parlor
cp .env.example .env
# Modify necessary settings in .env
pip install -r requirements.txt
uvicorn src.main:app --reloadTerminology
Related Papers
Claude Code sends 33k tokens before reading the prompt; OpenCode sends 7k
동일한 모델과 작업 환경에서 Claude Code와 OpenCode의 실제 토큰 사용량을 API 레벨에서 측정한 결과, Claude Code가 시스템 프롬프트 오버헤드만으로 OpenCode 대비 4.7배 더 많은 토큰을 소비한다는 것을 확인했다.
Mesh LLM: distributed AI computing on iroh
사무실, 집, 클라우드에 흩어진 GPU들을 하나의 OpenAI 호환 API로 묶어주는 분산 LLM 실행 시스템으로, 비싼 API 비용 없이 큰 모델을 직접 운영할 수 있다.
Show HN: Frugon – Find which LLM calls a cheaper model could handle (local, MIT)
내 LLM API 비용이 어디서 새는지 로컬에서 분석해주는 오픈소스 CLI 도구로, 비싼 모델 대신 저렴한 모델로 전환 가능한 호출을 골라낸다.
Jamesob's guide to running SOTA LLMs locally
2천 달러짜리 RTX 3090 한 장부터 4만 달러짜리 RTX PRO 6000 4장 셋업까지, 로컬에서 최신 LLM을 직접 돌리는 방법을 하드웨어 선택·구성·실행 설정까지 통째로 정리한 실전 가이드다.
Faster embeddings: how we rebuilt the ONNX path in Manticore
Manticore Search가 기존 SentenceTransformers/Candle 백엔드를 ONNX Runtime으로 교체해 텍스트 임베딩 생성 속도를 평균 14배 향상시켰다. 별도 모델 서비스 없이 DB 내부에서 직접 임베딩을 처리하는 구조에서 INSERT 속도가 곧 임베딩 속도이기 때문에 이 개선은 실질적인 ingest 처리량 향상으로 직결된다.
Asymmetric Quantization: Near-Lossless Retrieval with 97% Storage Reduction
멀티벡터 검색 모델의 문서 벡터를 1비트 이진값으로 압축하고 쿼리 벡터만 int8로 유지하는 비대칭 양자화 기법으로, 스토리지를 97% 줄이면서 검색 품질 손실을 0.61점(NDCG@10 기준)에 그치게 만든 실제 프로덕션 적용 사례다.