● Peer-to-peer · Tether QVAC

Babel Room

Live captions across languages, with no server. Everyone speaks their own language, and everyone reads everyone else in theirs. Speech recognition and translation run on each person's own device; only caption text crosses the network, end-to-end encrypted.

Babel Room runs on your devices rather than in this page: QVAC runs Whisper and the translation models locally, and the room is a direct Hyperswarm connection between you and the others.
Babel Room's web UI in Italian: Spanish lines arrive translated es → en → it, English lines en → it

How it works

Your voice stays with you

Whisper (with voice activity detection) turns speech into text on the speaker's device. Audio never leaves it.

Each listener translates

Bergamot translates into your language on your device, through English when a pair has no direct model.

No server

The room code becomes a Hyperswarm topic. Peers find each other on the DHT, hole-punch NATs and talk over encrypted streams.

Phones, laptops, terminals

The iPhone/Android app, the web UI and the CLI run the same room code, so they all share rooms.

An iPhone and a laptop in one room

The iPhone app in English: a Spanish speaker's lines translated on the phone, and the hold-to-talk button
The web UI in Spanish in the same room: the iPhone user's English line translated en → es
Tested on an iPhone 13 Pro Max and a Mac: each side translated the other on its own device, and hold-to-talk was transcribed by Whisper on the iPhone.

Three languages, one room

Ana's view in Spanish
Ben's view in English
Spanish, English and Italian over the public Hyperswarm network with real QVAC models: every peer had its translation models ready 12 s after joining.

Run it

# the web UI, one per person (Node.js 22+)
git clone https://github.com/lopeselio/qvac-babel-room
cd qvac-babel-room && npm install && npm run build:ui
npm start                          # http://127.0.0.1:4400
node bin/babel-room.js ui --port 4401   # a second person on the same computer

# or the CLI, from the same clone
node bin/babel-room.js new
node bin/babel-room.js join <code> --lang es --mic

The phone app is in mobile/: the room runs in a Bare worklet, the way Holepunch's own apps run Hyperswarm.