Bobine V3.0.4
La version 3.0.4 apporte une évolution majeure à l'ergonomie, au confort de pilotage et à la robustesse générale de Bobine sur l'ensemble des systèmes d'exploitation. Elle introduit le support universel des manettes de jeu (HTML5 Gamepad API), des télécommandes, de la souris et du tactile sur toutes les interfaces (/cinema, /grid, /kiosk, /radio), intègre le défilement horizontal fluide des titres longs (animation Marquee) avec imposition stricte des dimensions des miniatures, clarifie le périmètre câblé de /grid, généralise la désinstallation automatique en 1 clic sur tous les OS, et résout définitivement les saccades, boucles de lecture et décalages temporels.
Téléchargement des Binaires Officiels (Version 3.0.4)
| Plateforme & Environnement | Format | Architecture | Téléchargement Direct | Profil & Fonctionnalités Clés |
|---|---|---|---|---|
.apk(Paquet natif) | ARM64 (arm64-v8a) | Télécharger Bobine-3.0.4.apk | Tablettes Tactiles & Régie Studio Mobile • Régie autonome complète : remplace tout PC encombrant dans la salle • Double affichage : pupitre coach tactile ( /grid) + diffusion TV grand écran (/cinema)• Prise en charge des manettes Bluetooth/USB et télécommandes relayées vers la TV • Désinstallation native intégrée déclenchée depuis l'interface d'administration • 100% hors-ligne, fiable même en sous-sol sans Wi-Fi ni réseau mobile | |
.exe(Installeur) | x86-64 | Télécharger Bobine-Setup-3.0.4.exe | PC de Bureau & Ordinateurs Portables Windows • Désinstallation automatique en 1 clic via le désinstalleur officiel Inno Setup • Démarrage discret près de l'horloge (icône de notification en arrière-plan) • Mode capot fermé (clamshell) : branchez le portable en HDMI à la télé sans mise en veille • Contrôle universel par manette (Xbox/PlayStation), télécommande ou smartphone | |
.deb(Paquet & Dépôt) | x86-64 (amd64) | Dépôt APT apt.bobine.fit bobine_3.0.4_amd64.deb | Postes Linux de Bureau & PC Reconditionnés • Désinstallation automatique intégrée avec dialogue d'élévation graphique Polkit • Relance automatique des services utilisateur et système post-installation • Mises à jour fluides en 1 clic via le dépôt officiel apt.bobine.fit ou Logithèque Ubuntu• Pilotage complet à la manette ou à la télécommande sans clavier physique | |
.dmg(Image disque) | Apple Silicon (arm64) | Télécharger Bobine-3.0.4.dmg | MacBook, Mac mini & iMac (Apple Silicon) • Désinstallation propre : purge du bundle /Applications/Bobine.app et des LaunchAgents• Expérience Mac soignée : icône Retina native et menu discret dans la barre supérieure • Diffusion 4K silencieuse : zéro surchauffe et zéro bruit de ventilateur sur MacBook • Connexion directe à la TV ou au vidéo-projecteur du studio via HDMI ou USB-C | |
| Binaire natif (Tauri 2) | x86-64 (Linux) | Télécharger bobine-assistant | Assistant Graphique de Gestion & Déploiement • Scanner réseau intelligent : détecte automatiquement toutes les bornes Bobine sur le Wi-Fi/LAN • Déploiement et mise à jour des bornes à distance sans toucher au terminal • Connexion SSH assistée par mot de passe ou clé SSH importée en 1 clic | |
| Script automatisé | x86-64 | curl -sSL https://bobine.fit/install.sh | bash | Appliance Dédiée Headless (Mini-PC Dédié) • Déploiement automatisé en 18 étapes sur mini-PC dédié (Wyse 5070, NUC, Tiny) • Désinstallation complète autonome via l'exécutable /usr/local/sbin/bobine-uninstall• Redémarrage immédiat et inconditionnel des services après mise à jour • Pilotage HDMI-CEC matériel : allume et éteint automatiquement le téléviseur | |
| Binaires & Sources | Multi-OS | Voir les Releases GitHub | Historique Complet des Versions & Code Source • Sommes de contrôle SHA-256 certifiées, archives sources & notes de version |
PARTIE I — NOUVELLES FONCTIONNALITÉS & AMÉLIORATIONS MAJEURES
1. Support Universel des Contrôles : Manettes de Jeu (HTML5 Gamepad), Télécommandes, Souris & Tactile
- Manettes de jeu standard (Bluetooth & USB) : Intégration complète de la spécification standard HTML5 Gamepad API dans le gestionnaire universel
useKioskRemote. Bobine reconnaît nativement les manettes Xbox Series / Xbox One, PlayStation DualSense / DualShock 4, Nintendo Switch Pro Controller, 8BitDo et manettes USB génériques :- Stick analogique gauche & Croix directionnelle (D-Pad) : Navigation bidirectionnelle et multidirectionnelle avec calcul géométrique 2D euclidien (
moveDomFocus2D) vers la carte la plus proche. Gestion d'un debouncing strict et d'un seuil de zone morte (deadzone = 0.45) avec répétition fluide après 400ms d'appui continu. - Bouton A / Croix (Sud) : Validation, sélection d'un cours et lancement immédiat.
- Bouton B / Rond (Est) : Retour en arrière, fermeture d'une modale ou arrêt de lecture.
- Bouton X / Y (Nord / Ouest) : Mise en pause / reprise instantanée de la vidéo ou du fond audio.
- Gâchettes L1 / R1 (Bumpers) : Saut rapide arrière / avant (-30s / +30s en cours de lecture, ou navigation par carte en grille).
- Gâchettes analogiques L2 / R2 (Triggers) : Réglage fin du volume sonore (diminution / augmentation).
- Bouton Start / Options : Pause / lecture globale.
- Bouton Select / Back : Retour à l'écran précédent.
- Stick analogique gauche & Croix directionnelle (D-Pad) : Navigation bidirectionnelle et multidirectionnelle avec calcul géométrique 2D euclidien (
- Télécommandes physiques multimédias (IR, Bluetooth, RF 2.4 GHz) :
- Détection native des touches clavier multimédias standard :
MediaPlayPause,MediaPlay,MediaPause,MediaTrackPrevious,MediaTrackNext,MediaFastForward,MediaRewind,MediaStop,AudioVolumeUp,AudioVolumeDown,AudioVolumeMute. - Prise en charge des télécommandes avec touches directionnelles (
ArrowUp,ArrowDown,ArrowLeft,ArrowRight), validation (Enter,Space) et retour (Escape,Backspace,BrowserBack).
- Détection native des touches clavier multimédias standard :
- Souris, Pointeurs & Écrans Tactiles :
- Interaction directe au clic ou au touch sur l'ensemble des éléments (
.cinema-card,.cinema-all-item, commandes de lecture). - Clic ou tap direct sur la vidéo en cours pour basculer en lecture / pause sans nécessiter de barre de contrôle encombrante.
- Interaction directe au clic ou au touch sur l'ensemble des éléments (
- Disponibilité Universelle sur Toutes les Interfaces & Plateformes :
- Actif sur le grand écran adhérents (
/cinema), le pupitre coach tactile (/grid), le kiosque autonome (/kiosk) et la radio (/radio). - Fonctionne sous Windows, Linux Bureau, Debian Headless, macOS et Android.
- Actif sur le grand écran adhérents (
2. Défilement Horizontal Fluide des Titres Longs (Marquee Animation) & Imposition Stricte des Miniatures
- Problème résolu : Auparavant, un titre de cours particulièrement long (ex. « BODYPUMP 125 — Express 30 Minutes Renforcement & Cardio ») repoussait la largeur minimale intrinsèque du conteneur flex, déformant la vignette proportionnellement et cassant l'alignement des rangées.
- Composant
MarqueeText:- Détection automatique et dynamique du dépassement textuel (
scrollWidth > clientWidth). - Si le titre tient dans l'espace alloué, il reste rigoureusement statique.
- Si le titre dépasse, il s'anime d'un défilement horizontal fluide en aller-retour alterné (style Apple TV, Spotify et Netflix), avec pause de lecture au début et à la fin, sans jamais couper brutalement les mots.
- Masque de fondu progressif sur la tranche droite (
mask-image: linear-gradient) pour un rendu visuel moderne et cinématique.
- Détection automatique et dynamique du dépassement textuel (
- Dimensions des Miniatures Rigoureusement Imposées :
- Cartes horizontales de la grille (
.cinema-card) : Largeur strictement verrouillée à 280px (width: 280px !important; min-width: 280px; max-width: 280px). - Vignettes 16:9 (
.cinema-card-thumb) : Hauteur verrouillée à 157.5px (flex: 0 0 157.5px). - Liste intégrale inférieure (
.cinema-all-thumb) : Dimensions imposées de 120px × 67.5px, avec troncature et défilement du titre (.cinema-all-title) confiné à la zone réservée. - Plus aucun cours, quelle que soit la longueur de son intitulé, ne peut altérer la géométrie de la grille.
- Cartes horizontales de la grille (
3. Clarification du Périmètre /grid Câblé Exclusif dans l'App & la Documentation
- Périmètre d'action clarifié : Sur
/grid(le pupitre tactile coach), la sélection d'un cours pilote exclusivement la sortie câblée (HDMI / loopback). La sortie réseau indépendante est quant à elle administrée depuis/dashboard-network. - Intégration dans l'interface Réglages : Ajout d'un encadré pédagogique sous le sélecteur du mode d'affichage câblé précisant explicitement ce découplage fonctionnel, éliminant tout doute pour l'exploitant de la salle.
- Mise à jour de la documentation technique : Synchronisation des spécifications dans
docs/ARCHITECTURE.mdetdocs/cahier-des-charges-affichage-hybride.md.
4. Désinstallation Automatique Multi-Plateforme en 1 Clic
- Linux Bureau (
.deb) : Déclenchement automatique d'un processus privilégié via Polkit (pkexec apt-get remove -y bobineoupkexec dpkg -P bobine) avec dialogue natif de confirmation graphique du bureau. - Windows (
.exe) : Lancement en processus détaché du désinstalleur officiel Inno Setup (unins000.exe) et fermeture propre de l'icône de barre des tâches (BobineTray). - macOS (
.dmg) : Purge automatisée du LaunchAgentcom.bobine.app.plistet suppression du bundle/Applications/Bobine.app. - Android (
.apk) : Appel de l'intent système standardIntent.ACTION_DELETE, ouvrant la boîte de dialogue native Android de désinstallation. - Appliance Headless (Debian) : Exécution de
/usr/local/sbin/bobine-uninstallavec purge des services systemd, profils Chromium et scripts X11. - Sécurisation par modale stricte : Saisie obligatoire du mot « DÉSINSTALLER » pour valider l'opération.
5. Refonte Ergonomique de la Zone de Danger (Réglages)
- Deux cartes distinctes et aérées : Séparation complète de la Remise à zéro des données (vidéothèque, musiques, réglages) et de la Désinstallation du logiciel.
- Élimination des redondances : Textes clarifiés, boutons explicites, fin des répétitions de sous-titres confus.
- Rappel contextuel de la méthode manuelle : Indication pour chaque système de la ligne de commande ou de la méthode standard équivalente.
6. Écran de Pause Cinématique, Descriptions & Métadonnées Réelles Vérifiées
- Présence scénique : Logo Bobine agrandi jusqu'à 150px avec halo lumineux respirant.
- Bouton « Reprendre » réactif : Couleurs d'accentuation calquées dynamiquement sur le thème actif (
var(--accent-primary)etvar(--accent-primary-fg)). - Détection dynamique des formats audio/vidéo :
- Canaux audio réels vérifiés par FFprobe : affichage de Stéréo 2.0, Surround 5.1 ou Mono 1.0.
- Résolution réelle : 4K Ultra HD (>= 2160p), 1440p QHD, 1080p Full HD ou 720p HD.
- Élimination des informations techniques inutiles (débit et framerate masqués sur l'écran de pause pour préserver l'élégance visuelle).
- Champ Synopsis & Descriptions de cours : Édition dans la Bibliothèque, extraction des balises MP4/MKV à l'import, et affichage typographique épuré sur l'écran de pause.
- Rétro-remplissage automatique : Analyse en arrière-plan des métadonnées étendues des vidéos déjà présentes lors de la migration 3.0.4 sans réimportation.
PARTIE II — CORRECTIFS DE BUGS & FIABILISATION SYSTÈME
1. Élimination de la Boucle Play/Pause Infinie et des Saccades Vidéo
- Cause racine identifiée : Un watchdog agressif programmé toutes les 2,5 secondes dans
/cinemaet/kiosksurveillait la progression du compteurvideo.currentTime. Lors d'une charge CPU momentanée ou d'un léger retard de décodage, le watchdog considérait à tort la vidéo comme figée et forçait un cycle destructifpause()->currentTime = lastTime->play(). Ce comportement réinitialisait le tampon du décodeur toutes les 2,5s, créant des saccades visibles et une boucle de relance infinie. - Correctif apporté :
- Suppression intégrale de cette logique destructive de relance permanente.
- Remplacement par une détection douce de gel avéré : seuil allongé à 7,5 secondes consécutives sans progression avant de déclencher une reprise non intrusive (
play()), sans altérer le pointeur de lecture ni interrompre le flux décompressé. - Ajout d'une période de grâce de 3,5s après tout seek manuel.
- Protection anti-rebond stricte de 1,5 seconde sur les clics de lancement de cours dans
/grid(handleSelect), empêchant les doubles envois WebSocket concurrents lors d'un tap tactile répété.
2. Lissage Monotone du Temps de Lecture sur l'Interface Headless
- Cause racine identifiée : Sur l'interface
/griden mode headless, le bandeau de contrôle du cours en cours affichait un compteur qui sautait de 2 à 3 secondes d'avant en arrière. Ce phénomène provenait de la gigue réseau (jitter) entre les rapports d'état WebSocket émis par le lecteur et l'interpolation temporelle locale du composant React. - Correctif apporté :
- Implémentation d'une progression strictement monotone du temps de lecture : le compteur temporel affiché ne peut plus jamais reculer tant que la lecture est active (
Math.max(lastPosition, currentPosition)). - Dès lors qu'un seek volontaire est opéré par le coach, le saut temporel est immédiatement pris en compte.
- Implémentation d'une progression strictement monotone du temps de lecture : le compteur temporel affiché ne peut plus jamais reculer tant que la lecture est active (
3. Relais Universel des Événements Entrée & Focus HDMI sur Android
- Cause racine identifiée : En mode headless sur Android, la sortie HDMI secondaire pilotée par
BobinePresentationne recevait aucun événement d'entrée clavier, souris, manette ou télécommande car la fenêtre de présentation était configurée avec le drapeauFLAG_NOT_FOCUSABLE. - Correctif apporté :
- Configuration de la fenêtre
BobinePresentationcomme réceptive aux focus (isFocusable = true, levée du flagFLAG_NOT_FOCUSABLE). - Relais transparent dans
MainActivity.ktdedispatchKeyEventetdispatchGenericMotionEventvers l'instance active deBobinePresentation. - Les télécommandes USB branchées sur la tablette ou les manettes Bluetooth connectées contrôlent désormais directement la vitrine
/cinemaaffichée sur le téléviseur.
- Configuration de la fenêtre
4. Résolution de l'Affichage HDMI Headless Android & Multi-OS
- Cause racine identifiée : En mode headless, l'affichage
/cinemasur l'écran HDMI externe présentait parfois un écran noir ou incomplet sans la grille des cours. - Correctif apporté :
- Harmonisation du routage d'affichage : lorsque le mode headless est actif,
/cinemaaffiche désormais la vitrine cinématique et la grille complète de cours prêtes à être explorées. - En mode double écran studio (
dual_screen), l'écran HDMI affiche l'attente passive élégante pendant que la tablette tactile affiche le pupitre de contrôle/grid.
- Harmonisation du routage d'affichage : lorsque le mode headless est actif,
5. Audio Direct & Sans Délai au Lancement Vidéo
- Cause racine identifiée : Les vidéos lancées démarraient avec une coupure de son d'une demi-seconde ou un retard perceptible sur certaines sorties HDMI et récepteurs audio.
- Correctif apporté :
- Initialisation explicite et immédiate des flux audio dans les balises vidéo (
volume = 1.0,muted = false). - Activation de
preload="auto"pour amorcer le décodage des premières trames audio avant le déclenchement de la lecture. - Suppression de tout délai artificiel ou tentative de fade-in audio prématuré au démarrage.
- Initialisation explicite et immédiate des flux audio dans les balises vidéo (
6. Suppression Intégrale de la Vidéo d'Introduction (lancement.mp4) & Démarrage Instantané
- Mesure définitive :
- Suppression complète du fichier
lancement.mp4de l'arborescence du dépôt, des scripts de packaging et des archives d'installation. - Retrait du réglage d'activation/désactivation de l'animation d'introduction dans les Réglages et la base de données.
- Réduction immédiate de l'empreinte disque et du poids des binaires d'environ 11 Mo.
- Démarrage instantané de tous les cours dès la sélection, sans aucun temps d'attente.
- Suppression complète du fichier
7. Fiabilisation du Redémarrage des Services Post-Installation & Post-Mise à Jour
- Script d'installation appliance (
install.sh) : Remplacement de l'instruction passivesystemctl enable --nowpar un redémarrage forcé explicitesystemctl restart || systemctl startsur les servicesbobine-backend.service,bobine-kiosk.service,bobine-audio-guard.serviceet le timerbobine-watchdog.timer. - Paquets Debian (
.deb/apt.bobine.fit) :- Le script de pré-suppression (
prerm) mémorise dans/run/bobine-restart-after-upgradesi des processus Bobine étaient actifs. - Le script de post-installation (
postinst) relance automatiquement le service utilisateursystemctl --user restart bobine.serviceou l'exécutable/usr/bin/bobineen arrière-plan pour la session de bureau active, et redémarre les services systemd globaux sur les déploiements headless.
- Le script de pré-suppression (
- Gestionnaire de mise à jour 1-clic Linux Bureau : Suppression de l'arrêt prématuré du backend dans
self.restart_services()avant la validation du mot de passe Polkit.
Référencement & Mots-Clés (GEO)
Bobine est un logiciel libre distribué sous licence GNU AGPL-3.0. Le code source complet est public, auditable et accessible sur le dépôt officiel : https://github.com/FantasmaGlad/Bobine.
Mots-clés de référence :
régie vidéo autonome salle de sport, support manette jeu fitness html5 gamepad, télécommande usb affichage dynamique, défilement horizontal titres marquee, miniatures 16 9 verrouillées, diffusion vidéo cours collectifs fitness hors-ligne, alternative open source Les Mills Cinema, alternative Wexer Virtual, affichage dynamique 4K natif sans abonnement, désinstallation automatique multi-plateforme en 1 clic, double écran indépendant tablette tactile et projecteur HDMI, pupitre coach tactile, écran de pause cinématique dynamique, redémarrage automatique services systemd linux, paquet debian officiel logithèque ubuntu app center, lecteur vidéo autonome AGPL-3.0.
