Build Your Own App for reSpeaker Clip with Transcription, Diarization, and Summary Using Python SDK
Introduction
reSpeaker STT Web transforms the reSpeaker Clip into an intelligent, AI-powered voice and meeting assistant, connecting embedded audio hardware with modern web and cloud AI technologies. Using BLE or Wi-Fi, it continuously synchronizes recordings from the device and processes them through powerful speech and language AI pipelines. With dedicated workflows for speech transcription, speaker diarization, and AI-generated meeting summaries, users can turn conversations into structured, actionable information. Built with Python and a modular architecture, the project provides a flexible foundation for developers and embedded engineers to build next-generation voice and AI applications with the reSpeaker Clip.

How it works
- Connect to the Clip over BLE (default) or WiFi.
- Pick a tab and hit Start. Audio streams off the device in the background as it records (continuous sync — same as the original
clip-webtool). Which tab you started from decides the pipeline that runs on this recording. - Stop recording. Once the final sync finishes, the app:
- encodes the merged audio to
.ogg(Opus), - converts that to a 16kHz mono
.wav(via PyAV — no separate ffmpeg install needed), - Transcription tab: sends the
.wavto Groq, gets plain text back. - Diarization tab: sends the
.wavto Speechmatics withdiarization: "speaker", fetches the word-level JSON transcript, and groups it into speaker turns (S1,S2, ...). - Summary tab: sends the
.wavto Groq for transcription, then feeds the transcript to Groq's chat API (openai/gpt-oss-20b) to generate structured meeting minutes (title, key points, action items, decisions). - pushes the result to the browser over the existing WebSocket.
- encodes the merged audio to
- Each tab has its own "Recordings" list (filtered by which pipeline the session was recorded under), with playback and a Process/Re-run button per recording.
API keys
Each tab has its own Settings card — Groq key on the Transcription and Summary tabs (shared — set it once, usable by both), Speechmatics key on the Diarization tab. Nothing is hardcoded or committed. Keys live in memory for the life of the server process. Check "Remember on this machine" to also persist them to app/settings.local.json (gitignored) so they survive a restart.
- Groq: get a key at https://console.groq.com — used for both transcription (
whisper-large-v3-turbo, fast single synchronous call) and summarization (openai/gpt-oss-20bchat completions). - Speechmatics: get a key at https://portal.speechmatics.com — uses the batch REST API with
diarization: "speaker"(submit → poll → fetch JSON transcript → group into speaker turns),enhancedoperating point by default. See Batch diarization in their docs.
Project structure
respeaker-stt-web/
├── clip/ # vendored Clip SDK (BLE/WiFi device control)
├── app/
│ ├── main.py # FastAPI app: device control + recording + pipeline orchestration
│ ├── audio_convert.py # PyAV-based conversion to 16kHz mono WAV
│ ├── config.py # runtime settings (per-provider API keys)
│ ├── llm/
│ │ └── groq_summarizer.py # Groq chat summarization via openai/gpt-oss-20b
│ ├── stt/
│ │ ├── base.py # STTProvider interface
│ │ ├── groq_provider.py # transcribe() — plain text
│ │ └── speechmatics_provider.py # transcribe() + diarize() — speaker turns
│ └── static/
│ └── index.html # UI — three tabs, each with recording controls, settings, results
├── recordings/ # synced audio + meta.json + transcript.json per session (gitignored)
└── requirements.txt
Requirements
- Python 3.10+
- No separate ffmpeg install needed — WAV conversion uses PyAV (
avon PyPI), which ships its own bundled codec libraries, including on Windows - A paired reSpeaker Clip device (BLE) for the actual recording — this part can't be exercised without the hardware
Setup
git clone https://github.com/KasunThushara/clip-sdk-python-usage.git && cd clip-sdk-python-usage
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python app/main.py
Then open http://localhost:5000.
For WiFi transport instead of BLE:
python app/main.py --transport wifi --wifi-host 192.168.4.1 --wifi-port 8089
Interface Overview
Transcription
Add your Groq API key. Press the recording button, and once you want to stop, press stop.

Diarization
Add your Speechmatics API key. Press the recording button, and once you want to stop, press stop.

Summary
Add your Groq API key. Press the recording button, and once you want to stop, press stop.

Tech Support & Product Discussion
Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.