Real-time Québécois French to English speech transcriber with speaker diarization.
Browser mic audio streams over WebSocket to a Rust backend, which relays it to Deepgram for transcription (with diarization and word timestamps), translates each finalized segment via DeepL, and pushes ordered, timestamped segments back to the browser.
Copy .env.example to .env and fill in your API keys:
cp .env.example .env
You need:
cargo run
Then open http://localhost:3000 in your browser.
Press Start, allow mic access, and speak. Transcription appears live. Press Stop when done, then Export to download JSON and SRT files.
| Variable | Description |
|---|---|
DEEPGRAM_API_KEY |
Deepgram API key |
DEEPL_API_KEY |
DeepL API key |
PORT |
Server port (default: 3000) |
Browser mic
└─ AudioWorklet (PCM 16kHz mono int16)
└─ WebSocket /ws
└─ Rust (axum)
└─ WebSocket → Deepgram (nova-3, diarize, FR)
└─ DeepL REST (FR→EN per finalized segment)
└─ Ordered buffer (BTreeMap by start time)
└─ WebSocket → Browser (JSON segments)
Phase 1 complete: audio pipeline + Deepgram transcription wired end-to-end. FR text echoed as EN placeholder. Phase 2: DeepL translation + ordered buffer. Phase 3: UI polish (speaker renaming, export, Québécois keyterms).