Is there a way to import playlist data from Google Play Music please?
Playlists in Google Play Music works fundamentally different from playlists in Astiga (in Google Play Music, playlist items are pinned to a specific song; in Astiga they are pinned to a specific file path). Plus, the output of Google Takeout is localised to whatever your local language is, which makes parsing that information even more difficult. For that reason, it is not possible to import playlist data from Google Play Music directly.
There are tools online however that can export Google Play Music playlists to M3U or PLS, and those can be imported in Astiga (with premium), however, I have never tested them and I have thus no idea how well they work (if at all).
Does anyone know what format those playlists are in? The only thing I have seen are Excel spreadsheets that have data on individual songs
I am currently working through this issue, and the short answer is there is no easy way. In most cases (playlists with under 100 songs or only a few playlists, it'll be faster to just manually rebuild the playlist). I've been having trouble with step 13, but in theory, this should allow you to import your playlists.
Long answer: It'll take some export/import work, a couple 3rd party apps, and some excel formulas.
NOTE: I am still in the process of this and am having a hard time with the import, but hopefully someone else will be able to work through that.
Key Requirement: The file structure of your export needs to match the file structure of the cloud storage provider you are using. So if you download all your files via Google Takeout, you will want to upload that structure as is to your cloud storage so that file paths match between local copies and cloud copies.
Step 1: Export playlists from GPM - I used https://soundiiz.com/ to export the playlists only; however, I believe Google Takeout formats the playlist export the same way (title, artist, album, other metadata...).
Step 2: Import music files into music player - For this, I used MusicBee. The player doesn't matter so much as it needs to have a playlist export function that creates a .m3u or .pls with file paths.
Step 3: Export file locations of entire library - From your music player app of choice, create a playlist containing your entire music library and export that playlist as an .m3u or .pls. This will give you a master list of all your music files with the local file path.
Step 4: Open GPM playlist export file - Open the playlist export file in excel, and filter for the playlist you want (select all, data > filter). Select all the tracks that are part of that playlist and copy all the data to a new workbook (Playlist File).
Step 5: Merge datasources - In the new workbook (Playlist File), create a sheet called "Full Library". Open the playlist file from the music app that has all the file paths of your library and copy everything to the "Full Library" sheet in the new workbook.
Step 6: Build the formulas - This method is based on doing a search of the library and returning the row that first matches. There are a few caviots to this method:
Create a column called "File Path Row". In this column, put the formula =MATCH("*"&A2&"*",'Full Library'!$A$1:$A$14861,0) where A2 is the column of the track title and ,'Full Library'!$A$1:$A$14861 is the full range of all file paths. In this example, my library had 14861 rows of file paths. This formula will return the row number where a match was made. Copy this formula down for every title in the playlist (click and hold the little square in the corner and drag down to the bottom of the list). Any instances of #N/A means a match was not returned.
Step 7: Refine the track names - In some cases, track names may not match the file name (common if you renamed the files or files had invalid characters for filenames (such as \ / , : ; etc.). Filter for files that didn't match (#N/A in the "File Path Column") and see if there are any special characters in the name or patterns. If there are, look what the substitution for that file and create a new column making that substitution (=SUBSTITUTE(A2,"[initial character]","[replacement character")). Copy down list.
Step 8: Add on to formulas - Edit the "File Path Row" formula to include the adjust tract titles as well. This is done using the =IFNA() formula, so if you added a second column of adjusted track titles, your new formula would be =IFNA(MATCH("*"&A2&"*",'Full Library'!$A$1:$A$14861,0),MATCH("*"&B2&"*",'Full Library'!$A$1:$A$14861,0), where A2 is the first column of track titles, and B2 is the second column of adjusted track titles. You can extend this formula as long as needed. I needed to do one substitution and a trim of file name lenghts, so my final lookup formula looked like =IFNA(MATCH("*"&A2&"*",'Full Library'!$M$1:$M$14861,0),IFNA(MATCH("*"&B2&"*",'Full Library'!$M$1:$M$14861,0),MATCH("*"&C2&"*",'Full Library'!$M$1:$M$14861,0))).
Step 9: Get file paths - In a new column, put the formula =INDIRECT(ADDRESS(P2,1,,,"Full Library")), where P2 is the "File Path Row" column and "Full Library" is the title of the sheet where the full list of library paths are. This formula will return the actual file path (the 1 being the column identifier). This formula is the foundation to find the file paths for the files in your playlist.
Step 10: FIll in missing file paths - Copy your column with file names to a new column (pasting as values instead of formula). With the majority of files found, manually search for the remaining #N/A file paths and manually type them in this new column.
Step 11: Verify playlist - once most or all the files have been located, copy the list of file paths into a new notepad text file. Each line should be a single file path. Save the file and rename the file extension to .m3u. Import the new playlist file into your local music player (MusicBee) and verify that all files show up. If there are any errors, fix and export again.
Step 12: Adjust the file path - Once all files have been identified and verifed through your music app, export the new playlist. Open the file in Notepad and begin substitutions. Align the path so the top level aligns with the top level of you cloud provider and replace slashes.
EX if you path is C:\Users\[username]\Music\Music Library\Artist Name\Ablum Name\Track 1.mp3 and the "Music" folder is the top-level folder in your cloud service, your new pathname would be ./Music Library/Artist Name/Album Name/Track 1.mp3
Step 13: Import the playlist - save the playlist file to the top level of your cloud service, search of it in Astiga, and import.
EX Using C:\Users\[username]\Music\Music Library\Artist Name\Ablumn Name\Track 1.mp3 example, if the "Music" folder is the top level folder, that is where the playlist file would need to be saved in your cloud provider
Thanks @MusicHorder for all that time and effort. For that exporting I am also planning to look into https://musconv.com/how-it-works/ and https://gist.github.com/rhasselbaum/e1cf714e21f00741826f.
First i need to understand how Astiga does playlists.
Thanks @Koen, especially for "(in Google Play Music, playlist items are pinned to a specific song; in Astiga they are pinned to a specific file path)".
This helps understand how a playlist is defined in the two different systems and, the differences between those definitions.
What exactly do you mean by a "playlist item" please?
@Koen Actually i see that Google's Takeout from their music includes playlists. It's a tree structure of files rather than the one file that i was expecting, but i'm relieved that means i have the data there. I can then data wrangle + code my way to whatever Astiga needs. I just need to know what that is.
Is it a case of gettting it into an M3U or PLS format? Is that one file, or do we need to put a flag on the individual song files in our cloud storage (gDrive in my case)?
By playlist item I mean song, or audiobook, or a podcast episode whatever you have in your playlist.
You can also look into https://asti.ga/developers/#playlists if you are going to create something to convert the playlists yourself, depending on your programming skills.
Thanks @Koen . Yes the python + json or xml suits me. For now i'm pursuing an alternative solution but thanks again and best of luck with this project. It's not open source and possible to follow on Github or somewhere is it?
Best of luck 😃
The app is open source (https://github.com/Koenvh1/Subsonic/tree/astiga), the server is not.
@Koen re-opening this, I can't seem to get the .m3u or .pls files to properly load in asti.ga. Even pulling the paths via API and putting them into a .m3u file still seems to return a "no such file" error, even though the playlist is in the top-level (so the path returned via API should match from that playlist location). I've tried it with both a starting / and withouth.
Any help on .m3u formatting for import would be appreciated. I can try with parsing for songID and using the API, but doing the proper matching will take a bit more time than being able to just import via .m3u, since I already have the playlists in local storage that matches the cloud storage Asti.ga is pulling from.
@MusicHorder Have you tried it using https://play.asti.ga/import-playlists ?
The most common issue is that your playlist file uses absolute paths, e.g. C:\Users\Bob\Music\example.mp3 instead of .\example.mp3. The former is not supported as the path on your cloud storage does not match that 99% of the time.
I made the paths relative, but I can't seem to land on the formating.
For example, I'm syncing a "Music" folder in Google Drive, and within this folder, I have several subfolders containing the music files. I would think if the .m3u playlist file is in the "Music" folder, then the path to the song files would follow something like
/subfolder 1/artist folder/album folder/song name.mp3
but doing so seems to return the error. I know that is the path as using the API to locate that song returns that exact path as well.
I've also tried
subfolder 1/artist folder/album folder/song name.mp3
./subfolder 1/artist folder/album folder/song name.mp3
./Music/subfolder 1/artist folder/album folder/song name.mp3
but none seem to work.
Any help is appreciated.
@MusicHorder How about now? :-)
Not sure what you updated, but it's working now with ./ at the parent level.