Retour au bureau

Dans le bureau : le tourne-disque

OsaParty

La même chanson, à la seconde près.

OsaParty crée des salons d'écoute partagée. L'hôte diffuse depuis son Mac, les invités rejoignent avec un code ou un QR code et suivent la même musique en direct, avec les paroles synchronisées, un chat, des réactions, un blind test et un récap de fin de soirée.

Ce que c'est
App web temps réel · Next.js + Socket.io
Rôle
Développé à deux, avec pirrokin
Période
1 → 9 octobre 2026
Statut
En ligne
Stack
Next.jsReactSocket.ioPythonAppleScriptiTunes Search APILRCLIB
22commits
2 247lignes de code
13types d'événements temps réel
6chiffres pour rejoindre un salon

01Le point de départ

« Apple réserve son API musicale aux comptes développeur payants. On a contourné le problème par le Mac. »

L'idée : écouter de la musique ensemble à distance, comme si on était dans la même pièce. Le problème : MusicKit, l'API web d'Apple Music, demande un compte développeur payant.

La solution ressemble au « Rich Presence » de Discord. Un petit pont tourne sur le Mac de l'hôte : il lit l'état de l'app Musique (titre, position, file d'attente) et l'envoie au serveur. Les invités n'ont besoin que d'un navigateur. Depuis, OsaNotch peut jouer ce rôle de pont nativement.

02En images

À quoi ça ressemble.

osaparty.osalabs.fr/room
Un salon OsaParty prêt, en attente d'un Mac
Un salon tout juste créé : la mascotte attend qu'un Mac diffuse.
osaparty.osalabs.fr
Page d'accueil d'OsaParty
Le nouvel accueil : un pseudo, puis créer un salon ou rejoindre avec un code.
OsaParty sur mobile
Pensé pour rejoindre depuis un téléphone.

03Comment ça marche

Sous le capot.

Le serveur ne fait que relayer. Toute l'intelligence musicale vient du Mac de l'hôte.

AppleScriptbridge-state Apple Music sur le Mac de l'hôte Pont Python ou OsaNotch Serveur Socket.io Invité navigateur Invité navigateur Invité mobile iTunes · LRCLIB pochettes, paroles
  1. Un salon façon Kahoot

    L'hôte crée un salon : un code à 6 chiffres et un QR code s'affichent à l'écran.

  2. Le pont lit l'app Musique

    Un script Python pilote Apple Music en AppleScript (ou OsaNotch le fait nativement) et envoie l'état de lecture au serveur.

  3. Socket.io relaie à tout le monde

    Le serveur diffuse le morceau, la position et la file d'attente à tous les invités du salon.

  4. Le navigateur habille le tout

    Pochette en 600 × 600 via l'API iTunes, paroles synchronisées via LRCLIB, fond teinté par la couleur dominante de la pochette.

  5. La soirée prend vie

    Chat, réactions, vote pour passer un titre, blind test, contrôles de l'hôte, et un « Wrapped » à la fin.

✦À toi de jouer

Teste la synchro

L'hôte diffuse, trois invités écoutent avec des connexions différentes. Coupe la synchronisation pour voir les écarts apparaître, et envoie des réactions.

!Les défis

Ce qui a résisté.

Une API Apple payante

ProblèmeMusicKit sur le web demande un compte développeur Apple payant.

SolutionUn pont local sur le Mac de l'hôte, en Python et AppleScript, qui lit directement l'app Musique.

La file d'attente invisible

ProblèmeApple n'expose pas la fonction « Lire ensuite » aux scripts.

SolutionLire la playlist en cours : l'hôte lance sa musique depuis une playlist, et le site affiche les 10 titres suivants.

Des paroles au bon moment

ProblèmeChaque invité reçoit l'état avec un délai différent.

SolutionL'hôte envoie la position et la durée du morceau, et chaque navigateur cale les paroles LRCLIB sur cette position.

Un serveur modeste

ProblèmeL'optimisation d'images de Next.js coûtait trop cher sur un petit VPS.

SolutionOptimisation désactivée, pochettes servies directement par Apple en haute définition.

⏱Journal de bord

Comment c'est arrivé.

  1. Première version

    Le site et le Mac Bridge fonctionnent ensemble.

  2. Installable

    Le site devient une PWA, utilisable comme un petit widget.

  3. App de barre des menus

    Le pont devient une vraie app macOS.

  4. Grosse mise à jour

    Chat, paroles, vote pour passer, volume et support de Spotify.

  5. Look Apple Music

    Paroles synchronisées et fonds dynamiques.

  6. Blind test & Wrapped

    Un mode quiz et un récap de soirée.

  7. Contrôles de l'hôte

    Verrouiller le salon, exclure, exporter la playlist.

  8. ListenParty devient OsaParty

    Le projet rejoint l'écosystème OsaLabs.

  9. Salon refait

    Nouvelle interface, et OsaNotch comme pont natif.

  10. Nouvel accueil

    Page de création refaite avec la mascotte, comme OsaDrop et OsaCast.

→Et ensuite

La suite du projet.

Projet mené avec pirrokin.

  • Un mode « DJ tournant » où chaque invité ajoute un titre à son tour.
  • Un historique des soirées pour retrouver ce qu'on a écouté.

Astuce : les flèches ← → de ton clavier passent d'un projet à l'autre.