Setu documentation
Setu is a room two people join to talk across a language barrier. You speak; a beat later the other person hears it in their language, as text and voice — and the same back to you. This page is the manual, the walkthrough, and the technical shape underneath.
Getting in
Setu is a private beta gated by email. There is no password and no account to create.
- Open setu.smritiraj.online.
- Enter your email address. Setu emails you a one-time PIN.
- Type the PIN. You're in — a signed session keeps you in on that device.
Joining a room
On the join screen, set three things once:
- Your name — what the other person sees.
- You speak / you hear — the language you talk in, and the one you want back.
- Room code — any word. Both people type the same code to land in the same room.
Tap Join once — it saves your choices and starts your microphone. Share the room with the Invite link, WhatsApp button, or QR code on the waiting card. You can test your mic there while you wait.
Talking & typing
- Speak — just talk. In Auto mode your voice is detected automatically; in Push-to-talk hold the mic button (or Space) while you speak.
- Type — write a line and press Enter, or tap a quick phrase (Hello, Thank you, Please repeat…). Typed lines are translated and spoken too.
- Per-message actions — replay the spoken audio, copy, show the original, rate the translation, or delete a message for both of you (with an undo window).
- Shortcuts — M mute/unmute, R replay the partner's last message, Space push-to-talk, Enter send. Disabled while you're typing.
Knowing the other person
The partner card shows their live status so you're never talking into the void:
| Status | Means |
|---|---|
| Online | In the room, mic open, not speaking right now. |
| Speaking | Talking — their translation is on the way. |
| Typing… | Writing a message. |
| Muted | Their mic is off. |
| Reconnecting | Dropped, but within the grace window — history and timer are kept. |
| Left | Gone. You'll be asked whether to wait or leave. |
Screen readers hear these changes announced; the status is never shown by colour alone.
Turning on video
Video is optional and off by default — the call works fully on audio alone. When you want to see each other:
- Tap 📹 Video. Your partner gets a prompt to Accept or Decline — nobody's camera turns on without their consent.
- On accept, you see each other's live camera (your own small self-view sits in the corner) while the translated audio and captions keep flowing exactly as before.
- Use Camera on/off to pause your video (your partner sees a “camera off” note), and End video to stop — the audio call carries on.
The video travels directly between the two browsers (peer-to-peer); the bridge only passes the initial handshake, so video adds no load to the translation service and isn't recorded. Faces are live while the translated voice arrives a beat later — that's expected. On some strict-firewall or mobile networks a direct connection can't be made; a relay for those cases is on the roadmap.
Ending a call
- Leave asks you to confirm first — no accidental silent disconnect.
- If your partner leaves, you choose to wait (in case they rejoin) or leave and see your summary.
- The end screen shows the call duration and message count, and lets you download the transcript, rejoin, or start a new call.
A day in the life
A Hindi-speaking patient and a Telugu-speaking pharmacist. Both open Setu on
their phones, sign in by email PIN, and type the room code clinic. The patient
picks Hindi→Hindi, the pharmacist Telugu→Telugu. The patient speaks: "मुझे बुखार की दवा चाहिए।"
A second and a half later the pharmacist hears and reads it in Telugu (translated Hindi→English→Telugu
behind the scenes). She replies in Telugu; the patient hears Hindi. Either can tap replay if a line
was missed, or type a dosage to be sure. When they're done, the patient taps Leave, confirms, and
downloads the transcript for the label — nothing was recorded on Setu's side.
Languages
Six languages — any pair, both directions. English↔Indic is a direct translation; a non-English pair (e.g. Hindi↔Telugu) routes through English behind the scenes, a beat slower. Each translates as text and speaks aloud:
- English
- हिन्दी — Hindi
- বাংলা — Bengali
- தமிழ் — Tamil
- తెలుగు — Telugu
- मराठी — Marathi
Troubleshooting
| Symptom | Fix |
|---|---|
| Mic not picked up | Allow microphone in your browser's site settings and reload. On a phone, tap the screen once so audio can start. |
| You hear an echo of yourself | Use earphones — it stops the other person's voice being caught by your mic. Setu shows this tip on first playback. |
| Both people are "smriti" | Names can repeat safely — Setu pairs devices by a stable id, not by name. |
| Connection dropped | Setu reconnects on its own and keeps your history and timer. Or use “Audio problem?” → Reconnect. |
| Noisy room | Settings → Noise handling → Office, or switch to Push-to-talk. |
Technical architecture
Two surfaces. The front (room UI + access gate) is static and cloud-hosted. The bridge runs the translation pipeline — one pipeline per person who speaks.
Per-turn pipeline
- Voice detection — Silero VAD finds the end of a phrase.
- Speech → text — Gladia streaming STT (Groq
whisper-large-v3-turbofallback), code-switching on for Hinglish. - Translate — IndicTrans2 locally; OpenRouter LLM for heavy code-mix.
- Text → voice — Piper TTS, all six languages.
- Peer delivery — the other person hears the voice and reads the text; delivery bypasses their own busy pipeline.
Access
Passwordless email → one-time PIN (Resend), a signed session cookie, and a short-lived WebSocket entry ticket so only signed-in people reach the bridge. Per-account daily usage caps.
Channel reference
Two channels connect a browser to the bridge:
| Channel | Carries |
|---|---|
wss://…/live (WebSocket) | Realtime audio in and out (Protobuf frames). |
POST /room-msg (HTTP, ticket-authed) | Control & presence, fanned to the peer. |
Control actions on /room-msg include:
| Action | Effect |
|---|---|
say | Send a typed line to be translated + spoken to the peer. |
typing / mic / lang | Presence — typing, mute state, language change. |
replay / rate | Re-speak a turn; rate a translation. |
delete / ask-repeat | Remove a message for both; ask the peer to repeat. |
conn | Leaving / reconnecting signal (drives the partner's status & grace window). |
signal | Relays the WebRTC video handshake (opaque, ≤16 KB) to the peer — the only video traffic that touches the bridge; the video itself is peer-to-peer. |
Privacy
- Speech is turned into text, used once for translation, and dropped.
- No call is recorded; no transcript is stored on the server.
- The transcript you can download is generated in your browser from what's on screen.
- Strictly two participants — there is no group mode and no third listener.