Files
..
2026-10-05 16:25:38 +11:00
2026-03-03 22:50:02 +11:00
2026-03-09 20:58:14 +11:00
2026-03-04 23:06:01 +11:00

VideoSync desktop client

Saved preferences

The client remembers your display name, volume, window geometry, chat sidebar visibility and width, highlight panel visibility, and last selected media folder. Preferences are stored locally using Qt's platform settings store. File dialogs for both creating and joining rooms start in the remembered folder. The server address remains fixed. Detached chat opens docked on the next launch.

Active sessions

The desktop workspace has a sidebar for your saved display name, Create room, and Join by code. Creation and code entry open in separate dialogs. Drag a video onto the lobby to prepare a new room. Enter your name to enable room actions.

The lobby checks for listed rooms at startup and every 15 seconds while open. Select a session and click Choose file & join, or double-click it, to use the existing file verification flow. Enter your display name first. Refresh checks immediately; joining by code remains available when discovery fails.

New rooms are listed by default. Clear List room in active sessions before creating a room to keep it out of the list; anyone with its code can still join. Only rooms with connected participants appear. Discovery requires the updated server's /api/rooms endpoint; older clients also create listed rooms by default.

Chat

Chat follows new messages while you are near the bottom. Scroll up to read older messages without losing your place. Incoming messages appear beneath a New messages divider, and Jump to latest shows how many have arrived. Clicking it, or scrolling back to the bottom, resumes following messages.

Ready checks

Send /ready in chat to start a check for everyone in the room. Playback pauses and a ready panel appears above chat. Each person clicks I'm ready; they can change their answer with Not ready. When everyone is connected and ready, the person who started the check can click Start together. They can also cancel the check. Repeating /ready leaves an existing check and its votes intact.

New participants must confirm readiness. Disconnecting clears that person's vote; reconnecting restores the panel so they can confirm again. Ordinary play controls dismiss an active check and continue playback.

Ready checks require the updated server and desktop clients. The web client does not yet have ready-check controls.

Fight-night commands

  • /ko — a large arcade-style K.O. with gold lettering, red outline, and an impact animation.
  • /bell — DING!: Back to your corners.
  • /tap — TAP!: Someone's had enough.
  • /robbery — a reaction plus a 30-second room vote on the decision.

The K.O. appears across the center of the video; other reactions slide into the bottom. Effects clear after 2.2 seconds and keep playback running. A shared 3-second cooldown limits room-wide effects. Reaction events stay in chat history; joining or reconnecting does not replay animations.

Quiet sound effects play automatically with visible reactions. Sounds are original synthesized effects cached locally, with no external downloads. Overlays and sound are suppressed while the player is hidden or minimized. Visible players receive reactions even without keyboard focus, without activating the player window. Reactions also work while the detached chat window is focused.

Robbery votes allow one answer per person, which you can change before the vote closes. The result remains visible after closing and can be dismissed. Joining or reconnecting restores the current vote. Fight commands require the updated server and desktop clients; web clients currently see the chat reaction only.

Tests

With pytest, pytest-qt, and Bun installed, run from this directory:

$env:QT_QPA_PLATFORM = 'offscreen'
.\.venv\Scripts\python.exe -m pytest test_chat.py test_sync_client.py test_ready_server.py test_fight_reactions.py test_fight_server.py -q

The ready-check integration test starts an isolated local server; it does not contact the production service. VLC playback is mocked in the chat UI tests.