Inspiration
There’s something magical about old music—scratchy cassette recordings, mismatched MP3 filenames, and the nostalgia of another era. Yet, these treasures often get lost in the shadows of modern streaming. RetroStream 2000 was born out of a love for vintage music and a desire to bring those tracks back to life by connecting them with the digital music ecosystem of today.
Our goal was to create a tool that revives dusty local music libraries, aligns them with modern streaming platforms like Spotify, and curates a blended experience of the past and present.
What it does
RetroStream 2000 is a bridge between two eras. It: • Scans a user’s local music directory for audio files (e.g., .mp3, .wav). • Extracts and cleans metadata (artist, album, year, etc.). • Uses fuzzy matching and audio fingerprinting to identify tracks. • Matches tracks to Spotify equivalents using the Spotify Web API. • Automatically creates playlists on Spotify with matched songs. • (Optional) Visualizes music collection stats like genre or decade distribution.
How we built it
We used a combination of Python libraries and web APIs:
🧠 Backend Logic • File Scanning & Metadata Extraction: Libraries like os, mutagen, and eyed3 were used to traverse directories and extract metadata such as artist name, title, and album. • Data Cleaning: Applied string normalization, case-folding, and token filtering to clean irregular metadata formats. • Matching Engine: • Fuzzy Title/Artist Matching: Used difflib.get_close_matches and Levenshtein distance to match local track info to Spotify entries. • Audio Fingerprinting (Optional): Used tools like pydub, acoustid, and chromaprint to identify songs when metadata was insufficient. • Spotify Integration: Used spotipy with Spotify’s OAuth2 to search for tracks and generate playlists programmatically.
🖥️ Optional UI
We also experimented with building a lightweight frontend using Tkinter to allow drag-and-drop directory input and playlist creation without command-line interaction.
Challenges we ran into
• Inconsistent Metadata:
Old MP3 files often had missing or incorrect metadata. We had to implement several layers of fallback (fuzzy title match → audio fingerprinting → manual suggestion). • Rate Limits: Spotify API imposes rate limits. We had to throttle requests and cache results efficiently. • Duplicate and Corrupt Files: Handling files that couldn’t be parsed or were duplicated was necessary for clean playlist generation. • Authentication Flow: Implementing Spotify’s OAuth securely for CLI-based Python apps required careful session handling.
Accomplishments that we're proud of
Achieved over 90% match accuracy on test libraries with messy or minimal metadata. • 🎵 Brought hundreds of forgotten tracks back to life on modern platforms. • 🔁 Built a fully automated pipeline: scan → match → playlist in just a few clicks. • ⚙️ Designed matching algorithms that intelligently choose between metadata, fuzzy search, and audio analysis. • 💡 Developed a tool that’s both technically robust and emotionally meaningful to users.
What we learned
• The intricacies of handling real-world, messy audio data.
• Working with Spotify’s API for search and playlist automation.
• Implementing fuzzy logic and string similarity for best-match suggestions.
• How nostalgia and modern tech can blend to create something emotionally impactful.
From a technical perspective, we also got more hands-on with: • Python I/O and metadata parsing. • Using token-based APIs with OAuth. • Caching and rate-limit management in API workflows. • Optional: O(n^2) fuzzy comparisons were replaced with hash maps and tokenized cosine similarity for scalability.
What's next for RetroMusic2000
• Add support for Apple Music, YouTube Music, etc.
• Export playlists to CSV or shareable links
• Build a proper cross-platform GUI using Electron or PyQt
• Visualize user’s musical timeline and genre evolution
• Add batch-fix suggestions for broken or ambiguous metadata
Built With
- mutagen
- pyqt5
- python
- spotifywebapi
- spotipy


Log in or sign up for Devpost to join the conversation.