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

From MusicBrainz Wiki
Jump to navigationJump to search
No edit summary
Line 59: Line 59:
Languages/skills: Python/Flask<br>
Languages/skills: Python/Flask<br>
Estimated Project Length: 90 or 175 hours<br>
Estimated Project Length: 90 or 175 hours<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.


Line 67: Line 68:
Languages/skills: Python/Flask<br>
Languages/skills: Python/Flask<br>
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>
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


Line 76: Line 78:
Languages/skills: Python, possibly Postgres<br>
Languages/skills: Python, possibly Postgres<br>
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>
Expected outcomes: One or more finished, debugged and tested plugins for Troi.
Expected outcomes: One or more finished, debugged and tested plugins for Troi.


Line 94: Line 97:
=== Dashboard Page in ListenBrainz Android/iOS App for all users ===
=== Dashboard Page in ListenBrainz Android/iOS App for all users ===
Proposed mentors: ''akshaaatt''
Proposed mentors: ''akshaaatt''

Languages/skills: Kotlin, Android development, JetPack Compose, Retrofit / Swift, SwiftUI, Alamofire, iOS Development
Languages/skills: Kotlin, Android development, JetPack Compose, Retrofit / Swift, SwiftUI, Alamofire, iOS Development

Estimated Project Length: 350 hours
Estimated Project Length: 350 hours

Difficulty: Medium
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

Expected outcomes: Ability to view your dashboard as well as that of other users


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.
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.
Line 113: Line 112:
=== BrainzPlayer Revamp in the ListenBrainz Android App ===
=== BrainzPlayer Revamp in the ListenBrainz Android App ===
Proposed mentors: ''akshaaatt''
Proposed mentors: ''akshaaatt''

Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer
Languages/skills: Kotlin, Android development, JetPack Compose, ExoPlayer

Estimated Project Length: 350 hours
Estimated Project Length: 350 hours

Difficulty: Medium
Difficulty: Medium

Expected Outcomes: Improve user interface and functionality, address bugs and ensure app stability.
Expected Outcomes: Improve user interface and functionality, address bugs and ensure app stability.


Line 127: Line 122:


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.
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.

==='''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:

[[jira:LB-1401|LB-1401 Manually add album listens]]

[[jira:LB-1448|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]

Revision as of 11:33, 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

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
Difficulty: Medium
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.
Difficulty: Easy
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.
Difficulty: Easy/Medium, depends on what is proposed.
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 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.

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

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.

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.