
🤞 Just trying to make DJs' lives a bit easier, one library at a time
Maybe this will help you clean up those pesky duplicates and find your missing tracks
- 🎯 Why We Made This
- 🌟 What It Does
- 📱 Screenshots
- 🚀 Quick Start
- 🛠️ For Developers
- 🤝 Contributing
- 🙋♂️ FAQ
- 🛣️ Roadmap
- 🆘 Support & Community
- 📜 License
- 🙏 Acknowledgments
Look, we've all been there. You're prepping for a gig and suddenly realize you have 47 versions of "One More Time" and half your tracks show up as "!" because you moved your music folder again. Frustrating, right?
This little tool is just our attempt to help fellow DJs deal with the chaos. Will it solve all your problems? Probably not. But hopefully it'll save you some time and headaches. I am aware of other (commercial) tools available, like the excellent Rekordbox Collection Tool (RCT) by MixMasterG, but is Mac only and not open-source.
- 🎵 Too Many Duplicates: Same track, but with slightly different names, cluttering everything
- 📁 Missing Files: You know, those dreaded "!" tracks that mess up your flow
- ⏰ Time Sink: Spending more time organizing music than actually mixing it
- 💸 Expensive Tools: Why pay hundreds when it should just... work?
- 🔒 No Control: Can't tweak things the way you want them
Make a simple, free tool that might help you get your library back under control. No promises, but it's worked for us and hopefully will for you too! 🤞
- 🎵 Audio Fingerprinting: Finds identical tracks even when they have different names (pretty cool, right?)
- 📝 Metadata Matching: Compares artist, title, BPM, key - whatever fields you want
- 🎯 Confidence Scoring: Shows how sure we are that tracks are actually duplicates
- 🎛️ Your Rules: Tweak the settings however you like - it's your library!
- 🔎 Smart Search: Tries to find your moved music files automatically
- 🎯 Similarity Matching: Matches tracks even when filenames are different
- 📁 Bulk Operations: Fix hundreds of tracks at once (if you're lucky!)
- ⚡ Fast Enough: Scans through lots of files without making you wait forever
⚠️ Unlocatable Tracking: Marks tracks that couldn't be auto-relocated so you can retry or handle them manually
- 🏆 Quality-Based: Keeps the highest bitrate versions (usually what you want)
- 📅 Date-Based: Keep the newest or oldest files - your choice
- 📂 Folder Preferences: Prioritize tracks from certain folders (like keeping FLAC over MP3)
- ✋ Manual Mode: Check everything yourself if you're the careful type
- 🔄 Picks Up Where You Left Off: No need to start over if you close the app
- 📊 IndexedDB Storage: Built-in browser storage - no external database needed!
- ⚡ Quick Loading: Opens right back to where you were
- 🎯 Per-Library: Keeps results separate for each of your Rekordbox libraries
The main screen - nothing fancy, just gets the job done
This is where the magic happens (hopefully)
For when your tracks decide to play hide and seek
Tweak things until they work the way you want
- Go to Releases
- Download the latest version for your platform:
- Windows:
Rekordbox-Library-Manager-Setup-0.0.4-alpha.exe
- macOS:
Rekordbox-Library-Manager-0.0.4-alpha.dmg
- Windows:
- Install and launch the app
- Export you collection as xml using Rekordbox.
- Load your Rekordbox XML file and start cleaning!
# Clone the repository
git clone https://github.com/koraysels/rekordbox-library-manager.git
cd rekordbox-library-manager
# Install dependencies
npm install
# Launch development version
npm run dev
Before using this tool, you need to export your Rekordbox collection as an XML file:
-
Open Rekordbox on your computer
-
Navigate to File Menu:
- Click File in the top menu bar
- Select Export Collection in xml format
-
Choose Export Location:
- A dialog box will appear
- Choose where to save your XML file (Desktop is recommended for easy access)
- Name your file (e.g., "my-library-backup.xml")
- Click Save
-
Wait for Export:
- Rekordbox will export your entire collection
- This may take a few minutes for large libraries (10,000+ tracks)
- You'll see a progress indicator
💡 Pro Tip: Export your library regularly as a backup! This XML file contains all your playlists, cue points, and track metadata.
You can load your library in two convenient ways:
Option A: Drag & Drop (Easy & Fast)
- Launch Rekordbox Library Fixer
- Simply drag your XML file directly onto the application window
- Drop it anywhere on the interface - the app will automatically detect and load it
- Wait for parsing - the tool will analyze your library structure
Option B: Browse for File (Traditional)
- Launch Rekordbox Library Fixer
- Click "Browse for XML File" in the main interface
- Select your XML file from where you saved it
- Wait for parsing - the tool will analyze your library structure
- Go to "Duplicate Detection" tab
- Configure your detection settings (optional):
- Choose between Audio Fingerprinting and/or Metadata Matching
- Select which metadata fields to compare
- Set path preferences if you have organized folders
- Click "Scan for Duplicates"
- Review the results - duplicates will be grouped by similarity
- Review found duplicates - each group shows similar tracks
- Select which duplicates to resolve (or use "Select All")
- Choose resolution strategy:
- Keep Highest Quality: Automatically keeps best bitrate/quality
- Keep Newest: Keeps most recently modified files
- Keep Preferred Path: Prioritizes tracks from specific folders
- Manual: Review each duplicate individually
- Click "Resolve Selected"
- Confirm the operation - a backup will be created automatically
If you have tracks showing as "!" (missing) in Rekordbox:
- Go to "Track Relocator" tab
- Add search directories where your music might be located
- Configure search settings (depth, file types, similarity threshold)
- Click "Scan for Missing Tracks"
- Review relocation candidates
- Apply relocations for the matches you want to fix
After cleaning your library with this tool, you'll want to import the updated XML back to Rekordbox. Here's the complete process with visual guides:
Step A: Enable XML Import in Rekordbox
Before you can import XML files, you need to enable the XML import feature in Rekordbox:
- Open Rekordbox
- Go to View Settings: Navigate to the top menu and access the view preferences
- Enable "rekordbox xml" in Tree View: Make sure the checkbox for "rekordbox xml" is checked
💡 Important: The "rekordbox xml" option must be enabled in the Tree View section for XML import to work properly.
Step B: Import Your Cleaned XML File
- Navigate to Database Tab: Click on the "Database" tab in Rekordbox
- Access Library Sync: Look for the "Library Sync" section
- Select Your Updated XML: Click "Browse" and select your cleaned XML file (the tool creates a new file with "_cleaned" suffix)
- Configure Import Options:
- ✅ BPM change points: Keep this checked to preserve tempo analysis
- ✅ Select your updated XML file: Make sure you're importing the correct cleaned file
- Click Import: Rekordbox will process your cleaned library
- Wait for Processing: This may take several minutes for large libraries
Step C: Import Your Playlists
After the XML file is imported, you need to import the playlists:
- Navigate to the rekordbox xml section in the left sidebar
- Expand the rekordbox xml tree to see your imported library
- Right-click on "Playlists" under the rekordbox xml section
- Select "Import Playlist" from the context menu
- Confirm the import: Your playlists will be imported with all tracks properly linked
- Verify playlist contents: Check that all playlists now show the correct track counts
If the above method doesn't work, try this alternative:
- In Rekordbox: Go to File → Import → Collection
- Select the updated XML file
- Choose import options:
- ✅ Replace current collection (recommended for cleanest results)
⚠️ Merge with current collection (if you want to keep existing data)
- Wait for import - Rekordbox will process your cleaned library
After importing, verify that everything worked correctly:
- Check Playlist Counts: Your playlists should now show the correct number of tracks (no more empty playlists!)
- Verify Duplicate Removal: Duplicates should be gone from your collection
- Test Relocated Tracks: Previously missing tracks should now play correctly
- Check Metadata: All cues, loops, and beatgrids should be preserved
⚠️ Critical Backup Reminder: Always backup your original Rekordbox database before importing! You can find your Rekordbox database files in:
- Windows:
%APPDATA%\Pioneer\rekordbox
- macOS:
~/Library/Pioneer/rekordbox
The tool creates XML backups automatically, but backing up your entire Rekordbox database is extra protection.
- Frontend: React 18 + TypeScript + Tailwind CSS
- Backend: Electron + Node.js
- Storage: Dexie.js (IndexedDB) - no external database needed!
- State Management: Zustand with persistence
- Testing: Vitest + Playwright
- Build: Vite + electron-builder
# Development
npm run dev # Launch app with hot reload
npm run test:unit # Run unit tests
npm run test:e2e # Run end-to-end tests
# Building
npm run build # Build for production
npm run dist:mac # Create macOS installer
npm run dist:win # Create Windows installer
npm run dist:all # Build for all platforms
src/
├── main/ # Electron main process
├── renderer/ # React frontend
├── shared/ # Shared types & utilities
└── tests/ # Test suites
We welcome contributions from the DJ community! Whether you're a developer or just a DJ with ideas:
- 🐛 Report bugs you encounter
- 💡 Suggest features you'd love to see
- 📝 Share your workflow and use cases
- ⭐ Star the repo to help other DJs find it
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Follow the development setup
- Write tests for your changes
- Submit a pull request
- Serato/VirtualDJ support: Expand beyond Rekordbox
- Playlist duplicate detection: Find duplicates in playlists
- Audio analysis: BPM/key detection for better matching
- Batch processing: Handle multiple libraries
- Plugin system: Custom duplicate detection algorithms
Yes! The tool creates backups before making any changes. Your original files are never modified directly.
Absolutely! Tested with libraries containing 50,000+ tracks. Uses Indexdb (Dexie.js) for performance and persistent storage.
Yes! Every operation creates a backup XML file. You can always restore your library to its previous state.
Currently supports Rekordbox XML format. Serato and VirtualDJ might be supported in future versions if enough people want it.
100% free for personal use! No ads, no subscriptions, no limits. Open source but protected against commercial repackaging.
- Playlist Management: Duplicate detection within playlists
- Better UI: Improved design and user experience
- Performance: Even faster scanning for large libraries
- Auto-updater: Stay updated automatically
- Multi-format Support: Serato, VirtualDJ, Traktor
- *Maintenance Mode
- Auto Import Mode import new tracks, preventing duplicates and replacing lower bitrate tracks with better quality ones. Update all playlists to include the new, higher quality audio file
- Stability & Performance is fine-tuned:
- ⭐ Star this repository to help other DJs find it
- ☕ Buy me a coffee on Ko-fi if this tool saved you time
- 🐦 Share on social media with your DJ friends
- 💝 Contribute code or documentation improvements
- 🎵 Tell other DJs about this tool
This project is licensed under a custom non-commercial license - see the LICENSE file for details.
What this means for you:
- ✅ Free personal use - use it for your own music libraries
- ✅ Study the code - learn from it, contribute improvements
- ✅ Internal business use - use it within your organization
- ✅ Share with friends - distribute freely for non-commercial use
- ❌ No commercial repackaging - can't sell it or offer as paid service
- ❌ No proprietary versions - modifications must stay open source
- Pioneer DJ for creating Rekordbox and the XML export format
- The open-source community for the incredible libraries that make this possible
- Beta testers from the DJ community who helped refine this tool
- All DJs who struggle with library management - this one's for you! 🎵
Made by a DJ who got tired of messy libraries
If this thing actually helped you, maybe give it a star so other DJs can find it? No pressure though! 😊