Development/Summer of Code/2024/ListenBrainz: Difference between revisions

From MusicBrainz Wiki
Jump to navigationJump to search
(added 'add RSS feeds' project for lucifer to expand)
Line 82: Line 82:
If this sounds interesting to you, we strongly recommend that you turn up in our IRC channel and chat with at ''mayhem'' or ''lucifer'' about your idea before you go into a full proposal. Music recommendations can seem exciting and fun, but the details of how to make them happen and all the things that need to be considered is a significant challenge.
If this sounds interesting to you, we strongly recommend that you turn up in our IRC channel and chat with at ''mayhem'' or ''lucifer'' about your idea before you go into a full proposal. Music recommendations can seem exciting and fun, but the details of how to make them happen and all the things that need to be considered is a significant challenge.


=== '''Manual album and multi-track submission''' ===
=== '''Add RSS feeds''' ===
Another idea for the mentors to review for inclusion -
''For lucifer to review and expand''

Proposed mentors: ''lucifer?''<br>
Languages/skills: <br>
Estimated Project Length: <br>
Expected Outcomes: Three(?) or more functional RSS feeds.

ListenBrainz provides a number of interesting opportunities for generating RSS feeds (a short list of user-requested feeds is in [[jira:MBS-941|MBS-941]] and linked tickets - but do not limit yourself to these). For example: New releases by an artist, new releases in genre, all new releases, user-specific new releases from [[:lb:explore/fresh-releases/|Fresh Releases]] 'for you' function. The complexity of our data allows for complex feed options - as well as new releases by date we may want to offer feeds of new additions (regardless of release date). You may need to communicate with the community, as well as other developers, to find what the most useful and requested types of feeds are. Some potential feeds rely on primarily MusicBrainz data, so there may be project cross-over that you will be expected to plan and manage.

==='''Manual album and multi-track submission'''===
''For the mentors to review for inclusion (or remove)''


Jivte added the 'manually submit listens' function to LB a while back, but it is missing some features from the initial mockups/ticket: https://tickets.metabrainz.org/browse/LB-1157
Jivte added the 'manually submit listens' function to LB a while back, but it is missing some features from the initial mockups/ticket: https://tickets.metabrainz.org/browse/LB-1157

Revision as of 00:46, 2 February 2024

ListenBrainz allows users to store a list of songs that they have listened to, get personalised recommendations, and more. Try it out.

Getting started

(see also: Getting started with GSoC)

If you want to work on ListenBrainz you should show that you are able to set up the server software and understand how some of the infrastructure works. Here are some things that we might ask you about

  • Show that you understand the goals that ListenBrainz wants to achieve, which are written on its homepage
  • Create an oauth application on the MusicBrainz website and add the configuration information to your ListenBrainz server. Use this to log in to your server with your MusicBrainz details
  • Use the import script that is part of the ListenBrainz server to load scrobbles from last.fm to your ListenBrainz server, or the main ListenBrainz server
  • Use your preferred programming language to write a submission tool that can send Listen data to your local ListenBrainz server. You could make up some fake data for song names and artists. This data doesn't have to be real.
  • Try and delete the ListenBrainz database on your local server to remove the fake data that you added.
  • Look at the list of tickets that we have open for ListenBrainz and see if you understand what tasks the tickets involve
  • If you want to, see if you can contribute to fixing a ticket. Either add a comment to the ticket or ask in IRC for clarification if you don't understand what the ticket means

Ideas

We're adding a number of new social features to ListenBrainz that we hope will enable people discover more music they like and users who have similar music tastes to their own. We're working on some of these features now, but we will need to get help for other features:

Add machine learning to BPM detection code

Proposed mentors: mayhem
Languages/skills: Python/Flask, Machine Learning
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.
Difficulty: Easy
Expected Outcomes: A deployable ML model that does accurate BPM detection

ListenBrainz could really use reliable BPM values for music that is represented in MusicBrainz. However, the algorithms for this have problems that are very tricky to solve. We believe that we can use neural networks to improve the "peak selection" portion of this project the-BPM-detector-python. The ListenBrainz team will collect a suitable training dataset of a few thousand different audio files with known BPM values that can be used for training this model. We expect the participant who gets selected for this project to design, train and test the neural network and as a final deliverable create a model and it associated code necessary to integrate this into existing MetaBrainz projects for deployement.

Integrate music streaming from Subsonic

Proposed mentors: lucifer
Languages/skills: Python/Flask
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.
Difficulty: Easy
Expected Outcomes: A new music service integration for users to play recordings on ListenBrainz.

LB has a number of music discovery features that use BrainzPlayer to facilitate track playback. BrainzPlayer (BP) is a custom React component in LB that uses multiple data sources to search and play a track. As of now, it supports Spotify, Youtube and Soundcloud as a music service. LB would like to be able to stream music from a private music collection using web apps like Navidrome, Funkwhale and other apps that implement the Subsonic API. The following major tasks need to be completed: 1) Add subsonic API player as a service to our music services backend; this will require some schema changes/extensions in order to have user specify the URL of their service as part of the music service configuration. 2) Add the react based front-end UI to that allows users to setup their own Subsonic API instance as a service. 3) Add support to BrainzPlayer for logging into the subsonic API service and playing music from it.

Integrate Deezer music streaming service for recording listens and playing music

Proposed mentors: lucifer
Languages/skills: Python/Flask, Typescript/React
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.
Difficulty: Easy
Expected Outcomes: A new music service integration for users to play and record listens on ListenBrainz.

LB has a number of music discovery features that use BrainzPlayer to facilitate track playback. BrainzPlayer (BP) is a custom React component in LB that uses multiple data sources to search and play a track. As of now, it supports Spotify, Youtube and Soundcloud as a music service. LB also supports linking a Spotify account to record listening history. We have looked into some other services and found that Deezer provides the music playback and recording listening history capability. Integrating these services into LB would make for a good SoC project.

Integrate Internet Archive in BrainzPlayer

Proposed mentors: lucifer, monkey
Languages/skills: Python/Flask, Typescript/React, Postgres
Estimated Project Length: 350 hours
Difficulty: medium

LB has a number of music discovery features that use BrainzPlayer to facilitate track playback. BrainzPlayer (BP) is a custom React component in LB that uses multiple data sources to search and play a track. The 78 RPMs and Cylinder Recordings is a collection of digitized recordings from physical releases of the early 20th century. Each recording comes with audio streaming, and metadata web service. It can be used to retrieve metadata automatically and to embed a player in ListenBrainz using BrainzPlayer. A lot of similar music collections are hosted by the Internet Archive which can be made available for playing on ListenBrainz.

Revamped Last.fm listens importer

Proposed mentors: lucifer
Languages/skills: Python/Flask
Estimated Project Length: 90 or 175 hours
Expected Outcomes: An improved importer for Last.FM users to import their listens into ListenBrainz.

LB has a Last.fm importer written in Typescript that runs in the user's browser and lets them import scrobbles as listens in ListenBrainz. This is a one time import and if you submit scrobbles to Last.fm again, you need to re-run the importer manually. Also, the user needs to keep their tab open while the import runs which is inconvenient. Further, a lot of issues have been reported with it in the past like API calls to last.fm getting blocked by uBlock. Because the importer runs on the frontend/client side we have limited visibility into its functioning and errors. It would be better to create an importer like the one we have for spotify which runs on the backend and continuously updates ListenBrainz with spotify streams of the user.

Exporting playlists to SoundCloud and Apple Music

Proposed mentors: lucifer
Languages/skills: Python/Flask
Estimated Project Length: 90 or 175 hours, depending on the integration/service chosen.
Expected Outcomes: SoundCloud/Apple Music users can export LB playlists to respective services

LB generates music recommendation playlists. These playlists can be listened to on LB using BrainzPlayer if the user has connected a music service to LB. Users can also configure such playlists to be automatically exported to the music service of their choice. Currently, we only support Spotify for playlist export. We should also add support for exporting playlists to SoundCloud and Apple Music.

Music Recommendation: Implement a new Troi patch for generating music recommendations

Proposed mentors: mayhem
Languages/skills: Python, possibly Postgres
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.
Expected outcomes: One or more finished, debugged and tested plugins for Troi.

Our troi recommendation toolkit is our playground for developing recommendation algorithms. The toolkit already knows how to fetch data from ListenBrainz for stats, collaborative filtered recommended tracks, similar artists and similar recordings. From MusicBrainz it can fetch needed metadata such as genres and tags. The exact goal for this project really depends on you and what ideas you bring to the table, but the idea is to create a new Patch (plugin) for Troi that creates a new type of playlist that we can periodically offer to our users.

If this sounds interesting to you, we strongly recommend that you turn up in our IRC channel and chat with at mayhem or lucifer about your idea before you go into a full proposal. Music recommendations can seem exciting and fun, but the details of how to make them happen and all the things that need to be considered is a significant challenge.

Add RSS feeds

For lucifer to review and expand

Proposed mentors: lucifer?
Languages/skills:
Estimated Project Length:
Expected Outcomes: Three(?) or more functional RSS feeds.

ListenBrainz provides a number of interesting opportunities for generating RSS feeds (a short list of user-requested feeds is in MBS-941 and linked tickets - but do not limit yourself to these). For example: New releases by an artist, new releases in genre, all new releases, user-specific new releases from Fresh Releases 'for you' function. The complexity of our data allows for complex feed options - as well as new releases by date we may want to offer feeds of new additions (regardless of release date). You may need to communicate with the community, as well as other developers, to find what the most useful and requested types of feeds are. Some potential feeds rely on primarily MusicBrainz data, so there may be project cross-over that you will be expected to plan and manage.

Manual album and multi-track submission

For the mentors to review for inclusion (or remove)

Jivte added the 'manually submit listens' function to LB a while back, but it is missing some features from the initial mockups/ticket: https://tickets.metabrainz.org/browse/LB-1157

With YIM getting bigger every year we are getting more and more requests for better submission features. A good GSoC project could be to flesh out the manual submitter to match the original mockups. There are the tickets for the core functions that are missing:

LB-1401 Manually add album listens

LB-1448: Manually add a queue of song/album listens

- aerozol

[Name]

Proposed Mentors:

Languages/skills:

Estimated Project Length:

Difficulty: [easy/medium]hard

Expected outcomes:

[description]