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

From MusicBrainz Wiki
Jump to navigationJump to search
(ListenBrainz iOS idea added)
No edit summary
 
Line 12: Line 12:
* Try and delete the ListenBrainz database on your local server to remove the fake data that you added.
* 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
* 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
* We strongly urge you to look through our ticket tracker and find some easy tickets, pick one and implement it and then send us a PR -- that way we can see how you work. Ask in IRC for clarification if you don't understand what the ticket means. Check out our [https://tickets.metabrainz.org/issues/?filter=12410 easy first bugs tickets]


== Ideas ==
== Ideas ==

Latest revision as of 16:10, 4 March 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
  • We strongly urge you to look through our ticket tracker and find some easy tickets, pick one and implement it and then send us a PR -- that way we can see how you work. Ask in IRC for clarification if you don't understand what the ticket means. Check out our easy first bugs tickets

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.


Artist, Album, User Pages 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 allows users to view detailed album, artist, and user pages within the app.
Short Description: Enhance the mobile app with detailed album, artist, and user pages.
Full Description:

This project aims to significantly enhance the user experience of the ListenBrainz mobile application by introducing comprehensive album, artist, and user pages. This initiative will bridge the gap between the app and the ListenBrainz website's extensive database, offering a richer, more detailed exploration of music data directly within the app.

The primary goal is to enable users to delve into detailed pages for albums, artists, and other users within the app. These pages will provide in-depth information, such as album track lists, artist discographies, similar artists, and detailed user profiles including their music preferences, listening habits, and social connections.

Key features of this project include:

  • Album Pages: Display detailed album information including track lists, release dates, genres, and artist links. Integration with music streaming services to listen to tracks directly from the app may also be explored.
  • Artist Pages: Offer comprehensive artist profiles featuring a biography, discography, related artists, and upcoming events. This will enable users to discover new music and learn more about their favorite artists.
  • User Pages: Enhance user profiles to include detailed listening statistics, favorite tracks, albums, and artists. Implement a feature for users to follow others and explore music communities within the app.

To ensure a seamless and intuitive user experience, the project will require close adherence to the UI/UX design guidelines provided by the ListenBrainz design team. This includes creating responsive layouts that adapt to various screen sizes and implementing a modern, user-friendly interface design using JetPack Compose for Android and SwiftUI for iOS.

By completing this project, the ListenBrainz app will become a more comprehensive platform for music discovery and community engagement, offering detailed insights into albums, artists, and user profiles, all within a beautifully designed mobile application interface.

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: 175 or 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.

ListenBrainz iOS App - Road to Production

Proposed mentors: akshaaatt

Languages/skills: Swift, SwiftUI, Alamofire, iOS Development
Estimated Project Length: 175 hours
Difficulty: Easy
Expected Outcomes: Match user interface and functionality as per figmas and the Android app, address bugs and ensure app stability.
Short Description: To launch the iOS mobile app on the app store, we need to get relevant approvals. The design should be consistent, the app should be stable and all the app offerings should work as desired.
Full Description:

The developer should make sure that the Feed, Profile/Dashboard, Explore and Settings are all consistent with the Android app/relevant Figma design.

The aim should be:

  • A fully functional ListenBrainz app for iOS that matches the user interface and functionality outlined in the project's design documents. Figma
  • A stable and reliable app experience, with all features working as intended and any identified bugs resolved.

By completing this project, the ListenBrainz app will offer a comprehensive user experience, mirroring the website's and Android app's functionality.

BrainzPlayer Revamp in the ListenBrainz Android App

Proposed mentors: akshaaatt

Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer
Estimated Project Length: 175 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.