Repository navigation
Flow Watch Party
Tobias Vorwachs edited this page Oct 26, 2026
·
1 revision
Part of the Plugin data protocol. Packet: Packet-mumcord-watch.
A YouTube watch party in one channel. Every participant plays the video in their own player; only invitations, playback commands and the shared playlist travel as plugin data.
sequenceDiagram
participant A as Client A (starter)
participant S as Mumble server
participant B as Client B (same channel)
participant C as Client C (enters later)
A->>S: start (video), paused
S-->>B: relayed, B sees an invitation
B->>S: join (after clicking Join)
S-->>A: relayed
A->>S: cmd play / pause / seek
S-->>B: relayed, B plays the same position
B->>S: pl add (playlist entry)
S-->>A: relayed (edits bundled, at most 1 per second)
A->>S: next (from, id, video)
S-->>B: relayed
C->>S: enters the channel
Note over A,C: Exactly one participant answers (host, else lowest session)
A->>S: state (video, playing, position, members, playlist cursor)
S-->>C: relayed, C can click Join
-
Start. A sends
startwith a video id to every Mumcord user in the channel who announcedwatch-party. The party starts paused. B's client shows an invitation; nobody joins automatically. -
Join. B clicks "Join" and sends
join. From then on B's commands and playlist edits are accepted, and B accepts those of other members. -
Playback. Any member sends
cmdwithkindplay,pauseorseekandposition_ms. Receivers set their own player to that position. -
Playlist. Members add (
add), remove (rm) and move (mv) entries withpl. Entries are ordered by sort keyk; concurrent moves are settled by the higher Lamport clockc. Edits are collected and sent at most once per second, split into several messages when they would exceed 1000 bytes. The list holds at most 50 entries. -
Next video. When a video ends or someone skips, the client sends
nextwith the entry it left (from), the entry it moves to (id), thevideo, andskip. -
Late joiners. When C enters the channel, exactly one participant answers with
state: the host while they are in the party, otherwise the participant with the lowest session number. Every client computes the same answerer, so there is one answer, not many. C sees the current video and position and can click "Join". -
Leaving.
leave, or leaving the channel or server, removes the member. The party ends when nobody is left.
- If two parties start at the same moment, the one whose starter has the lower session number wins everywhere.
- Messages from people who are not in the receiver's own channel are ignored; so are commands and edits from people who have not joined.
- Session lists such as
membersare checked against the people in the channel; at most 32 participants are tracked. - Video ids must be exactly 11 characters of
A-Z,a-z,0-9,-and_.
| Situation | Result |
|---|---|
| Version 1 client | Drops pl and next (unknown t) and ignores the new state fields; basic playback still works. |
| Invalid video id | Message dropped. |
| Playlist already has 50 entries | Further adds are ignored. |
| Removed entry added or moved later | Ignored (a removed id stays removed). |
| Lost message | No acknowledgement. A new state from a late joiner or the next command resynchronises. |
| Sender not in channel / not joined | Ignored. |
Mumcord is licensed under the AGPL-3.0 (versions up to 0.1.1: MIT) · Source code · Website · Website source