Every year, I jokingly set New Year’s resolutions based on whatever is on my mind at the time. Sometimes these resolutions morph into serious life changes, and other times, I abandon them immediately. This year, one of my resolutions was to listen to more music, assuming it would make me happier and more prosperous moving forward. As I pondered how to measure my success at this—I began exploring available solutions. Technically, there’s a dominant choice among music enthusiasts: Last.fm. However, my initial experience on Last.fm was marred by ads and prompts to subscribe, which was less than ideal.

In search of an alternative, I turned to GitHub and discovered a project that seemed to be the perfect solution. Given the variety of services I use for music (like Roon, Apple Music, Qobuz), I found that I’d still need to use Last.fm in the short term to log my listens. However, I came across a fantastic project called Multi-Scrobbler, which acts as a proxy to scrobble music from one service to another. This discovery allowed me to maintain my current setup while utilizing a more open platform, ListenBrainz, free from ads. ListenBrainz offers the unique feature of creating playlists based on listening habits but outputs them in the somewhat obscure JSPF format, which none of my services support, necessitating a conversion solution.

This need led to the inception of my project, Jspfconvert—a perfect opportunity to test whether ChatGPT could develop a functional solution. I envisioned a simple, single-page application (SPA) for this task.

Screenshot of a chat message requesting the creation of a simple web application for converting jspf files to m3u format through a drag-and-drop interface.

Initially, ChatGPT suggested a Node.js backend with a modern frontend framework, but I specified the need for a straightforward SPA, and off we went.

Screenshot of a response from ChatGPT detailing the creation of a Single Page Application (SPA) for converting JSPF files to M3U format. It outlines the use of HTML, CSS, and JavaScript, and suggests the possible inclusion of a framework or library like React, Angular, or Vue.js. The response includes two sections: 1. Front-End Development with technologies and steps for creating the user interface, and 2. Drag-and-Drop and File Input Handling, with instructions for implementing drag-and-drop functionality for file input.

Once m3u was done I learned Soundiiz.com also accepts XSFP so I quickly added this and here we are:

A user interface design for a web application featuring a drag-and-drop upload area. The interface includes a prominent button labeled 'Convert to XSFP' and instructional text below that reads 'Drop JSPF file here or click to upload. Convert your playlist to M3U or XSPF format.

So far so good on my goal:

Bar chart displaying listening activity from 2002 to 2024 with a total of 14410 listens and an average of 627 listens per year.

Take a look at the app over at https://jspfconvert.pages.dev/. And if you’re curious about the code behind it, feel free to dive into the GitHub repo at diblasio/jspfconvert.

Cheers!