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

From MusicBrainz Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 22: Line 22:
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Difficulty: Easy<br>
Difficulty: Easy<br>
Expected Outcomes: A deployable ML model that does accurate BPM detection
Expected Outcomes: A deployable ML model that does accurate BPM detection<br>
Short Description: Create a machine learning model to help select the BPM of an audio track.<br>
Full Description:


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 [https://github.com/scaperot/the-BPM-detector-python 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.
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 [https://github.com/scaperot/the-BPM-detector-python 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.
Line 32: Line 34:
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Difficulty: Easy<br>
Difficulty: Easy<br>
Expected Outcomes: A new music service integration for users to play recordings on ListenBrainz.
Expected Outcomes: A new music service integration for users to play recordings on ListenBrainz.<br>
Short Description: Add support for playing music in BrainzPlayer from a Subsonic API<br>
Full Description:


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 [https://www.navidrome.org/ Navidrome], [https://www.funkwhale.audio/ Funkwhale] and other apps that implement the [http://www.subsonic.org/pages/index.jsp 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.
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 [https://www.navidrome.org/ Navidrome], [https://www.funkwhale.audio/ Funkwhale] and other apps that implement the [http://www.subsonic.org/pages/index.jsp 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.
Line 42: Line 46:
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Estimated Project Length: Can be 175 or 350 hours depending on the integration/service chosen.<br>
Difficulty: Easy<br>
Difficulty: Easy<br>
Expected Outcomes: A new music service integration for users to play and record listens on ListenBrainz.
Expected Outcomes: A new music service integration for users to play and record listens on ListenBrainz.<br>
Short Description: Add support for playing music in BrainzPlayer from the Deezer streaming service.<br>
Full Description:


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.
ListenBrainz 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 ===
=== Integrate Internet Archive in BrainzPlayer ===
Line 51: Line 57:
Languages/skills: Python/Flask, Typescript/React, Postgres<br>
Languages/skills: Python/Flask, Typescript/React, Postgres<br>
Estimated Project Length: 350 hours<br>
Estimated Project Length: 350 hours<br>
Difficulty: medium
Difficulty: medium<br>
Excepted Outcomes: A deployable component to play internet archive music<br>
Short Description: Add support for playing music in BrainzPlayer from the Internet Archive<br>
Full Description:


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 [https://archive.org/details/78rpm 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.
ListenBrainz 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 [https://archive.org/details/78rpm 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 ===
=== Revamped Last.fm listens importer ===
Line 60: Line 69:
Estimated Project Length: 90 or 175 hours<br>
Estimated Project Length: 90 or 175 hours<br>
Difficulty: Medium<br>
Difficulty: Medium<br>
Expected Outcomes: An improved importer for Last.FM users to import their listens into ListenBrainz.
Expected Outcomes: An improved importer for Last.FM users to import their listens into ListenBrainz.<br>
Short Description: Write a new Last.fm imported on the back-end.<br>
Full Description:


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.
ListenBrainz 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 ===
=== Exporting playlists to SoundCloud and Apple Music ===
Line 69: Line 80:
Estimated Project Length: 90 or 175 hours, depending on the integration/service chosen.<br>
Estimated Project Length: 90 or 175 hours, depending on the integration/service chosen.<br>
Difficulty: Easy<br>
Difficulty: Easy<br>
Expected Outcomes: SoundCloud/Apple Music users can export LB playlists to respective services
Expected Outcomes: SoundCloud/Apple Music users can export LB playlists to respective services<br>
Short Description: Add support for importing and exporting playlists to and from SoundCloud and Apple Music.<br>
Full Description:


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.
ListenBrainz generates music recommendation playlists. These playlists can be listened to on ListenBrainz 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 ===
=== Music Recommendation: Implement a new Troi patch for generating music recommendations ===
Line 79: Line 92:
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.<br>
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.<br>
Difficulty: Easy/Medium, depends on what is proposed.<br>
Difficulty: Easy/Medium, depends on what is proposed.<br>
Expected outcomes: One or more finished, debugged and tested plugins for Troi.
Expected outcomes: One or more finished, debugged and tested plugins for Troi.<br>
Short Description: Implement a new music recommendation patch for the Troi recommendation engine.<br>
Full Description:


Our [https://github.com/metabrainz/troi-recommendation-playground 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.
Our [https://github.com/metabrainz/troi-recommendation-playground 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.
Line 90: Line 105:
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.<br>
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.<br>
Difficulty: Easy<br>
Difficulty: Easy<br>
Expected Outcomes: Three(?) or more functional RSS feeds.<br>
Expected Outcomes: Three or more functional RSS feeds.<br>


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 potential third-party 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.
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 potential third-party 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.
Line 97: Line 112:


=== Dashboard Page in ListenBrainz Android/iOS App for all users ===
=== Dashboard Page in ListenBrainz Android/iOS App for all users ===
Proposed mentors: ''akshaaatt''<br>
Proposed mentors: ''akshaaatt''
Languages/skills: Kotlin, Android development, JetPack Compose, Retrofit / Swift, SwiftUI, Alamofire, iOS Development<br>
Languages/skills: Kotlin, Android development, JetPack Compose, Retrofit / Swift, SwiftUI, Alamofire, iOS Development
Estimated Project Length: 350 hours<br>
Estimated Project Length: 350 hours
Difficulty: Medium<br>
Difficulty: Medium
Expected outcomes: A finished app feature that gives the user the ability to view your dashboard as well as that of other users<br>
Expected outcomes: A finished app feature that gives the user the ability to view your dashboard as well as that of other users<br>
Short Description: Add a dashboard page to our mobile apps.<br>
Full Description:


This project aims to seamlessly integrate all functionalities of the ListenBrainz website's Dashboard into the ListenBrainz application. This integration will be achieved through a combination of web view components for certain features and native development for others, depending on the specific requirements of each functionality.<br>
This project aims to seamlessly integrate all functionalities of the ListenBrainz website's Dashboard into the ListenBrainz application. This integration will be achieved through a combination of web view components for certain features and native development for others, depending on the specific requirements of each functionality.


The primary objective is to enable users not only to view their own dashboard within the app but also to explore the dashboards of other users. This exploration can be initiated in various ways, including through a search function or by selecting a user from their feed, leading to a more connected and interactive user experience.<br>
The primary objective is to enable users not only to view their own dashboard within the app but also to explore the dashboards of other users. This exploration can be initiated in various ways, including through a search function or by selecting a user from their feed, leading to a more connected and interactive user experience.


A crucial aspect of this project is to maintain design consistency with the ListenBrainz website. The mobile app's UI/UX should align with the design elements and user experience guidelines provided in the Figma files shared by the design team.
A crucial aspect of this project is to maintain design consistency with the ListenBrainz website. The mobile app's UI/UX should align with the design elements and user experience guidelines provided in the Figma files shared by the design team.
Line 112: Line 129:


=== BrainzPlayer Revamp in the ListenBrainz Android App ===
=== BrainzPlayer Revamp in the ListenBrainz Android App ===
Proposed mentors: ''akshaaatt''<br>
Proposed mentors: ''akshaaatt''
Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer<br>
Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer<br>
Estimated Project Length: 350 hours<br>
Estimated Project Length: 350 hours<br>
Difficulty: Medium<br>
Difficulty: Medium<br>
Expected Outcomes: Improve user interface and functionality, address bugs and ensure app stability.<br>
Expected Outcomes: Improve user interface and functionality, address bugs and ensure app stability.<br>
Short Description: Refactor the BrainzPlayer in or android mobile app.<br>
Full Description:


The ListenBrainz local player (BrainzPlayer) will undergo a UI/UX overhaul as per the [https://www.figma.com/file/tFLTQiq7QlA1oGRTJVtXml/ListenBrainz-App?type=design&node-id=351%3A956&mode=design&t=Cauk64QOJAR9Ui2e-1 Figma].
The ListenBrainz local player (BrainzPlayer) will undergo a UI/UX overhaul as per the [https://www.figma.com/file/tFLTQiq7QlA1oGRTJVtXml/ListenBrainz-App?type=design&node-id=351%3A956&mode=design&t=Cauk64QOJAR9Ui2e-1 Figma].

Revision as of 11:56, 12 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
Short Description: Create a machine learning model to help select the BPM of an audio track.
Full Description:

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.
Short Description: Add support for playing music in BrainzPlayer from a Subsonic API
Full Description:

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.
Short Description: Add support for playing music in BrainzPlayer from the Deezer streaming service.
Full Description:

ListenBrainz 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
Excepted Outcomes: A deployable component to play internet archive music
Short Description: Add support for playing music in BrainzPlayer from the Internet Archive
Full Description:

ListenBrainz 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
Difficulty: Medium
Expected Outcomes: An improved importer for Last.FM users to import their listens into ListenBrainz.
Short Description: Write a new Last.fm imported on the back-end.
Full Description:

ListenBrainz 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.
Difficulty: Easy
Expected Outcomes: SoundCloud/Apple Music users can export LB playlists to respective services
Short Description: Add support for importing and exporting playlists to and from SoundCloud and Apple Music.
Full Description:

ListenBrainz generates music recommendation playlists. These playlists can be listened to on ListenBrainz 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.
Difficulty: Easy/Medium, depends on what is proposed.
Expected outcomes: One or more finished, debugged and tested plugins for Troi.
Short Description: Implement a new music recommendation patch for the Troi recommendation engine.
Full Description:

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

Proposed mentors: lucifer
Languages/skills: Python, possibly Postgres
Estimated Project Length: 175 or 350 hours, depending on the scope that is suggested.
Difficulty: Easy
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 potential third-party 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.

The RSS feeds will have to dynamically generated and served using a Flask endpoint so that in appropriate cases, each user get a customized feed based on their preferences and listening history. Also, RSS feeds/readers do not provide a method of authentication which will need to be figured in case some feed serves such data.

Dashboard Page in ListenBrainz Android/iOS App for all users

Proposed mentors: akshaaatt Languages/skills: Kotlin, Android development, JetPack Compose, Retrofit / Swift, SwiftUI, Alamofire, iOS Development Estimated Project Length: 350 hours Difficulty: Medium Expected outcomes: A finished app feature that gives the user the ability to view your dashboard as well as that of other users
Short Description: Add a dashboard page to our mobile apps.
Full Description:

This project aims to seamlessly integrate all functionalities of the ListenBrainz website's Dashboard into the ListenBrainz application. This integration will be achieved through a combination of web view components for certain features and native development for others, depending on the specific requirements of each functionality.

The primary objective is to enable users not only to view their own dashboard within the app but also to explore the dashboards of other users. This exploration can be initiated in various ways, including through a search function or by selecting a user from their feed, leading to a more connected and interactive user experience.

A crucial aspect of this project is to maintain design consistency with the ListenBrainz website. The mobile app's UI/UX should align with the design elements and user experience guidelines provided in the Figma files shared by the design team.

By completing this project, the ListenBrainz app will offer a comprehensive profile/dashboard feature for users, mirroring the website's functionality. This includes displaying detailed music listening statistics, recent listens, top artists, and more, all within a user-friendly and engaging mobile interface.

BrainzPlayer Revamp in the ListenBrainz Android App

Proposed mentors: akshaaatt Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer
Estimated Project Length: 350 hours
Difficulty: Medium
Expected Outcomes: Improve user interface and functionality, address bugs and ensure app stability.
Short Description: Refactor the BrainzPlayer in or android mobile app.
Full Description:

The ListenBrainz local player (BrainzPlayer) will undergo a UI/UX overhaul as per the Figma.

This redesign will modernize the player's appearance and interaction, aligning it with the latest design trends and user expectations. The overhaul is not just cosmetic; it will extend to the app's functionality, with particular attention to the integration of Spotify and YouTube players. This feature will allow users to seamlessly play music from Spotify and YouTube directly within the ListenBrainz app, enriching the user's music experience by aggregating their music playback through a single interface.

Additionally, the project will focus on refining the app's existing features and display mechanisms, ensuring that the music playback is not only smooth but also visually appealing and user-friendly.