Calls
Every room is call-capable. Click the phone (audio) or camera (video) icon in the chat header to start one. Other room members get a ringing notification with Answer / Reject buttons.
Stack#
ScaiWave uses LiveKit as the SFU. Each call gets its own room on the LiveKit server, with a one-to-one mapping between the ScaiWave room and the LiveKit call session. Tokens are short-lived; ScaiWave mints fresh ones per join.
Features#
- Audio and video with adaptive bitrate.
- Screen share — any participant can share at any time. The client picks a single source (display, window, tab) per share session.
- Picture-in-Picture (PiP) — pop the call into a floating window that stays on top while you keep working in ScaiWave. Chromium-only (uses the Document Picture-in-Picture API); falls back gracefully elsewhere.
- Recording — admins can start a recording on any active call.
Recordings land in MinIO/S3 and show up as media attachments in the
room. Start with
POST /v1/calls/{call_id}/recording/start. - Live transcription — recordings are transcribed asynchronously via ScaiGrid's audio model and posted as a transcript message in the room.
Permissions#
- Start a call: every room member.
- Start a recording: requires
power_level >= 50(default). - End a call for everyone: the call initiator or any member with
power_level >= 50.
Calls and federation#
Calls work across federated rooms — the LiveKit server is your local one, and federated peers receive call invites the same way they receive messages. Token minting happens locally; the foreign participant gets a LiveKit token signed by your server.
Where to go next#
- Tutorial: (none yet — calls are click-and-go in the UI; if you need to script them, see the Calls API reference).
- API: Calls.