swingmx / swingmusic

Swing Music is a beautiful, self-hosted music player for your local audio files. Like a cooler Spotify ... but bring your own music.
https://swingmx.com
MIT License
666 stars 41 forks source link

Built-in Spotify Sync using freyr #195

Open Atlas7005 opened 4 months ago

Atlas7005 commented 4 months ago

I love this project, and you guys have done some fantastic work! A feature that would add infinitely to the project is a way to link to a song, album, playlist, or artist from Spotify, and it will automatically get downloaded to the app's first root directory (or something).

I use freyr to do that, but it requires me to log in to the server where I host Swing. It would be so cool to have this implemented in some way.

I also see that you guys have some early plugin support. It would be nice to see some documentation on that, too!

cwilvx commented 4 months ago

hello @Atlas7005

Thanks for the feature suggestion. It would be a really nice feature, but it wouldn't be part of the Swing Music core.

If you're interested in working on it as a plugin, you're welcome. As you mentioned, docs on plugins would be helpful, and they should be arriving in the near future. You can find some WIP on other areas in the .github/code.docs directory in this repo.

If you're interested, you can find us in the Swing Music Community on telegram. You can also dm me, I can show you the ropes as you wait for the docs.

Thank you.

sortedcord commented 4 months ago

@Atlas7005 I just checked out freyr and it looks pretty good. One thing that I'm not clear about is where it fetches the download from? Is it from the specified streaming service or specifically from youtube?

image

From above it does look like it's sourcing the downloads from youtube and if that is the case, then why would they be downloading it at 320kbps (since max supported is 128opus/256aac at best)?

Specifically for spotify sync, I would recommend using something like zotify which directly sources the .ogg files (320/160vorbis) and their respective metadata (including misc files such as lyrics and canvas) from spotify's servers. I've looked at their code and it would be pretty simple to modify it to fit in as a plugin for swing.

In addition to this, since the files are sequentially downloaded, it would also be possible to stream the files without waiting for it to be fully downloaded (or have an option to not save the download at all)

I didn't know anything about freyr until today, so the points that I have listed above might also hold true for freyr, so please let me know..

Atlas7005 commented 4 months ago

@Atlas7005 I just checked out freyr and it looks pretty good. One thing that I'm not clear about is where it fetches the download from? Is it from the specified streaming service or specifically from youtube?

image

From above it does look like it's sourcing the downloads from youtube and if that is the case, then why would they be downloading it at 320kbps (since max supported is 128opus/256aac at best)?

Specifically for spotify sync, I would recommend using something like zotify which directly sources the .ogg files (320/160vorbis) and their respective metadata (including misc files such as lyrics and canvas) from spotify's servers. I've looked at their code and it would be pretty simple to modify it to fit in as a plugin for swing.

In addition to this, since the files are sequentially downloaded, it would also be possible to stream the files without waiting for it to be fully downloaded (or have an option to not save the download at all)

I didn't know anything about freyr until today, so the points that I have listed above might also hold true for freyr, so please let me know..

It queries YouTube Music first, then if no sources are found, it will query normal YouTube. I have never heard of zotify, but it looks pretty good. I have decided to move away rom Swing for now, due to already using Jellyfin for movies and shows. So it is easier to have my music on there too. I will follow the development, and depending on the direction it takes, I might move to it in the future and make such a plugin, if it hasn't already.