Musical Recommender System — Version 2






Système intelligent de recommandation musicale local basé sur l'analyse audio par IA, les embeddings vectoriels et un moteur de classement MMR.
Table des matières
Aperçu
Musical Recommender System v2 est une application desktop moderne permettant de générer automatiquement des playlists personnalisées à partir de vos fichiers audio locaux.
Le système fonctionne entièrement hors-ligne et apprend les préférences musicales de l'utilisateur à partir de morceaux likés.
Fonctionnalités principales
- Interface graphique moderne avec CustomTkinter
- Analyse audio via Musicnn / ONNX Runtime
- Base de données vectorielle locale avec LanceDB
- Cache intelligent des embeddings avec BLAKE3
- Classement intelligent avec MMR
- Génération automatique de playlist
.m3u8
- Lancement direct dans VLC
- Support des thèmes clair / sombre
- Import multi-fichiers audio
Fonctionnement
Workflow global
1. Importation des fichiers audio
↓
2. Sélection des morceaux favoris
↓
3. Analyse audio par IA
↓
4. Construction du profil utilisateur
↓
5. Classement intelligent MMR
↓
6. Génération de playlist
↓
7. Lecture automatique via VLC
Architecture
musical-recommender-v2/
│
├── main.py
├── app.py
├── func.py
├── extraction.py
├── schema.py
│
├── msd-musicnn-1.onnx
├── requirements.txt
│
├── assets/
│ ├── light_upload.png
│ ├── dark_upload.png
│ ├── coeur_gris.png
│ ├── coeur_rouge.png
│ ├── loader.png
│ └── banner.png
│
└── MusicRecommenderDB/
└── audio_embeddings.lance
Pipeline ML
Audio File
↓
FFmpeg decoding
↓
PCM float32 16kHz mono
↓
Segmentation 10 secondes
↓
Sélection des segments représentatifs
↓
Musicnn (ONNX Runtime)
↓
Embeddings audio
↓
Mean Pooling + L2 Normalization
↓
Vecteur 200 dimensions
↓
LanceDB
↓
MMR Ranking
↓
Playlist finale
Optimisations ONNX Runtime
so.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
so.intra_op_num_threads = max(1, cpu // 2)
so.inter_op_num_threads = 1
Téléchargement rapide — Windows (sans installation)
Vous n'êtes pas développeur et vous voulez juste essayer l'application ?
Pas besoin d'installer Python, ni de compiler quoi que ce soit.
Étapes
1. Téléchargez le fichier ZIP
👉 MusicRecommender.zip
2. Extrayez le ZIP
Faites un clic droit sur le fichier téléchargé → Extraire tout... → choisissez un dossier.
⚠️ Ne lancez pas l'application directement depuis le ZIP — extrayez d'abord.
3. Installez VLC (si ce n'est pas déjà fait)
VLC est nécessaire pour lire la playlist générée.
👉 https://www.videolan.org/vlc/
4. Lancez l'application
Ouvrez le dossier extrait et double-cliquez sur MusicRecommender.exe.
💡 Note Windows : Si Windows affiche un avertissement de sécurité ("Windows a protégé votre ordinateur"), cliquez sur Informations complémentaires puis Exécuter quand même. Cela est normal pour les applications non signées.
Base de données
Les embeddings audio sont stockés localement dans LanceDB.
Chaque morceau possède un identifiant unique basé sur un hash BLAKE3 du contenu du fichier.
Ainsi :
- un embedding n'est calculé qu'une seule fois ;
- déplacer ou renommer un fichier ne force pas un recalcul ;
- les chemins sont mis à jour automatiquement.
class TrackEmbeddingModel(LanceModel):
file_name: str
file_path: str
file_hash: str
file_size_bytes: int
vector: Vector(200)
Algorithme MMR
Le système utilise Maximal Marginal Relevance (MMR) afin d'équilibrer :
- la pertinence musicale ;
- la diversité des recommandations.
Formule
MMR_score =
λ × sim(profil, candidat)
−
(1 − λ) × max_sim(candidat, sélectionnés)
| λ | Résultat |
|---|
| 1.0 | Pertinence maximale |
| 0.7 | Équilibre pertinence/diversité |
| 0.0 | Diversité maximale |
Installation
Vous êtes développeur et souhaitez modifier ou contribuer au projet ?
Suivez les étapes ci-dessous. Sinon, consultez la section Téléchargement rapide ci-dessus.
Prérequis
- Python 3.10+
- FFmpeg
- VLC Media Player
Clonage
git clone https://github.com/Flex1-tech/Local_Recommendation_Engine.git
cd musical-recommender-v2
Environnement virtuel
Windows
python -m venv .venv
.venv\Scripts\activate
Linux / macOS
python -m venv .venv
source .venv/bin/activate
Installation des dépendances
pip install -r requirements.txt
Vérification
ffmpeg -version
vlc --version
Utilisation
python main.py
Étapes
| Étape | Description |
|---|
| Import | Ajouter des fichiers audio |
| Likes | Sélectionner au moins 3 morceaux |
| Analyse | Lancer le moteur IA |
| Playlist | Génération automatique |
| Lecture | Ouverture automatique VLC |
Demo
Écran d'accueil
Upload des fichiers
Chargement
Like / Delete des morceaux
Chargement IA
Playlist finale dans VLC
Interface utilisateur
Caractéristiques UI
- Interface responsive avec
grid
- Thread dédié pour l'inférence
- UI non bloquante
- Loader animé
- Barre de recherche dynamique
- Gestion thème clair/sombre
- Toasts et feedback utilisateur
Palette
| Élément | Couleur |
|---|
| Accent principal | #FF8E25 |
| Hover | #F36C19 |
Limitations et améliorations
Limites actuelles
- Cold start : lorsqu’une chanson n’a jamais été analysée, le modèle doit calculer son embedding avant de pouvoir l’utiliser dans les recommandations.
- Temps de traitement : pour une grande quantité de fichiers audio, le calcul initial des vecteurs peut prendre du temps.
- Différence entre morceaux connus et inconnus : pour les chansons déjà présentes dans la base, les vecteurs sont récupérés directement depuis LanceDB, ce qui est plus rapide que le recalcul complet.
Travaux à faire
- Rendre l’interface plus fluide et plus réactive pendant les traitements lourds.
- Améliorer l’expérience utilisateur avec un chargement plus progressif et des retours visuels plus clairs.
- Permettre de lier un dossier à l’application pour simplifier l’import et le suivi des bibliothèques musicales.
- Ajouter une clé d’issue ou un score de recommandation basé sur les écoutes passées.
- Étendre le moteur de recommandation avec davantage de signaux de préférence pour personnaliser les résultats.
Améliorations possibles
- Mettre en cache davantage d’états intermédiaires pour réduire le temps de recalcul.
- Ajouter une indexation incrémentale pour traiter uniquement les nouveaux fichiers.
- Affiner le tri et la présentation des playlists pour une navigation plus fluide.
Différences avec la v1
| Fonctionnalité | v1 | v2 |
|---|
| Interface moderne | ❌ | ✅ |
| Recherche dynamique | ❌ | ✅ |
| Threading UI | ❌ | ✅ |
| LanceDB | ❌ | ✅ |
| Cache embeddings | ❌ | ✅ |
| MMR Ranking | ❌ | ✅ |
| Playlist intelligente | Basique | Avancée |
Développement
Vérifier le modèle
python -c "from extraction import load_musicnn; s = load_musicnn(); print('Musicnn OK')"
Vérifier la base
python -c "from extraction import initialize_database; t = initialize_database('.'); print(t.count_rows(), 'entrées')"
Tester un embedding
python -c "
from extraction import compute_embedding, load_musicnn
s = load_musicnn()
v = compute_embedding('test.mp3', s)
print(v.shape if v is not None else 'None')
"
Crédits
-
Musicnn / Essentia
-
CustomTkinter
-
LanceDB
-
BLAKE3
Custom Non-Commercial License (CNC-L)
Version 1.0 — © 2026 Flex1-tech. Tous droits réservés.
Le présent accord de licence (la « Licence ») régit l'utilisation, la copie et la distribution du projet et de l'ensemble de ses fichiers associés (le « Logiciel ») développés par Flex1-tech (l' « Auteur »).
En téléchargeant, installant ou utilisant le Logiciel, vous acceptez d'être lié par les termes de cette Licence.
- Usages Autorisés (Gratuits)
L'Auteur concède par la présente une licence mondiale, non exclusive et non transférable, permettant d'utiliser le Logiciel à titre gratuit exclusivement pour les finalités suivantes :
- Usage Personnel : Utilisation privée par un individu à des fins strictement non lucratives.
- Usage Éducatif et Recherche : Utilisation au sein d'établissements scolaires, universitaires ou de laboratoires de recherche publique.
- Expérimentation : Tests, évaluation technique et contributions non commerciales au code source.
- Restrictions et Usages Commerciaux Interdits
Tout usage non expressément autorisé à l'Article 1 est formellement interdit sans l'obtention préalable d'une Licence Commerciale écrite et signée par l'Auteur. Sont notamment qualifiés d'usages commerciaux :
- Intégration : L'inclusion du Logiciel, en tout ou partie, dans un produit, service ou infrastructure d'une entité commerciale.
- Monétisation : L'utilisation du Logiciel pour générer des revenus, directs ou indirects (abonnements, services payants, support technique facturé, affichage publicitaire).
- Redistribution : La redistribution, la revente ou la sous-licence du Logiciel à des fins commerciales.