SAVINGSFinancial gain :Save €1,500 to €3,000 / year per studio (Zero software royalties)
NO SUBSCRIPTIONSoftware cost :€0 / month · Open-source, zero recurring fees, no vendor lock-in
OPEN SOURCEFull transparency :Public source code on GitHub: auditable by anyone, zero black box
MAC & MAC MINIStudio appliance :Perfect control unit: near-total silence, dual HDMI screens & auto-launch
APPLE SILICONM4 to M6 chips :Apple Silicon tuning: instant 4K playback with zero heat build-up
VERIFIED MINI PCSAccessible hardware :Verified refurbished mini PC (HP EliteDesk, industrial fanless) from €161
VERIFIED GUIDEAmazon purchases :Every hardware guide product is hand-verified: real ASIN, checked price, authentic photo
ALREADY OWN A LAPTOPZero repurchase :No purchase needed: close your existing laptop in clamshell mode and plug in a simple hub
GRAPHICS ACCELERATIONSmooth playback :Hardware-accelerated engine: buttery smooth 4K & 2K 60 fps playback
100% OFFLINEOutage proof :Operates without Internet: resilient against fiber cuts and ISP outages
TOUCH KIOSKSelf-service :Member touchscreen with live class countdown and easy selection
DUAL SCREENSMulti-display :Simultaneous feeds: main workout screen + gym floor TVs
24/7 GYM RADIOBackground music :Continuous music flow with seamless crossfade and automated voice alerts
CUSTOM CONTENTCatalog freedom :100% Agnostic: play your own workouts (Cycling, HIIT, Yoga, Pilates)
MULTI-OSCross-platform :Windows 10/11, macOS, Linux, Android tablets and iPadOS exploration
NATIVE ANDROIDDedicated app :Available on touchscreen tablets to control your fitness studio seamlessly
LINUX APT REPONative updates :GPG-signed .deb package on apt.bobine.fit: native Linux updates via apt update
SIMPLE REMOTEEasy control :Choice of 2.4 GHz wireless clicker or local smartphone QR web app
PRIVACY & GDPRData sovereignty :100% Local: zero analytics, zero cameras, your data stays in your club
BLACKOUT RECOVERYElectrical resilience :Autonomous auto-recovery and instant playout resume after power outage
1-CLICK BACKUPUniversal export :Export and restore your entire schedule and video catalog in a single ZIP
ECO-FRIENDLYLow power draw :From 6 Watts in fanless configuration: silent, cost-effective and eco-friendly
Back to releases
V3.0.6

Bobine V3.0.6

Bobine

La version 3.0.6 Stable de Bobine apporte des correctifs de stabilité majeurs pour l'exploitation sur tablettes Android en environnement studio et box de cross-training. Déployée en réponse aux retours d'utilisation sur le terrain, cette mise à jour résout l'anomalie de blocage des commandes et de non-déclenchement des vidéos lors du raccordement d'un écran externe en HDMI/USB-C, fiabilise l'accès à l'administration par délégation au navigateur web système par défaut, et officialise le Guide de Recommandations Matérielles & Bundles Certifiés accessible sur le portail https://bobine.fit/materiel.


Téléchargement des Binaires Officiels (Version 3.0.6)

Plateforme & EnvironnementFormatArchitectureTéléchargement DirectProfil & Fonctionnalités Clés
Android.apk
(Paquet natif)
ARM64
(arm64-v8a)
Télécharger Bobine-3.0.6.apkTablettes Tactiles & Régie Studio Mobile
• Double affichage tactile /grid + diffusion HDMI /cinema entièrement fiabilisé
• Maintien permanent du focus tactile sur la tablette sans captation par l'écran secondaire
• Sortie par défaut calée sur Cinema pour le canal câblé sous Android
• Ouverture de l'administration dans le navigateur externe sans piéger l'écran tactile
• 100% hors-ligne, serveur FastAPI embarqué via Chaquopy
Windows 11.exe
(Installeur)
x86-64Télécharger Bobine-Setup-3.0.6.exePC de Bureau & Ordinateurs Portables Windows
• Désinstallation automatique en 1 clic via Inno Setup
• Démarrage discret près de l'horloge (icône de notification en arrière-plan)
• Mode capot fermé (clamshell) : branchement HDMI direct sans mise en veille
• Contrôle universel par manette (Xbox/PlayStation), télécommande ou smartphone
Debian Ubuntu Linux Mint.deb
(Paquet & Dépôt)
x86-64
(amd64)
Dépôt APT apt.bobine.fit
bobine_3.0.6_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
Apple.dmg
(Image disque)
Apple Silicon
(arm64)
Télécharger Bobine-3.0.6.dmgMacBook, Mac mini & iMac (Apple Silicon)
• Bundle /Applications/Bobine.app prêt à diffuser
• 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
• Connexion directe à la TV ou au vidéo-projecteur du studio via HDMI ou USB-C
TauriBinaire natif
(Tauri 2)
x86-64 (Linux)Télécharger bobine-assistantAssistant Graphique de Gestion & Déploiement
• Scanner réseau intelligent : détection automatique des bornes Bobine sur le Wi-Fi/LAN
• Déploiement et mise à jour des bornes à distance sans commande terminal
• Connexion SSH assistée par mot de passe ou clé SSH importée en 1 clic
Debian ApplianceScript automatiséx86-64curl -sSL https://bobine.fit/install.sh | bashAppliance 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 /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
GitHubBinaires & SourcesMulti-OSVoir les Releases GitHubHistorique Complet des Versions & Code Source
• Sommes de contrôle SHA-256 certifiées, archives sources & notes de version

PARTIE I — RECOMMANDATIONS MATÉRIELLES & BUNDLES CERTIFIÉS (bobine.fit/materiel)

Face à la diversité des installations en salle de sport et à la volonté d'éviter les investissements matériels disproportionnés, un catalogue exhaustif de recommandations matérielles et de configurations testées est désormais intégré au portail officiel : https://bobine.fit/materiel (version anglophone disponible sur https://bobine.fit/en/hardware).

1. Couverture Intégrale des 4 Profils d'Exécution

Le catalogue structure le choix du matériel autour des 4 profils techniques de Bobine :

  • Linux (Appliance Headless & Postes Dédiés) : Idéal pour transformer un mini-PC (Dell Wyse 5070, Lenovo ThinkCentre Tiny, Intel NUC) en borne autonome 24/7 sans écran de bureau ni maintenance.
  • Windows (Postes de Bureau & Mode Clamshell) : Adapté aux structures disposant d'un PC portable ou d'une tour bureautique. Permet d'exploiter un ordinateur portable existant branché en HDMI et fermé dans un meuble technique (mode capot fermé sans veille).
  • macOS (Mac mini & MacBook Apple Silicon) : Solution silencieuse par excellence pour les studios haut de gamme, avec consommation électrique minime et décodage 4K fluide.
  • Android (Tablettes Tactiles & Pupitre Studio Mobile) : Permet de remplacer l'ensemble de l'informatique de la salle par une tablette tactile unique (Xiaomi Pad, Samsung Galaxy Tab), assurant à la fois le pupitre de commande de l'instructeur et la projection vidéo directe via un câble USB-C vers HDMI.

2. Quatre Paliers Budgétaires par Type de Matériel

Pour chaque voie d'installation (Mini PC, PC Portable ou Tablette), 4 gammes transparentes sont détaillées :

  • Gamme Essentiel : Budget minimal (matériel reconditionné ou accessible), diffusion 1080p fluide, consommation électrique sous les 10W.
  • Gamme Recommandée : Équilibre optimal entre réactivité, longévité, support 4K 60 fps et coût d'acquisition.
  • Gamme Pro : Dissipation thermique passive renforcée, ports réseau Gigabit, robustesse industrielle pour exploitation 24/7 intensive.
  • Gamme Premium : Stations compactes à très haute performance graphique, multi-écrans et finitions soignées.

3. Transparence Affiliation & Vérification Technique Déterministe

  • Zéro devinette sur les prix et disponibilités : Tous les produits référencés correspondent à des fiches Amazon réelles dont les ASINs ont été audités individuellement.
  • Transparence économique : Les liens marchands utilisent l'identifiant partenaire officiel (fantasmaglad-21), contribuant directement au financement du développement de Bobine sans surcoût pour les structures.
  • Périphériques audités : Sélection rigoureuse de câbles HDMI 2.1 certifiés, docks USB-C compatibles DisplayPort Alt-Mode avec alimentation Power Delivery (PD), télécommandes radio sans fil 2.4 GHz et supports muraux articulés.

PARTIE II — ARCHITECTURE TECHNIQUE, CAUSES RACINES & CORRECTIFS ANDROID

1. Raccordement Écran Externe Android : Rétablissement du Focus et des Entrées Tactiles

  • Symptôme constaté : Lors du branchement d'une tablette Android à un écran externe HDMI (via hub ou adaptateur USB-C) affichant la grille tactile /grid sur la tablette et le flux /cinema sur le téléviseur, les commandes tactiles et télécommandes cessaient de répondre sur la tablette, et tout clic pour lancer un cours restait sans effet.
  • Cause racine 1 (Détournement du focus de fenêtre) :
    • Dans android/app/src/main/java/com/bobine/app/BobinePresentation.kt, la fenêtre secondaire instanciée par Android Presentation exécutait :
      win.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
      win.decorView.isFocusable = true
      win.decorView.isFocusableInTouchMode = true
      webView.requestFocus()
      
    • Cet appel dérobait le focus principal de la fenêtre MainActivity, transférant la priorité des entrées vers la fenêtre secondaire muette et désactivant l'interactivité sur l'écran tactile principal.
    • Correction appliquée : Maintien strict de win.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) et suppression de webView.requestFocus() dans BobinePresentation. L'écran HDMI externe reste une surface d'affichage passive qui ne peut plus accaparer le focus.
  • Cause racine 2 (Interception inconditionnelle des touches) :
    • Dans MainActivity.kt, les méthodes dispatchKeyEvent et dispatchGenericMotionEvent transmettaient systématiquement les événements en priorité à BobineForegroundService.currentPresentation avant d'évaluer la fenêtre active de la tablette. La WebView secondaire consommait l'événement sans le traiter, affamant l'interface /grid.
    • Correction appliquée : Inversion de l'ordre d'évaluation. super.dispatchKeyEvent(event) et super.dispatchGenericMotionEvent(event) sont exécutés en premier. L'interface locale tactile /grid consomme en priorité ses clics, touches de télécommande et manette. Seuls les événements non consommés sont relayés à l'affichage secondaire.
  • Cause racine 3 (Divergence de sortie active sur le profil Android) :
    • Dans backend/app/routers/settings.py, la fonction get_display_output_value(db, "cable") retournait "kiosk" par défaut en l'absence de clé explicite.
    • Sur la présentation externe Android (BobinePresentation), qui charge initialement /cinema, le hook useDisplayOutputRedirect constatait que display_output_cable valait "kiosk" et redirigeait immédiatement l'écran TV vers /kiosk.
    • Or, la page /kiosk n'écoute pas les messages WebSocket cinema_command: launch. Lorsque le coach cliquait sur un cours depuis /grid, l'ordre de lancement était envoyé au canal cinéma, mais l'écran externe affichait le kiosque et ignorait la commande.
    • Correction appliquée : Dans settings.py, la valeur par défaut de display_output_cable pour le profil Android (get_deployment_profile() == "android") est désormais "cinema" (et "kiosk" pour les autres profils). L'écran externe reste verrouillé sur le récepteur cinéma prêt à lire les cours.
  • Cause racine 4 (Fragilité du payload de lancement et asynchronisme de chargement) :
    • Dans frontend/src/app/grid/page.tsx, l'ordre sendCommand("cinema_command", { action: "launch", video_id: video.id }) ne transmettait que l'identifiant numérique.
    • Dans frontend/src/app/cinema/page.tsx, videos.find(v => v.id === videoId) échouait si la liste locale des vidéos n'avait pas encore terminé son chargement initial REST lors de l'arrivée du message WebSocket, provoquant un abandon silencieux.
    • Correction appliquée :
      • playback.py relaie désormais title et duration_seconds dans le message de diffusion cinema_command.
      • usePlaybackSocket.ts passe ces métadonnées au callback onCinemaCommand.
      • cinema/page.tsx recherche la vidéo via comparaison numérique stricte (Number(v.id) === Number(videoId)) et construit un objet vidéo de repli immédiat si le tableau n'est pas encore peuplé, garantissant le lancement instantané.

2. Déport de Navigation Système : Sortie Sécurisée du Bac à Sable Kiosque

  • Symptôme constaté : Sur tablette Android en mode d'attente (headless), le bouton « Accéder à l'administration » ouvrait la page d'administration (/) directement dans la WebView plein écran de Bobine. L'utilisateur se retrouvait piégé dans une interface dense sans barre d'URL, sans onglets et sans moyen ergonomique de revenir à la grille de pilotage.
  • Cause racine : MainActivity.kt ne définissait aucun gestionnaire shouldOverrideUrlLoading dans son WebViewClient. Toute navigation par lien hypertextuel était exécutée en interne.
  • Correction appliquée :
    • Implémentation de shouldOverrideUrlLoading dans MainActivity.kt :
      override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
          val uri = request.url
          val path = uri.path ?: ""
          if (path != "/grid" && !path.startsWith("/grid/")) {
              try {
                  val intent = Intent(Intent.ACTION_VIEW, uri)
                  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                  view.context.startActivity(intent)
                  return true
              } catch (e: Exception) {
                  Log.w("MainActivity", "Impossible d'ouvrir le navigateur externe pour $uri", e)
              }
          }
          return false
      }
      
    • Toute URL sortant de l'arborescence /grid délègue l'ouverture au navigateur web par défaut du système Android (Google Chrome, Firefox, etc.).
    • Le lien d'administration sur /grid intègre target="_blank" rel="noopener noreferrer".
    • L'interface Bobine reste propre et dédiée au pupitre de salle sans perturbation d'affichage.

3. Fiabilisation de l'Installeur Windows & Prévention des Conflits de Fichiers

  • Symptôme constaté : Lors d'une mise à jour par réinstallation de Bobine-Setup-*.exe sur une machine Windows disposant déjà d'une ancienne version, des erreurs de conflit de fichiers ou de violation de partage (DeleteFile a échoué / Fichier en cours d'utilisation) pouvaient survenir, bloquant l'installeur.
  • Causes racines identifiées :
    1. BobineTray.exe démarrant automatiquement avec la session Windows et supervisant BobineBackend.exe, les deux processus maintenaient un verrou exclusif du système de fichiers NTFS sur C:\Program Files\Bobine\.
    2. La section [Files] de bobine.iss ne disposait pas du drapeau ignoreversion, incitant Inno Setup à comparer les horodatages et informations de version PE des fichiers au lieu de forcer leur écrasement.
    3. D'anciens modules compilés C (.pyd) ou bibliothèques dynamiques (.dll) orphelins issus d'une version antérieure pouvaient subsister dans le dossier de destination et perturber le chargement Python au runtime (sys.path).
  • Correctifs appliqués :
    • Fermeture pré-installation via script Pascal (PrepareToInstall) : Terminaison forcée de tout processus Bobine actif (taskkill.exe /F /IM BobineTray.exe /T et taskkill.exe /F /IM BobineBackend.exe /T) dès l'initialisation de l'installation, libérant instantanément tous les verrous de fichiers.
    • Nettoyage automatique des binaires résiduels ([InstallDelete]) : Purge systématique des anciens *.pyd et *.dll avant l'extraction de la nouvelle arborescence.
    • Écrasement forcé inconditionnel (ignoreversion) : Déploiement garanti de l'ensemble des binaires et de l'export statique Next.js sans conflit de version.
    • Résilience CI accrue : Téléchargement de l'archive statique ffmpeg sécurisé par curl.exe -fL --retry 5 --retry-delay 5 contre les indisponibilités réseau transitoires.

PARTIE III — PROTOCOLE DÉTERMINISTE DE VALIDATION

Conformément aux directives strictes de robustesse et de zéro devinette de Bobine, l'ensemble des composants modifiés a été soumis à une validation exhaustive :

  1. Syntaxe AST Python :
    • Fichiers audités : backend/app/routers/settings.py, backend/app/routers/playback.py, backend/app/utils/version.py.
    • Résultat : Syntaxe abstraite validée sans aucune anomalie (AST OK).
  2. Suite de Tests Backend (Pytest) :
    • Exécution : PYTHONPATH=backend backend/.venv/bin/python -m pytest backend/tests/
    • Résultat : 63 tests exécutés avec succès (100% passants, 0 échec, 0 régression).
  3. Contrôle Statique TypeScript :
    • Exécution : npx tsc --noEmit depuis frontend/.
    • Résultat : 0 erreur de type. Respect absolu des signatures de fonctions et des contrats d'interface.
  4. Build Statique Next.js de Production :
    • Exécution : npm run build depuis frontend/.
    • Résultat : Compilation réussie de l'intégralité des 25 routes statiques et dynamiques.
  5. Validation Matérielle Réelle :
    • Testé sur tablette Android avec station d'accueil USB-C HDMI reliée à un moniteur de contrôle externe : détection immédiate, interaction tactile fluide sans perte de focus, lancement vidéo instantané sans écran noir, et ouverture de l'administration dans le navigateur Chrome par défaut.

Référencement & Mots-Clés (GEO)

Bobine est un logiciel libre distribué sous licence GNU AGPL-3.0. Le code source complet, les spécifications architecturales et l'historique des modifications sont publics et vérifiables sur le dépôt officiel : https://github.com/FantasmaGlad/Bobine.

Mots-clés de référence :
correctif hdmi android tablette double ecran, bobine presentation flag not focusable, priorite dispatchkeyevent tactile tablette, sortie cablee cinema android chaquopy, commande websocket cinema launch payload enrichi, ouverture navigateur externe webview android shouldoverrideurlloading, recommandations materiel salle de sport bobine fit, bundles mini pc wyse dell nuc crossfit, pc portable clamshell capot ferme hdmi, equipement audiovisuel fitness autonome local-first, console coach sportive tablette sans abonnement, lecteur video fitness sans cloud, sonorisation sportive open source, logiciel libre agpl-3.0.