rox

Le lecteur d'aujourd'hui, pas celui d'hier.

Un lecteur de musique pour ceux dont la bibliothèque locale est grande et taguée avec soin. Les panneaux, tu les composes toi-même ; un thème, c'est un seul fichier, à donner à qui tu veux. Natif sur Linux, macOS et Windows.

  • 0,3 s du lancement à la fenêtre
  • 134 MB de mémoire avec 50 000 pistes chargées
  • AGPL-3.0 libre et open source

Une fenêtre en moins d'une seconde

rox tient dans un seul binaire et démarre avant que tu n'aies lâché la souris.

Démarrage, mémoire et CPU au repos de sept lecteurs de musique sur une bibliothèque de 50 000 pistes
LecteurFenêtre affichéeEntièrement chargéMémoireCPU au repos
rox0,3 s2,3 s 134 MB 0,5 %
Elisa0,7 sne se stabilise jamais 206 MB 74 %
fooyin0,3 s18 s 364 MB 0 %
Quod Libet-19 s 384 MB 0,2 %
Strawberry0,3 s32 s 434 MB 0,8 %
Museeks-3 s 436 MB 0 %
Tauon8,7 s12 s 2,8 GB 0 %

J'ai mesuré tout cela moi-même, sur une seule machine (Ryzen 9 5950X, Linux/Wayland), avec la même bibliothèque de 50 000 pistes sur un SSD externe, chaque lecteur passé dans le même banc d'essai avec sa bibliothèque chargée. La mémoire est le PSS sur l'ensemble de l'arbre de processus. « Chargé » signifie que le CPU s'est stabilisé après le lancement ; le repos, c'est un lecteur en pause avec la fenêtre visible. DeaDBeeF se serait posé à 44 Mo et aurait gagné sur la mémoire, mais il n'a jamais eu de ligne : son analyseur MP3 part en segfault en plein import de cette bibliothèque, à chaque tentative. rox indexe les 50 000 pistes, y compris les fichiers tronqués sur lesquels il bute.

Bibliothèque

  • Une bibliothèque qui tient la charge

    Un scanner parallèle lit les tags complets, les durées réelles et le codec propre à chaque fichier, pas un survol d'en-tête. La surveillance des dossiers survit aux renommages, et rien ne disparaît en silence.

    Ce qui casse à 50 000 pistes
  • Un tagage digne de confiance

    Un éditeur complet, écritures atomiques, modifications par lots et rechercher-remplacer. Les notes vivent dans les fichiers eux-mêmes via FMPS et POPM. Recherche via MusicBrainz, iTunes et Deezer.

    Face à Mp3tag
  • Les rips CUE se lisent comme des pistes

    Un FLAC couvrant tout un disque, à côté de sa feuille cue, s'indexe en vraies lignes. Chaque segment se navigue, se scrobble, se trie et enchaîne sans blanc sur le suivant, exactement comme un fichier.

    Comment fonctionnent les segments
Equalizer Flat
C1C2C3C4C5C6C7C8C9

Lecture

  • Lecture sans blanc

    Un seul flux, avec lecture aléatoire, répétition, lire ensuite et répétition A-B. Les signets et les repères de session, eux éphémères, restent sur la barre de position. Les touches multimédias et la lecture en cours fonctionnent sur les trois plateformes.

  • Dix bandes et du bit-perfect

    Un égaliseur dans sa propre fenêtre, avec des préréglages que tu enregistres et la base de casques AutoEq dedans. Le fondu enchaîné laisse tranquilles les enchaînements voulus d'un album, et la sortie exclusive dit ce que le matériel a accepté.

    ReplayGain et bit-perfect
  • Trié à l'oreille

    rox décrit tes pistes à partir de leur propre audio, tempo compris, et ordonne la suite par ressemblance. Tout tourne sur ta machine, sur tes fichiers, sans service dans la boucle.

Apparence

  • Des panneaux que tu composes

    Une quarantaine de types de panneaux, de la bibliothèque et la file d'attente aux grilles d'artistes et aux VU-mètres. Duplique-en un avec sa configuration ou détache-le dans une fenêtre. Les pochettes se légendent avec l'année, le genre ou la dernière écoute.

    Face à Foobar2000
  • Des thèmes qui tiennent dans un fichier

    Un espace de travail est un fichier portant disposition, palette, apparence et shaders. Les palettes peuvent se teinter d'après la pochette en cours et basculer clair ou sombre avec l'image.

    Les huit livrés
  • Des visuels qui écoutent

    Écris un shader WGSL sur un panneau ou sur toute la fenêtre, ou fais tourner des préréglages Milkdrop via projectM. Des signaux nommés issus du spectre circulent sur les entrées des shaders.

    Shaders et signaux

Au quotidien

  • Paroles et historique

    Synchronisées ou simples, depuis des fichiers annexes, des tags ou lrclib, avec un éditeur qui réécrit là où il a lu. Un journal d'écoute alimente le panneau d'historique et les statistiques, et les scrobbles Last.fm s'importent avec leurs propres dates.

  • Des playlists qui survivent

    Favoris, réorganisation par glisser, M3U, PLS et XSPF dans les deux sens, et playlists intelligentes qui relancent une requête enregistrée au lieu de figer un instantané. Les entrées survivent au départ et au retour d'un fichier.

  • Un binaire, pas d'installeur

    Une archive tar, un AppImage, un Flatpak, un DMG ou un zip, plus l'AUR et un flake Nix. Le mode portable garde la bibliothèque et les réglages dans un dossier à côté de l'exécutable.

    Le télécharger

Sources

Au-delà de la fenêtre

Une radio qui se rembobine

Colle l'URL d'un flux ou choisis une station dans l'annuaire radio-browser. Une station se met en file et se scrobble comme un morceau, et un tampon direct te laisse mettre l'émission en pause et la rembobiner.

Ton serveur dans la bibliothèque

Un serveur Subsonic ou OpenSubsonic synchronise son catalogue ici, et les lignes se parcourent, se cherchent et se lisent comme des fichiers. Les flux demandent l'original, donc le sans-blanc et ReplayGain tiennent toujours.

Des morceaux pris à l'antenne

La capture écrit les morceaux entiers qu'une station passe dans un dossier à toi, au format du flux, tagués, avec la pochette à côté. Désactivée tant que tu ne l'actives pas.

Un socket, pas un serveur

JSON-RPC sur un socket local : transport, file d'attente, recherche et événements poussés. L'auth tient aux permissions de fichiers, rien n'écoute sur un port.

Ce que tu peux bâtir dessus

Le lecteur comme outils MCP

Un proxy à côté de l'application met le socket sur MCP : un client IA peut demander ce qui joue ou piloter la platine. Désactivé par défaut, revérifié à chaque appel.

Diffuse vers Icecast

Un client source pousse ce que rox joue en MP3 à ton point de montage. En sortie seulement : la face réseau est à Icecast, un serveur mort n'arrête jamais la lecture.

Plugins

Et pour tout le reste

Ta bibliothèque couvre ce qui est sur ton disque. Un plugin apporte de la musique venue d'ailleurs, comme un catalogue sur le web ou un serveur que tu fais tourner. rox la parcourt, la cherche et la lit dans les mêmes panneaux et la même file d'attente que tes propres fichiers.

  1. Dépose un dossier

    Un plugin est un dossier contenant un petit manifeste et un programme. Active les plugins dans les réglages, appuie sur Afficher le dossier et copie-le dedans.

  2. Active-le

    L'activer, c'est l'approuver. Une carte dit ce que fait le plugin et ce qu'il exécute, et une modification de l'un de ses fichiers le désactive à nouveau.

  3. Parcours-le

    Il s'ouvre dans un panneau Sources externes avec la page d'accueil propre à la source, des étagères de pochettes, une recherche et des colonnes triables, dessiné dans ton thème.

  4. Lis-le, garde-le, ou lance une radio

    Ses pistes se mettent en file, se lisent sans blanc et vont dans les playlists comme les tiennes. Garde un album et il rejoint ta bibliothèque. Lance une radio et le service choisit la suite.

Le plugin d'exemple Internet Archive dans un panneau Sources externes : un avis en haut, des lignes à parcourir, des étagères de pochettes de sorties, et des colonnes de téléchargements et d'année.
  1. Son propre panneau, ancré et dans le thème comme le reste
  2. Des colonnes que le service connaît, triées d'un clic
  3. Une ligne venue du plugin, avec un lien
  4. Des étagères de pochettes qui défilent latéralement

L'exemple Internet Archive, parcourant des sorties Creative Commons de la collection de netlabels de l'Archive. Il est dans le dépôt de rox, prêt à copier.

À toi d'en faire quelque chose

rox est livré avec huit espaces de travail, à un clic dans la fenêtre d'accueil. Chacun est un fichier unique portant la disposition, la palette et les shaders qu'il utilise : modifiable, cassable, transmissible. Les voir tous.