The Ultimate Music Organization System
Transform your chaotic music collection into a beautifully organized, media-server-ready library with intelligent metadata enrichment, relationship mapping, and real-time visualization.
ordr.fm isn't just another music organization tool. It's a comprehensive system that combines the power of professional-grade bash scripting with modern web technology to deliver:
- π§ Intelligent Organization: Album-centric processing that preserves integrity while handling edge cases
- π Relationship Discovery: Uncover hidden connections between artists, labels, and collaborations
- π Real-time Visualization: Interactive PWA dashboard with advanced search, mobile optimization, and offline support
- π Dual Metadata Sources: Combine Discogs and MusicBrainz for unparalleled metadata quality
- β‘ High Performance: Parallel processing with database query caching and real-time progress tracking
- π‘οΈ Safety First: Comprehensive dry-run mode, atomic operations with rollback, and extensive test coverage
- π΅ Audio Integration: Built-in audio player with waveform visualization and playlist management
- βοΈ Cloud Backup: Automated Google Drive backup with resume capability and progress monitoring
- π Metadata Editing: In-place editing interface with change tracking and validation
- π Advanced Search: Saved search presets, history tracking, and multi-criteria filtering
# Download and start with Docker Compose
curl -O https://raw.githubusercontent.com/adrianwedd/ordr.fm/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/adrianwedd/ordr.fm/main/.env.example
cp .env.example .env && nano .env # Configure your music paths
# Start the complete system
docker-compose up -d
# Access web dashboard
open http://localhost:3000# Clone and setup locally
git clone https://github.com/adrianwedd/ordr.fm.git
cd ordr.fm
./setup_wizard.sh
# Start web interface
cd visualization && npm install && npm start# Preview your organization (100% safe)
./ordr.fm.sh --source "/path/to/messy/music" --destination "/path/to/organized"
# Actually organize (when you're ready)
./ordr.fm.sh --source "/path/to/messy/music" --destination "/path/to/organized" --moveTarget Structure:
π Organized Music/
βββ π Lossless/
β βββ π Aphex Twin/
β β βββ π Selected Ambient Works 85-92 (1992)/
β β βββ π΅ 01 - Xtal.flac
β β βββ π΅ 02 - Tha.flac
β βββ π Boards of Canada/
βββ π Lossy/
βββ π Various Artists/
βββ π Warp10+3 Influences (1999)/
Enrich your metadata with professional databases:
# Electronic music with label-based organization
./ordr.fm.sh --enable-electronic --discogs --move
# Combined metadata from multiple sources
./ordr.fm.sh --discogs --musicbrainz --confidence-threshold 0.8 --moveWhat you get:
- π·οΈ Catalog Numbers:
[WARP123] Artist - Album - ποΈ Label Organization: Group releases by electronic music labels
- π₯ Artist Relationships: Discover collaborations and aliases
- π Release Information: Country, format, year, barcode
- πΉ Remix Detection: Separate remixes from originals
Professional visualization and management interface:
Core Features:
- π Interactive Network Graphs: Explore artist collaborations and relationships
- π Live Statistics: Real-time organization progress with caching optimization
- π Batch Processing: Enrich hundreds of albums automatically
- π± Mobile-First Design: Touch gestures, swipe navigation, haptic feedback
- β‘ WebSocket Updates: See changes happen in real-time
- πΆ Offline Support: PWA functionality with service worker caching
Advanced Features:
- π΅ Built-in Audio Player: Stream and preview tracks with waveform visualization
- π Metadata Editor: Edit album and track information with change tracking
- βοΈ Cloud Backup: Automated Google Drive backup with progress monitoring
- π Advanced Search: Multi-criteria search with saved presets and history
- π Analytics Dashboard: Collection insights, quality distribution, and trends
- π§ Configuration Management: Web-based settings with validation
- π Action Center: Process albums, backup data, and manage operations
ordr.fm combines the best of both worlds:
- Metadata Extraction:
exiftool+jqfor comprehensive audio analysis - Database Operations: SQLite for tracking and undo capabilities
- File Operations: Atomic moves with rollback support
- Parallel Processing: Multi-core utilization for large collections
- Progressive Web App: Service worker, offline support, mobile optimization
- Enhanced APIs: Advanced search, metadata editing, audio streaming
- Database Caching: Query optimization with 5-minute TTL
- Real-time Features: WebSocket support for live updates
- Audio Integration: Range request support for streaming and waveform data
- Cloud Integration: Google Drive backup management
- Error Handling: Comprehensive retry logic and connection monitoring
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Web Browser βββββΊβ Node.js API βββββΊβ Bash Scripts β
β (Dashboard) β β (MusicBrainz) β β (Processing) β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β D3.js β β SQLite β β Audio Files β
β (Visualization) β β (Database) β β (Your Music) β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
ordr.fm includes comprehensive test coverage to ensure reliability and stability:
# Run all tests (unit, integration, end-to-end)
./run_all_tests.sh
# Run specific test suites
./tests/unit/test_argument_parsing.sh
./tests/unit/test_metadata_functions.sh
./tests/integration/test_web_api_integration.sh
./tests/integration/test_end_to_end_workflow.sh
# Run Playwright browser tests
cd visualization && npm test- 90%+ Overall Coverage: Critical functionality thoroughly tested
- Unit Tests: 60+ test cases covering core functions and edge cases
- Integration Tests: 30+ test cases covering workflows and API endpoints
- End-to-End Tests: Complete user workflow validation
- Browser Tests: 150+ cross-browser tests (Chrome, Firefox, Safari)
- Performance Tests: Response time and scalability validation
- β Argument Parsing: All CLI argument validation and edge cases
- β Metadata Processing: Quality detection, path building, validation
- β API Integration: All REST endpoints, caching, error handling
- β Database Operations: CRUD operations, transactions, integrity
- β File Operations: Organization workflows, safety mechanisms
- β PWA Functionality: Offline support, mobile features, performance
- β Error Handling: Network failures, invalid inputs, recovery
curl -sSL https://raw.githubusercontent.com/adrianwedd/ordr.fm/main/install.sh | bash# Install system dependencies
# Ubuntu/Debian:
sudo apt update && sudo apt install -y exiftool jq sqlite3 nodejs npm parallel bc rsync curl
# macOS:
brew install exiftool jq sqlite node parallel bc rsync curl
# Clone and setup
git clone https://github.com/adrianwedd/ordr.fm.git
cd ordr.fm
./setup_wizard.sh
# Install visualization dashboard dependencies
cd visualization && npm install# Quick start with Docker
docker run -v /music:/data/music:ro \
-v /organized:/data/organized \
-p 3000:3000 \
adrianwedd/ordr.fm:latest
# Or use docker-compose (see docs/docker-compose.yml)
docker-compose up -d# Enhanced metadata for classical works
./ordr.fm.sh --musicbrainz \
--organization-mode artist \
--source "/music/classical" \
--move# Label-based organization for electronic music
./ordr.fm.sh --enable-electronic \
--discogs \
--organization-mode label \
--min-label-releases 3 \
--move# Process 10,000+ albums efficiently
./ordr.fm.sh --parallel \
--max-parallel-jobs 8 \
--enable-electronic \
--discogs \
--move \
--log-level debug- Start Server:
cd server && npm start - Access Dashboard: Visit http://localhost:3000
- Load Collection: Browse and select albums
- Enrich Metadata: Batch process with MusicBrainz/Discogs
- Visualize Relationships: Explore artist collaboration networks
- Organize Files: Apply organization with real-time progress
# Core paths
export ORDR_SOURCE_DIR="/music/unsorted"
export ORDR_DEST_DIR="/music/organized"
export ORDR_UNSORTED_DIR="/music/needs-review"
# API tokens
export DISCOGS_USER_TOKEN="your_discogs_token"
export MUSICBRAINZ_USER_AGENT="YourApp/1.0"
# Processing options
export ORDR_ENABLE_PARALLEL=1
export ORDR_MAX_PARALLEL_JOBS=4
export ORDR_ENABLE_ELECTRONIC=1# Organization behavior
ORGANIZATION_MODE="hybrid" # artist, label, or hybrid
MIN_LABEL_RELEASES=3 # Minimum releases for label folder
QUALITY_DETECTION_MODE="strict" # strict, permissive, or mixed
# Metadata enrichment
DISCOGS_ENABLED=1
DISCOGS_CONFIDENCE_THRESHOLD=0.7
MUSICBRAINZ_ENABLED=1
MUSICBRAINZ_CONFIDENCE_THRESHOLD=0.8
# Artist alias resolution
GROUP_ARTIST_ALIASES=1
ARTIST_ALIAS_GROUPS="Aphex Twin,AFX,Polygon Window|Four Tet,Kieran Hebden"
# Electronic music features
ENABLE_ELECTRONIC_ORGANIZATION=1
SEPARATE_REMIXES=1
ENABLE_VINYL_MARKERS=1
DETECT_COMPILATION_RELEASES=1# Get collection statistics
GET /api/stats
# List albums with filtering
GET /api/albums?quality=Lossless&limit=50
# Artist relationships
GET /api/artists/relationships# Search for releases
GET /api/musicbrainz/search/releases?artist=Aphex%20Twin&title=Syro
# Enrich single album
POST /api/musicbrainz/enrich-album/123
# Batch enrich albums
POST /api/musicbrainz/batch-enrich# Network graph data
GET /api/visualization/network?type=artist&depth=2
# Genre distribution
GET /api/genres/distribution
# Label relationships
GET /api/labels/relationships// Real-time updates
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
switch(data.type) {
case 'batch_progress':
updateProgress(data.processed, data.total);
break;
case 'album_enriched':
refreshVisualization();
break;
}
};Automatically group artists with multiple names:
# Configure alias groups
ARTIST_ALIAS_GROUPS="Uwe Schmidt,Atom TM,Atom Heart,Senor Coconut|Richard D. James,Aphex Twin,AFX"
# Enable alias grouping
./ordr.fm.sh --group-artist-aliases --moveIntelligent handling of mixed-format albums:
# Strict: Album quality based on highest quality file
# Mixed: Separate folders for mixed-format albums
# Permissive: More flexible quality determination
./ordr.fm.sh --quality-detection-mode mixed --moveEvery operation is tracked and reversible:
# Undo last organization operation
./ordr.fm.sh --undo-last-operation
# Rollback specific operation by ID
./ordr.fm.sh --rollback-operation "op_20231201_143022"
# List all operations
./ordr.fm.sh --list-operations# Enable performance tracking
./ordr.fm.sh --enable-performance-tracking --move
# View performance statistics
./ordr.fm.sh --show-performance-stats- Dry-run by Default: Never moves files without explicit
--moveflag - Atomic Operations: All-or-nothing file operations with rollback
- Checksum Verification: Ensures file integrity during moves
- Backup Creation: Optional backup before any modifications
- Comprehensive Logging: Audit trail of all operations
- No Credential Storage: API tokens via environment variables only
- Least Privilege: Minimal filesystem permissions required
- Rate Limiting: Respectful API usage to prevent blocking
- Input Validation: Sanitization of all user inputs and filenames
| Collection Size | Processing Time | Memory Usage | Throughput |
|---|---|---|---|
| 1,000 albums | 2-5 minutes | 150MB | 5-8 albums/sec |
| 10,000 albums | 20-45 minutes | 300MB | 4-6 albums/sec |
| 100,000 albums | 3-6 hours | 500MB | 3-5 albums/sec |
# Use parallel processing
./ordr.fm.sh --parallel --max-parallel-jobs 8
# Enable caching for metadata
export ORDR_ENABLE_METADATA_CACHE=1
# Use SSD storage for databases
export ORDR_DB_PATH="/fast/ssd/ordr.fm.db"
# Optimize for your collection type
./ordr.fm.sh --optimize-for electronic # or classical, rock, mixed- Documentation: Full Documentation
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Discord: Join our Discord (coming soon)
- Docker Image: Official Docker Hub images
- Web GUI: Complete web-based organization interface
- Mobile App: Companion mobile app for remote monitoring
- Cloud Sync: Integration with cloud storage services
- AI Enhancement: Machine learning for automatic genre classification
- Plugin System: Extensible architecture for custom processors
We welcome contributions! Check out our Contributing Guide for:
- π Bug reports and fixes
- β¨ Feature requests and implementations
- π Documentation improvements
- π Translations and internationalization
- π¨ UI/UX enhancements
Released under the MIT License. Free for personal and commercial use.
- ExifTool by Phil Harvey - The backbone of our metadata extraction
- MusicBrainz - Comprehensive music metadata database
- Discogs - Electronic music metadata and catalog numbers
- D3.js - Powerful data visualization
- Our Contributors - Making ordr.fm better every day
Ready to transform your music collection?
π₯ Download | π Documentation | π Quick Start | π¬ Community
Made with β€οΈ by music lovers, for music lovers.
