Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Realtime Captions

CI License: MIT

Browser-based live captions and translation for meetings, presentations, and multilingual accessibility.

Run npm --prefix frontend run dev and open http://localhost:5173/?demo=1 for a synthetic demo using the production React interface. It requests no microphone permission and calls no transcription or translation provider.

Why it is interesting

  • streams tab, screen, or microphone audio as mono PCM over WebSocket;
  • transcribes with Deepgram and translates with Google Cloud;
  • merges interim/final captions with speaker diarization;
  • protects organizer operations separately from participant access;
  • exports caption logs while documenting their privacy implications;
  • keeps provider credentials and meeting passwords out of URLs and bundles.

Architecture

Browser audio → WebSocket → Deepgram → translation → live overlay
                         ↘ SQLite session/caption history

See architecture and privacy for boundaries and trade-offs.

Local setup

Requires Node.js 20+ and provider credentials for the real pipeline.

npm ci
npm --prefix backend ci
npm --prefix frontend ci
cp backend/.env.example backend/.env
npm run dev

Required backend values:

ADMIN_PASSWORD=replace_with_a_long_random_password
DEEPGRAM_API_KEY=your_deepgram_api_key
ALLOWED_ORIGIN=http://localhost:5173

Configure either Google Application Default Credentials plus TRANSLATE_PROJECT_ID, or TRANSLATE_API_KEY. Never commit .env or service-account JSON files.

  • participant UI: http://localhost:5173
  • organizer UI: http://localhost:5173/admin
  • backend: http://localhost:8080

Verification

npm test
npm run build
npm run audit:public
npm audit --omit=dev --audit-level=high
npm --prefix backend audit --omit=dev --audit-level=high

Tests cover password hashing and fail-closed organizer endpoints without calling external providers. CI adds full-history Gitleaks scanning.

Production notes

Use TLS (https/wss), a restricted ALLOWED_ORIGIN, secret injection, and explicit consent/retention rules for transcripts. SQLite and the active-user counter target one application instance; adopt shared storage only when horizontal scaling is required.

License

MIT

About

Real-time captions in the browser: captures tab audio, transcribes (Deepgram), and translates (Google Cloud), showing an overlay for multilingual accessibility.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages