block / block/buzz

feat: video support in huddle calls

Open
#6,384 0 comments 2 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.