- App macOS
- Local-first
- Analyse audio
CueFlow
Un gestionnaire de bibliothèque pour DJ qui analyse, organise et prépare les morceaux jusqu'à Rekordbox, et transforme les vidéos de sets en clips, sans jamais modifier les fichiers d'origine.
- Contexte
- Projet personnel
- Période
- 2026
- Type
- App macOS à installer, local-first
- Pour
- DJ House, Tech House et UK House
Le projet
Analyser intelligemment, laisser le DJ décider.
Préparer un set, c'est trier des milliers de morceaux aux métadonnées incohérentes, retrouver le BPM et la tonalité, poser des cue points et nettoyer les doublons. CueFlow scanne une bibliothèque locale, la normalise dans un catalogue consultable et accompagne le DJ jusqu'à l'export vers Rekordbox, puis jusqu'aux réseaux sociaux avec les clips de ses sets.
Le principe de départ est strict : CueFlow ne réécrit jamais les tags d'un fichier, ne supprime jamais définitivement un morceau et ne touche jamais directement à la base Rekordbox. Le nettoyage passe par une confirmation puis par la Corbeille macOS, et les suggestions de genre sont validées avant d'entrer au catalogue.
CueFlow s'installe comme une application macOS : un shell Electron embarque Python, PostgreSQL, l'API, l'interface et un FFmpeg sous licence LGPL, les démarre et les surveille. Rien d'autre à installer, et rien ne quitte le Mac.
Ce que j'ai construit
Du scan à l'export Rekordbox
- 01
Analyse audio
BPM, beatgrid, premier temps, tonalité, énergie et voix par mesure, structure (intro, groove, break, build, drop, outro), calculés en local.
- 02
Préparation DJ
Hot cues et memory cues générés depuis les sections, éditeur de beatgrid, boucles, sections et notes, XML Rekordbox réécrit après chaque analyse.
- 03
Bibliothèque
Scan incrémental, empreinte SHA-256 pour suivre les fichiers déplacés, recherche et filtres, playlists manuelles et intelligentes.
- 04
Nettoyage sûr
Doublons exacts et probables, morceaux trop courts : chaque action est confirmée et les fichiers partent à la Corbeille.
Architecture
Tout tourne sur le Mac du DJ
Une app à installer : l'interface, l'API, l'analyse et la base de données tournent sur le Mac, sans service en ligne.
1 · App macOS
- Shell ElectronDémarre et surveille les services
- Interface Next.jsBibliothèque, éditeur, revue, sets
2 · API locale
- FastAPIRoutes fines, logique dans les services
- Tâches de fondCalculs lourds hors du processus de l'API
3 · Analyse
- FFmpegDécodage audio
- EssentiaBPM, tonalité, genres, voix
- Moteur de règlesSections et cues, mesure par mesure
4 · Données
- PostgreSQLCatalogue, SQLAlchemy et Alembic
- Fichiers audioLus, jamais modifiés
5 · Sorties
- Rekordbox XMLImporté par le DJ
- Corbeille macOSSeule issue du nettoyage
Zoom technique
Des timestamps calculés, pas inventés
Les positions précises dans un morceau viennent d'outils d'analyse audio déterministes (FFmpeg, Essentia et le modèle beat_this pour les temps et les premiers temps), puis d'un moteur de règles qui découpe le morceau en sections mesure par mesure. Un modèle de langage ne devine jamais un timestamp à partir du son brut.
Un drop exige le kick et la basse à pleine puissance pendant au moins 8 mesures : les faux drops, roulements de kick et ouvertures de filtre restent dans la montée. Des jeux de référence mesurés sur dix vrais morceaux protègent ces règles des régressions.
- 1ScanFichiers lus, métadonnées normalisées, empreinte SHA-256
- 2AnalyseBPM, beatgrid, tonalité et structure en local
- 3RevueLe DJ valide genres, grilles et corrections
- 4ExportXML importé dans Rekordbox par le DJ
Les défis
Ce qui rendait le projet difficile
Des cues décalés dans Rekordbox
Rekordbox décode un MP3 plus tôt que CueFlow : il garde le délai de l'encodeur et joue la trame d'information LAME, soit environ 50 ms d'écart.
Ma réponse
Le scanner lit ce décalage fichier par fichier et les positions exportées le compensent, avec un réglage manuel en plus.
Garder la grille du DJ
Un DJ a souvent déjà calé ses grilles dans Rekordbox, et l'analyse de CueFlow peut ne pas être d'accord.
Ma réponse
Import de la collection Rekordbox : sa grille est conservée et les cues s'y alignent. Une page Corrections liste les désaccords, le DJ tranche et peut annuler.
Couper un clip pile sur le drop
Copier le flux vidéo ne coupe que sur les images clés, ce qui décale le drop de plusieurs secondes.
Ma réponse
Clips calés sur les mesures et réencodés (H.264, AAC 320 kb/s), métadonnées de la caméra retirées, vidéo d'origine jamais modifiée.
En cours
Un moteur d'analyse maison, jamais moins bon
Essentia est sous licence AGPL et ses modèles de genre sont réservés à un usage non commercial : ils bloquent une distribution propriétaire de l'app macOS. Je construis un moteur natif à côté : décodage FFmpeg, spectres, attaques et bandes de fréquence en numpy, temps et premiers temps par beat_this en une passe, tonalité par un chroma maison comparé à des profils publiés.
Il ne devient le moteur par défaut que s'il égale l'actuel sur chaque mesure d'un benchmark, à un point près. Ce benchmark compare l'analyse aux grilles et tonalités Rekordbox du DJ : BPM exact, phase de la grille à 15 ms près, premier temps, tonalité.
Analyse
7 à 12 s
par morceau, sur plusieurs processus en parallèle
Set Clips
~10 s
d'analyse par heure de vidéo, à mémoire constante
Au-delà de la bibliothèque
Des outils pour tout le travail du DJ
- Éditeur audioCouper, copier, coller, fondus, gain, normalisation, comparaison A/B ; l'export crée un nouveau fichier qui garde grille, cues et sections, l'original n'est jamais écrasé.
- Set ClipsImport de la vidéo d'un set, détection des drops, breaks, montées et transitions, puis clips de 60 secondes maximum, au format d'origine ou vertical.
- Réseaux sociauxLégendes Instagram et TikTok, calendrier de diffusion et reconnaissance locale des morceaux joués, au tempo du set. La publication reste manuelle.
- CorrectionsLà où l'analyse de CueFlow et la grille Rekordbox divergent (demi-temps, BPM doublé, phase, premier temps, tonalité), le DJ choisit et peut annuler.
- Set BuilderÀ partir d'un morceau de départ, une recherche déterministe propose une suite et explique chaque transition : tonalité, BPM, énergie, variété.
Décisions techniques
Les choix, et pourquoi
- Local-first
- PostgreSQL et fichiers audio en local, sans dépendance au cloud : la bibliothèque du DJ ne quitte pas sa machine.
- XML Rekordbox
- CueFlow n'écrit jamais dans la base Rekordbox : il tient à jour un XML que le DJ importe quand il le décide.
- Analyse déterministe
- BPM, beatgrid, tonalité et structure viennent du traitement du signal et de règles explicables plutôt que d'une IA générative.
- Empreinte SHA-256
- Le hash identifie le contenu du fichier : un morceau déplacé ou renommé garde tout son historique.
- FastAPI + Next.js
- Une API Python pour l'analyse et le système de fichiers, une interface Next.js qui ne contient aucune logique métier.
- Electron
- Une app macOS qui embarque et supervise les services locaux, sans rien installer à part.
Et ensuite
Sur la feuille de route
- Moteur d'analyse natif par défaut, puis voix et genres sans Essentia
- App macOS distribuable une fois Essentia et ses modèles remplacés
- Effets dans l'éditeur : égaliseur, filtres, compresseur, pitch shift, time stretch
- Classification, recherche sémantique et Set Builder assisté avec Ollama, en local
Stack
Les outils du projet
- Next.js
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- TanStack Query
- WaveSurfer.js
- Python
- FastAPI
- PostgreSQL
- SQLAlchemy
- Alembic
- FFmpeg
- Essentia
- numpy
- beat_this
- Electron
- Docker