How codandobrasil/snowspeak works
SnowSpeak is a browser extension for live English-to-Brazilian-Portuguese captions and user-triggered response suggestions during browser calls. The user configures provider keys and starts capture for the invoked tab; the extension captures tab audio and optionally microphone audio, transcribes through Deepgram, translates locally in Chrome, and displays captions. A separate suggestion flow sends conversation context to OpenRouter only on request. The conversation is retained for an in-browser PDF report. The graph reflects the README and sampled wiring; unsampled translation and view internals are represented at their documented module paths.
Main entry points: main.ts Side panel · session-controller.ts Session controller · local-session.ts Local session · session-store.ts Session state
Components 21
User interface
- Side panel
apps/extension/src/sidepanel/main.ts - Caption and controls
apps/extension/src/sidepanel/caption-view.ts - Report model
apps/extension/src/sidepanel/report-model.ts - PDF report page
apps/extension/src/report/main.ts
Extension runtime
- Service worker
apps/extension/src/background/service-worker.ts - Offscreen runtime
apps/extension/src/offscreen/main.ts - Session controller
apps/extension/src/offscreen/session-controller.ts - Audio capture
apps/extension/src/offscreen/capture.ts - Audio framing
apps/extension/src/audio/pcm.ts - Session state
apps/extension/src/offscreen/session-store.ts - Translation queue
apps/extension/src/offscreen/translation-queue.ts - Conversation log
apps/extension/src/offscreen/conversation-log.ts
Session engine
- Local session
packages/engine/src/local-session.ts - Channel pipeline
packages/engine/src/channel-pipeline.ts - Utterance assembly
packages/engine/src/utterance-assembler.ts - Suggestion engine
packages/engine/src/suggest/suggestion-engine.ts
Providers and output
- Deepgram STT
packages/engine/src/stt/deepgram-browser.ts - OpenRouter suggester
packages/engine/src/suggest/openrouter.ts - Chrome translator
apps/extension/src/translation/chrome-translator.ts
Other components
- User
- Chrome browser APIs
Connections 32
- User → Side panel: starts session
- Side panel → Service worker: sends start
- Service worker → Chrome browser APIs: gets tab stream
- Service worker → Offscreen runtime: dispatches start
- Side panel → Chrome browser APIs: stores settings
- Session controller → Audio capture: starts capture
- Audio capture → Chrome browser APIs: captures tab and mic
- Audio capture → Audio framing: frames audio
- Session controller → Local session: creates session
- Session controller → Session state: updates state
- Audio framing → Session controller: provides frames
- Session controller → Local session: forwards audio
- Local session → Channel pipeline: routes channels
- Channel pipeline → Deepgram STT: streams audio
- Channel pipeline → Utterance assembly: assembles segments
- Local session → Suggestion engine: records utterances
- Suggestion engine → OpenRouter suggester: streams requested suggestion
- Local session → Session controller: emits engine events
- Offscreen runtime → Translation queue: handles engine events
- Translation queue → Chrome translator: translates locally
- Chrome translator → Chrome browser APIs: uses translation API
- Translation queue → Session state: updates captions
- Offscreen runtime → Session state: broadcasts state
- Session state → Side panel: provides session state
- Session state → Conversation log: records conversation
- Side panel → Report model: builds report
- Side panel → Conversation log: requests history
- Side panel → Chrome browser APIs: opens report page
- Report model → Chrome browser APIs: stores report data
- PDF report page → Chrome browser APIs: prints to PDF
- User → PDF report page: prints report
- Side panel → Caption and controls: renders captions