Outil web / Synchronisation

SelixyWatch

Vidéos et musique regardées ensemble, à la même seconde

JavaScriptPythonPostgreSQLSSEPodman

SelixyWatch permet de regarder des vidéos et d’écouter de la musique à plusieurs, à la même seconde, chacun chez soi.

Playlists et rooms

Le site a deux pages. Les playlists rangent des médias dans des dossiers imbriqués, avec un rangement par glisser-déposer. Un même média peut être dans plusieurs playlists. On y importe des fichiers, on cherche sur YouTube, ou on colle un lien YouTube ou Spotify : le serveur lit les titres et les durées, et retrouve les morceaux Spotify sur YouTube.

La room joue la playlist dans laquelle on est entré. Tous ceux qui y sont voient et entendent la même chose. Elle a un lecteur avec raccourcis clavier, un mode cinéma, une file « À suivre » avec boucle et aléatoire partagés, un chat et des réactions emoji qui flottent sur la vidéo.

Comment la synchro marche

Le serveur garde l’état de chaque room (média, position, lecture ou pause) et le diffuse en SSE. Chaque navigateur mesure son écart avec l’horloge du serveur, calcule la position cible et corrige toute dérive de plus de 0,4 s. Quand un média se termine, la room passe au suivant.

Comptes et partage

Les comptes se créent avec un pseudo et un mot de passe, ou en anonyme avec un compte éphémère. Un dossier ou une playlist se partage par lien d’invitation, en lecture ou en édition. Sur téléphone, le site s’utilise en plein écran une fois ajouté à l’écran d’accueil.

Technique

L’interface est un site statique en modules JavaScript, sans compilation. Une coque garde les vues chargées, si bien que la lecture continue pendant qu’on parcourt les playlists. L’API est un petit serveur Python avec PostgreSQL, dans un pod Podman derrière nginx.

Web tool / Synchronization

SelixyWatch

Videos and music watched together, to the same second

JavaScriptPythonPostgreSQLSSEPodman

SelixyWatch lets several people watch videos and listen to music at the same second, each from their own place.

Playlists and rooms

The site has two pages. Playlists organize media in nested folders, with drag-and-drop sorting. The same media can be in several playlists. You can import files, search YouTube, or paste a YouTube or Spotify link: the server reads titles and durations, and finds Spotify tracks on YouTube.

The room plays the playlist you entered. Everyone in it sees and hears the same thing. It has a player with keyboard shortcuts, a cinema mode, an “Up next” queue with shared loop and shuffle, a chat and emoji reactions that float over the video.

How the sync works

The server keeps each room’s state (media, position, playing or paused) and broadcasts it over SSE. Each browser measures its offset from the server clock, computes the target position and corrects any drift above 0.4 s. When a media ends, the room moves on to the next one.

Accounts and sharing

Accounts are created with a username and password, or anonymously with an ephemeral account. A folder or playlist is shared through an invitation link, as viewer or editor. On a phone, the site runs full screen once added to the home screen.

Technical side

The interface is a static site in JavaScript modules, with no build step. A shell keeps the views loaded, so playback continues while you browse playlists. The API is a small Python server with PostgreSQL, in a Podman pod behind nginx.