Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Work, Movement & Subtitle #279

Closed
2 tasks
certuna opened this issue May 7, 2020 · 5 comments
Closed
2 tasks

Add support for Work, Movement & Subtitle #279

certuna opened this issue May 7, 2020 · 5 comments

Comments

@certuna
Copy link
Contributor

certuna commented May 7, 2020

Navidrome should import the Work and Movement tags. Would bring it closer to feature parity with the Apple iTunes/Music ecosystem, and all other music libaries that support these tags. Will make classical music fans happy :) There is:

Work (string): id3v2: TIT1 mp4: ©wrk Vorbis: WORK
Movement Name (string): id3v2: MVNM mp4: ©mvn Vorbis: MOVEMENTNAME
Movement Number: id3v2: MVIN mp4: ©mvi Vorbis: MOVEMENT
Movement Total: id3v2: MVIN mp4: ©mvc Vorbis: MOVEMENTTOTAL

(Movement Number/Total work the same as Track Number/Total)

This means a couple new fields in the database. Possibly also a good thing to add a "Show Work/Movement instead of Track Title" boolean field to the database so the client-side code doesn't have to figure it all out.

Work/Movement should be used when:

  • Showing it in song details when Work/Movement is not empty
  • Indexing it for searching songs
@certuna
Copy link
Contributor Author

certuna commented Sep 14, 2021

Working on this now in this fork: https://github.com/certuna/navidrome . There's a couple of milestones towards full support, but each milestone reached = release.

Milestone 1: Display Work/Movement in Web UI

Server-side:

  • read the tags TIT2 (Song Title),TIT1 (Work), TIT3 (Song Subtitle), MVIN (Movement) and MVNM (Movement Name)
  • store title (already exists), song_subtitle, work, movement_number and movement_name (new columns) in the media_file table of the database
  • add them to the song endpoint of the Navidrome API
  • add nd_sort_title in the database which cascades movement, sort_title and title (+leading article removal) & add it to the API as sortTitle

Web UI:

  • for the Now Playing title field, concatenate these fields into "Preludes, Book I: III. Le Vent Dans La Plaine" (work + movement_number + movement_name, = Apple style) or "Cheerleader · Felix Jaehn Remix" (work + title + song_subtitle, = Spotify style, also how the id3 standard prescribes it)
  • do the same for the Play Queue
  • Album track list: group tracks by Work by adding an extra line (similar to Disc)
  • Album track list: if a song has both work and movement, replace title by movement_number + movement_name ("III. Le Vent Dans La Plaine")
  • Playlist view: replace title by work + movement_number + movement_name ("Preludes, Book I: III. Le Vent Dans La Plaine"
  • Song list: add Work column (default off) and replace title by movement_number + movement_name ("III. Le Vent Dans La Plaine")
  • prepend work and append subtitle to title ("Cheerleader · Felix Jaehn Remix", like Spotify) in all list views
  • use sortTitle instead of title in the song grid (Songs & Playlist views)

Milestone 2: Display Work/Movement for Subsonic API clients

(note: Subsonic has only one title field)

  • create display_title which is a) work + movement_number + movement_name or b) work + title + song_subtitle if a) doesn't exist
  • serve display_title to the Subsonic API instead of title

Milestone 3: Navigation of Works by Artist in Web UI

(note: as Navidrome does not read composer, we cannot do a work-by-composer navigation, only work-by-artist)
Server-side:

  • create an additional work table with columns id, name (name of the work)
  • create an additional work-artist table with work_id and artist_id (many-to-many: "an artist can have multiple works, a work can have multiple artists")
  • create an additional work-album table with work_id and album_id (many-to-many: "an album can contain multiple works, a work can be on multiple albums")
  • add work_id to the mediafile table (one to many: "a mediafile is part of one work, a work can contain multiple mediafiles")
  • create a new work endpoint in the Navidrome API

Web UI:

  • create a Works list view in the Web UI with a link in the sidebar, similar to the current Albums list view, filterable by Artist, etc. Navigation flow: Work -> Album -> Play
  • in the Artist details view (being developed currently) add a section for Works. Navigation flow: Artist -> Works -> Album -> Play
  • create a Work Details view in the Web UI to show what albums the work is featured on, similar to the new Artist Details view
  • pull in work details from Wikipedia and/or Musicbrainz and display on the Work Details view

Milestone 4: Navigation of Work by composer

(note: this step is contingent on implementation of the artist credits/"roles" feature: #211 )
Server-side:

  • modify the work-artist table to become work-composer

Web UI:

  • create a Composers list view in the Web UI with a link in the sidebar, similar to the current Artists list view, for the navigation flow Composer -> Work -> Album -> Play

Milestone 5: Navigation by Work for Subsonic API clients

haven't given this too much thought yet - possibly using pseudo-folders?

Milestone 6: Preparation for MusicBrainz integration

  • read the MusicBrainz Work ID from the tags, and store it as mbz_work_id in the mediafile and work tables
  • add it to the Navidrome API

@certuna certuna changed the title Add support for Work & Movement Add support for Work, Movement & Subtitle Jan 19, 2022
@github-actions
Copy link

github-actions bot commented Mar 7, 2023

This issue has been automatically marked as stale because it has not had recent activity. The resources of the Navidrome team are limited, and so we are asking for your help.
If this is a bug and you can still reproduce this error on the master branch, please reply with all of the information you have about it in order to keep the issue open.
If this is a feature request, and you feel that it is still relevant and valuable, please tell us why.
This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.

@github-actions github-actions bot added the stale label Mar 7, 2023
@certuna
Copy link
Contributor Author

certuna commented Mar 13, 2023

Still relevant and valueble, on my To Do list

@github-actions github-actions bot removed the stale label Mar 14, 2023
@github-actions
Copy link

This issue has been automatically marked as stale because it has not had recent activity. The resources of the Navidrome team are limited, and so we are asking for your help.
If this is a bug and you can still reproduce this error on the master branch, please reply with all of the information you have about it in order to keep the issue open.
If this is a feature request, and you feel that it is still relevant and valuable, please tell us why.
This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions.

@github-actions github-actions bot added the stale label Sep 11, 2023
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Oct 12, 2023
Copy link

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 10, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants