🇬🇧 English README 🇬🇧
Une application Python QT pour gérer sa fabrique à histoires (fah) Lunii et Flam, avec les opérations de organisation / importation / exportation / téléchargement du firmware
pour Windows 11 / MacOs (11 BigSur => 26 Tahoe) / Linux
(compatible avec les archives STUdio, avec support de la conversion audio)
FAQ : Veuillez consulter les questions déjà posées dans la section Discussions, ou les Issues pertinentes.
-
😎 Flam support 😎
L'application permet désormais d'importer les histoires Lunii sur votre Flam, sous réserve qu'elle soit en firmware v2.x.xAttention : la Flam est TRES lente en usb. Il faut etre patient. (environ 4min pour 80Mo)
-
😎 Lunii v3 & Firmware 3.2.x 😎
Lunii.QT a été mis à jour pour prendre en charge le dernier firmware (3.2.2 et suivants). Grâce à une analyse approfondie (j’aurais dû connecter les neurones et réfléchir 10 minutes de plus à la premère analyse), une solution stable et TRÈS simple a été trouvée.
Oubliez toutes les anciennes manipulations concernant les fichiers .md et le firmware.Rappel : Gardez précieusement vos fichiers firmware v3 (vous pourrez toujours rétrograder) et évitez les mises à jour automatiques.
- Fah v1 et v2 (support complet)
- Fah v3 (fichiers md v6 et v7 supportés, sauvegardes personnelles uniquement)
- Flam (support complet, sauvegardes personnelles uniquement)
- L'application n'autorise plus d'exporter les histoires officielles pour les Lunii, à cause du piratage.
Les Flams pourront sauvegarder et restaurer leurs histoires mais ne fonctionneront que sur le device d'origine. - Le transcodage audio nécessite la présence de FFMPEG
- Lunii.QT
- Liens / Dépôts similaires
-
La barre de menu. Elle vous informera lorsqu'une mise à jour de l'application est disponible
(il suffit d'aller dans Menu About/Update to v2.X.X) -
L'emplacement de votre Lunii/Flam lorsqu'elle est connectée.
Le bouton à gauche relance la détection automatique. -
Gestion du Mode nuit (ici)
-
Actualisation de la base de données Officielle : Met à jour la liste des histoires et leurs descriptions depuis le Luniistore. Utilisez ce bouton lorsque certaines histoires officielles ne sont pas reconnues.
-
La liste de vos histoires avec l'UUID et le type d'histoire (DB).
L'UUID : Un identifiant unique permettant de lier les histoires à leur dossier sur la Lunii/Flam. Les huit derniers caractères de l'UUID composent le nom du dossier de l'histoire.DB signifie Base de données. Cette application prend en charge deux bases de données différentes
- O - Base de données Officielle de Lunii
(Toutes les métadonnées proviennent des serveurs de Lunii). - T - base de données Tierce, également connue sous Non officielles ou Custom
(Ces métadonnées ne peuvent pas être récupérées, elles sont complétées lors de l'importation de l'histoire)
- O - Base de données Officielle de Lunii
-
L'icône 🛏️ indique que l'histoire supporte le Mode Nuit. Il est possible de forcer ce status depuis le menu contextuel
-
Histoires cachées (les entrées grisées dans la liste).
Cette fonctionnalité est activable par le biais du menu contextuel sur une histoire.
Son usage est double:- Masquer certaines histoires pour éviter que l'enfant ne passe trop de temps à sélectionner une histoire le soir. Cela évite de la supprimer et la recopier de nouveau.
- Eviter la suppresion d'histoires non officielles pendant une synchronisation avec l'application Luniistore. Les histoires cachées sont toujours physiquement présente dans l'appareil, mais ne seront pas visible par Luniistore. N'oubliez pas de bien "cacher" vos histoires avant de cliquer sur "synchroniser" !
-
Dans la barre d'état, vous trouverez
- Votre SNU (numéro de série),
- La version du firmware de votre Lunii/Flam
- L'espace disponible sur la SD
- Le nombre d'histoires
| Keys | Actions |
|---|---|
Ctrl+Up |
Déplace la ou les sélection(s) en première position |
Alt+Up |
Déplace la ou les sélection(s) vers le haut |
Alt+Down |
Déplace la ou les sélection(s) vers le bas |
Ctrl+Down |
Déplace la ou les sélection(s) en dernière position |
Ctrl+I |
Importe une nouvelle histoire |
Ctrl+S |
Exporte la sélection |
Ctrl+Shift+S |
Exporte toutes les histoires |
Ctrl+H |
Masquer/Démasquer les histoires sélectionnées |
Ctrl+N |
Forcer le mode nuit d'une histoire |
Delete |
Supprime les histoires sélectionnées |
Ctrl+O |
Ouvre le dossier d'une Lunii/Flamm |
Ctrl+L |
Ouvre la fenêtre de debug |
Ctrl+Q |
Fermer l'application |
F1 |
À propos de l'application |
F5 |
Réactualise les appareils |
- Détection automatique des Mises à jour
- Import / Export / Suppression des histoires
- Support des archives au format STUdio, et importez la base d'histoire de STUdio
- Réorganisez vos histoires dans votre ordre préféré
- Gérer le mode nuit
- Cachez les histoires
Dans le but de ne pas subir une suppression forcée des histoires non officielles durant la synchronisation avec l'application Luniistore, vous pouvez désormais "cacher" temporairement certaines histoires
(tous les fichiers sont conservés sur l'appareil) - Histoires perdues
Trois nouveaux outils sont proposés pour gérer vos histoires perdues.
(souvent suite à un crash d'une autre application 😜)
Vous pouvez :
- les lister
(l'application tentera de réparer les histoires, en particulier les fichiers sur les Lunii v1/v2) - les récupérer (si elles sont saines)
- les supprimer (attention, les fichiers seront supprimés)
- les lister
- Récupération du Firmware pour votre appareil (cf. cette section)
Certaines histoires tierces utilisent des fichiers non MP3. Ils ne peuvent donc pas être installés tels quels sur Lunii. Cela nécessite une étape de transcodage. Ce processus supplémentaire est réalisé à l'aide de l'outil FFMPEG disponible ici
ATTENTION : le transcodage est très long, il faut être patient. C'est pourquoi vous devriez préférer le format .plain.pk qui utilise un format audio compatible.
NOTE 1 : Le binaire de FFMPEG ne sera plus inclu par défaut dans les archives.
NOTE 2 : Vous pouvez récupérer une version plus récente en utilisant le même menu.
Procedure:
- Cliquez sur Menu "Outils" puis "FFMPEG Absent"
- luniiQt va lancer le téléchargement de FFMPEG
- FFMPEG sera installé dans le dossier
~/.lunii-qt - Vérifiez avec Menu Outils / FFMPEG détecté
- L'application est prête
- ouvrir un terminal
- exécutez la commande suivante :
sudo apt-get install ffmpeg - redémarrez luni-qt
Dans l'application, le menu Tools affiche l'état de la détection.
Lunii.QT vous offre la possibilité de sauvegarder la dernière version du Firmware disponible sur les serveurs Lunii. Par extension, ayant le firmware enregistré, il est donc possible de manuellement l'installer sur votre appareil sans avoir à vous connecter au LuniiStore (vous ne perdrez pas vos histoires chargées non officielles). Cette procédure est manuelle et expérimentale mais jusqu'à présent personne n'a rencontré de problème.
NOTE 1: Pensez à garder une sauvegarde du firmware pour Lunii v3 et FLAMs, dans le cas d'une mise à jour qui casserait l'astuce des histoires tierces. Vous serez en mesure de downgrader/revenir en arrière.
NOTE 2: Vous ne pouvez pas choisir la version du firmware. Vous n'obtiendrez que la dernière version disponible sur les serveurs de Lunii.
-
Récupération du firmware
- Sélectionnez une Lunii
- Menu Outils/Récupérer le firmware
- Vous serez invité à vous connecter
-
Entrez vos identifiants Luniistore (ils ne sont pas sauvegardés pour des raisons de sécurité).
Vous pouvez vérifier ce point ici
https://github.com/o-daneel/Lunii.QT/blob/a8bd30e1864552687f235004085a417d7c6b00e6/pkg/main_window.py#L468-L475 -
Choisissez un emplacement où sauvegarder votre firmware (deux fichiers pour une Lunii v1)
-
Installation du firmware précédemment sauvegardé
- Copiez-le(s) fichier(s) du firmware dans le répertoire racine de votre lunii
- Renommez en
fa.bin(et aussifu.binpour les Lunii v1)
- |- .contents |- .md |- .pi |- fa.bin |- ... (other files)- Éteindre, rallumer, la lunii fait sa mise à jour avec le fichier détecté, attendre : TADA
(si vous reconnectez votre lunii sur votre pc, lefa.bindevrait avoir été supprimé indiquant que la mise à jour est ok et évitant de la refaire au prochain démarrage de la lunii)
-
Récupération du firmware
- Sélectionnez votre Flam dans la liste des appareils
- Menu Outils/Récupérer le firmware
- Vous serez invité à vous connecter
-
Entrez vos identifiants Luniistore (ils ne sont pas sauvegardés pour des raisons de sécurité).
Vous pouvez vérifier ce point ici
https://github.com/o-daneel/Lunii.QT/blob/a8bd30e1864552687f235004085a417d7c6b00e6/pkg/main_window.py#L468-L475 -
Choisissez un emplacement où sauvegarder vos firmwares (
update-main.encandupdate-comm.enc)
-
Installation du firmware précédemment sauvegardé
- Copiez-le(s) fichier(s) du firmware dans le répertoire racine de votre Flam
- |- etc/ |- str/ |- .mdf |- update-main.enc |- update-comm.enc |- ... (other files)- Créer un fichier vide
cable_update_completedans /tmp
- |- etc/ |- str/ |- .mdf |- update-main.enc |- update-comm.enc |- tmp/ |- cable_update_complete |- ... (other files)- Éteindre, rallumer, attendre : TADA
(si vous reconnectez votre lunii sur votre pc, les*.encdevraient avoir été supprimés)
Filename : story_name.8B_UUID.plain.pk
Ciphering : None / Plain
Structure :
_thumbnail.png
_metadata.json
uuid.bin
ni
li.plain
ri.plain
si.plain
rf/000/XXYYXXYY.bmp
sf/000/XXYYXXYY.mp3
Filename :
LONG_UUID.v2.pkLONG_UUID.v2.pkLONG_UUID.pk
Ciphering : Generic Key
Structure :
00000000000000000000000000000000/ni
00000000000000000000000000000000/li
00000000000000000000000000000000/ri
00000000000000000000000000000000/si
00000000000000000000000000000000/rf/000/XXYYXXYY
00000000000000000000000000000000/sf/000/XXYYXXYY
Filename : AGE+] story_title DASHED_UUID.zip .7z
Ciphering : Generic Key
Structure : (same as .v1.pk / .v2.pk)
00000000-0000-0000-0000-000000000000/ni
00000000-0000-0000-0000-000000000000/li
00000000-0000-0000-0000-000000000000/ri
00000000-0000-0000-0000-000000000000/si
00000000-0000-0000-0000-000000000000/rf/000/XXYYXXYY
00000000-0000-0000-0000-000000000000/sf/000/XXYYXXYY
Filename : AGE+] story_title DASHED_UUID.zip .7z
Ciphering : None
Structure :
assets/
story.json
thumbnail.png
NOTE : Le format des histoires de la Flam reste inconnu. Seul les sauvegardes personnelles sont supportées
Filename : story_name.8B_UUID.zip
Ciphering : Story Key (unknown)
Structure :
00000000-0000-0000-0000-000000000000/info
00000000-0000-0000-0000-000000000000/main.lsf
00000000-0000-0000-0000-000000000000/version
00000000-0000-0000-0000-000000000000/key
00000000-0000-0000-0000-000000000000/img/*.lif
00000000-0000-0000-0000-000000000000/img/script/*.lif
00000000-0000-0000-0000-000000000000/script/*.lsf
00000000-0000-0000-0000-000000000000/sounds/*.mp3
00000000-0000-0000-0000-000000000000/sounds/*.mp3map
- Fichier de configuration pour sauvegarder la configuration du menu (tailles / détails)
- Ajout d'une image à la liste des arbres ?
Commencer par cloner le dépot.
Préparer l'environnement virtuel pour le projet et installer les dépendances.
$ python3 -m venv venvPassez à votre venv
- sous Linux
source venv/bin/activate - sous Windows
.\venv\Scripts\activate.bat
Installer les dépendances
$ pip install -r requirements.txt
Linux a besoin d'une dépendance supplémentaire.
$ apt install libxcb-cursor0$ pyside6-uic pkg/ui/main.ui -o pkg/ui/main_ui.py
$ pyside6-uic pkg/ui/nm.ui -o pkg/ui/nm_ui.py$ pyside6-lupdate ./pkg/ui/main.ui ./pkg/ui/nm.ui ./pkg/ui/about_ui.py ./pkg/ui/debug_ui.py ./pkg/ui/login_ui.py ./pkg/nm_window.py ./pkg/main_window.py ./pkg/ierWorker.py ./pkg/versionWorker.py ./pkg/api/devices.py ./pkg/api/device_flam.py ./pkg/api/device_lunii.py -ts ./locales/fr_FR.ts
$ pyside6-linguist -style WindowsVista ./locales/fr_FR.ts # optionnaly, update translations
$ pyside6-lrelease ./locales/fr_FR.ts ./locales/fr_FR.qm $ pyside6-rcc resources.qrc -o resources_rc.py$ python lunii-qt.pyNOTE : PyInstaller by its design generates executables that are flagged by AntiViruses. Those are false positives. cx_Freeze is an alternative that allows to avoid such false positives.
$ pip install pyinstaller
$ pyinstaller lunii-qt.spec
...
$ dist\lunii-qt$ pip install cx_Freeze
$ python setup.py build_exe
...
$ build/exe.win-amd64/lunii-qt- Double cliquez sur le fichier
lunii-qt. - Vous devez voir apparaître le message d'erreur suivant :

Cliquez sur "OK" - Allez dans Préférences du système > Sécurité et confidentialité et cliquez sur l'onglet Général.

- En bas de la fenêtre, vous trouverez un message indiquant que
lunii-qtest bloqué. Cliquez sur "Ouvrir quand même".
Si vous ne voyez pas ce message sur l'onglet Général, double cliquez de nouveau surlunii-qt.
NOTE : Il est possible que vous deviez en premier cliquer sur le bouton "unlock" puis entrer votre nom d'utilisateur / mot de passe pour pouvoir cliquer sur "Ouvrir quand même". - Une nouvelle popup apparait

Cliquez sur "Ouvrir".
Si vous n'avez pas eu cette popup, retournez juste double cliquer sur le fichier. - Pour finir, un dernier message vous informera de la sorte

Cliquez sur "Ouvrir", et vous n'aurez plus ces avertissements à l'avenir.
Lors de l'utilisation de cette application, vous allez peut-être constater des hisoires marquées Unknown story (maybe a User created story)....
Il s'agit certainement d'une histoire tierce qui a été chargé par une autre application. Lunii.QT n'a donc
pas connaissance des métadonnées associées (Titre, Description, Image).
Il est possible de pallier ce problème de deux manières (au choix) :
- en important la base d'histoires de STUdio avec le menu
File/Import STUdio DB - en glissant déposant l'archive de l'histoire dans l'application, comme pour la charger. Cette dernière étant déjà présente, Lunii.Qt ne va faire qu'analyser les métadonnées et les ajouter dans la base interne, en prenant soin de ne pas recharger l'histoire.
Cette application téléchargera une fois pour toutes la base de données des histoires officielles et toutes les images demandées dans le dossier dédié à l'application.
$HOME/.lunii-qt/official.db$HOME/.lunii-qt/cache/*
En cas de problème, il suffit de supprimer ce fichier et ce répertoire pour forcer le rafraîchissement.
Si vous rencontrez l’erreur suivante lors du lancement de Lunii.QT sous Linux :
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: offscreen, vkkhrdisplay, xcb, minimalegl, vnc, eglfs, minimal, linuxfb, wayland-egl, wayland.
Cela signifie qu’une bibliothèque système requise pour l’interface graphique Qt est manquante.
Solution :
Installez la dépendance manquante en exécutant la commande suivante dans votre terminal :
sudo apt install libxcb-cursor0Après l’installation, essayez de relancer Lunii.QT.
Si le problème persiste, assurez-vous que toutes les autres dépendances Qt sont installées.
Afin de supporter l'exportation d'histoires depuis une Luniis v3, vous devez placer vos clés de périphérique ici :
%HOME%\.lunii-qt\230230300XXXXX.keys
$HOME/.lunii-qt/230230300XXXXX.keysIl s'agit d'un fichier binaire avec 0x10 octets pour la clé et 0x10 octets pour l'IV.
magick convert logo.png -define icon:auto-resize="256,128,96,64,48,32,16" logo.icoMerci à :
- olup pour l'aide sur le format des archives STUdio
- sniperflo pour le support de la v1 & debug
- McFlyPartages pour le debug sous Linux et ses contributions
- ceux que j'oublie.... 👍
- Lunii v3 - Reverse Engineering
- Lunii CLI tool
- STUdio - Story Teller Unleashed
- (GitHub) STUdio, Story Teller Unleashed
- Lunii Admin (Une alternative en Go de STUdio)
- Lunii Admin Web (même chose que précédemment, mais à partir d'un navigateur)
- Astuce de l'icone dans le workflow avec rcedit







