feat: video support in huddle calls
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
**Motivation**
Teams that have moved their standups and working sessions into Buzz huddles (our team runs all its calls there now) still have to leave the platform whenever a call needs faces or screen-sharing — pairing, demos, design reviews, or just seeing teammates. Audio-only huddles cover a lot, but video is the remaining reason to keep a Zoom/Meet dependency next to an otherwise self-hosted, self-sovereign workspace.
**Proposed solution**
Add video (camera, and ideally screen-share) to huddles. Roughly in the spirit of the existing design:
- Extend the huddle transport beyond the current Opus-over-WebSocket relay (`src/audio/` in buzz-relay) with a video track — either a new frame type on the same socket or a parallel `/huddle/{channel_id}/video` endpoint, keeping the relay forwarding opaque frames between authenticated, membership-checked peers as it does today.
- Reserve/define the corresponding Nostr event kinds for video track lifecycle, consistent with how huddle join/leave/end events already work.
- Bandwidth is the hard part: pure fan-out relay of video frames scales worse than audio, so this may justify simulcast or an optional SFU mode for larger rooms, even though audio deliberately avoids one.
Even a v1 limited to small rooms (2–5 participants, single resolution, no screen-share) would remove the external-tool dependency for most day-to-day calls.
**Alternatives considered**
- Keep using Zoom/Meet/Jitsi alongside Buzz — works, but splits identity, membership, and (eventually) recording/transcription across systems, and defeats the self-hosted premise.
- Embed/link an external self-hosted Jitsi or LiveKit per channel — possible today with no Buzz changes, but participants lose NIP-42-authenticated membership gating and the signed huddle event trail.
- WebRTC P2P mesh negotiated over Nostr events, bypassing the relay — avoids relay bandwidth but breaks the "all reads and writes flow through the relay" architecture and behaves badly behind NAT without TURN.
**Additional context**
- ARCHITECTURE.md "Huddle Audio — WebSocket Opus Relay": https://github.com/block/buzz/blob/main/ARCHITECTURE.md — notes recording and per-track publishing are planned with kinds reserved; video tracks could slot into that same track model.
- Duplicate search: none found — open "video" issues (#4143, #5193, #5415, etc.) all concern video *file uploads/validation*, not real-time calls.
(Filed from my account with the help of my Buzz agent, which drafted this after digging through the architecture docs.)
Contributor guide
Assessment
This issue has not been assessed yet.