mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-05-30 23:40:40 +02:00
Improve folder structure for series with multiple authors #183
Closed
opened 2026-04-24 23:00:31 +02:00 by adam
·
10 comments
No Branch/Tag Specified
master
book_tags_genres_dedupe
episode_download_fallback
Issue-4540-SortBy-StartedDate-and-FinishedDate
episode_meta_tagging
fix_authorize_race_condition
redirect_transcode_requests
progress_updated_sort
fix_ereader_socket_event
fix_change_empty_root_password
fix_podcast_session_track_index
fix_set_token
session_modal_user
localize_durations
fix_oidc_create_user
jwt_auth_refactor
fix_scanner_deleting_single_file_books
fix_mediaprogress_updatedat_2
experimental_next_client
podcast_episode_duration
episode-timestamps-clickable
book_author_secondary_sort_title
podcast_useragents
pathexists_user_access
fix_pathexists_join
book_author_secondary_sort
clean_duplicate_mediaprogress
sanitize_html_description
trix_prevent_attachments
check_path_api_fix
fix_mediaprogress_updatedat
increase_express_json_limit
fix_dockerfile_nunicode
search_episodes
audiobook_tools_update
episode_secondary_sorts
hls_stream_url_update
new_session_track_endpoint
audiobook_tools_enhancements
watcher_rescans_update
player_track_tooltip
fix_exclude_prefixes_crash
socket_item_events
fix_podcast_episode_scanner_promise
new_stats_controller
count_cache_for_userpermissions
parsing-opf-v3
validate_migration_files
fix-quick-match-all-crash
fix-chapter-end-sleep-timer
stringify_sequelize_query
remove-col-ambiguity
fix_next_prev_edit_description
details_trim_whitespace
fix_content_url_basepath
fix_logger_fatal
progress_bar_visibility
batch-edit-populate-map-details
feed_generator_updates
bookmark-modal-updates
migrate-library-item-in-scanner
migrate-new-library-items
migrate-podcasts-new-library-item-2
migrate-podcasts-new-library-item
fix-remove-episode-from-playlist
playback-session-use-new-library-item
refactor-library-item
fix-heatmap-caption
feed-episodes-upsert
share-media-player-media-session-api
remove-old-playlist
remove_old_collection_object
plugin-implementation-demo
feed_migration
refactor-feeds-from-item
fix_remove_authors_no_books
v2.17.3-fk-constraints-migration
migrations-first-upgrade
sqlite_2
feature/nuxt-target-server
waveform
sqlite
playlists
video
v2.35.1
v2.35.0
v2.34.0
v2.33.2
v2.33.1
v2.33.0
v2.32.1
v2.32.0
v2.31.0
v2.30.0
v2.29.0
v2.28.0
v2.27.0
v2.26.3
v2.26.2
v2.26.1
v2.26.0
v2.25.1
v2.25.0
v2.24.0
v2.23.0
v2.22.0
v2.21.0
v2.20.0
v2.19.5
v2.19.4
v2.19.3
v2.19.2
v2.19.1
v2.19.0
v2.18.1
v2.18.0
v2.17.7
v2.17.6
v2.17.5
v2.17.4
v2.17.3
v2.17.2
v2.17.1
v2.17.0
v2.16.2
v2.16.1
v2.16.0
v2.15.1
v2.15.0
v2.14.0
v2.13.4
v2.13.3
v2.13.2
v2.13.1
v2.13.0
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.11.0
v2.10.1
v2.10.0
v2.9.0
v2.8.1
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.0
v2.5.0
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.23
v2.2.22
v2.2.21
v2.2.20
v2.2.19
v2.2.18
v2.2.17
v2.2.16
v2.2.15
v2.2.14
v2.2.13
v2.2.12
v2.2.11
v2.2.10
v2.2.9
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.5
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.24
v2.0.23
v2.0.22
v2.0.21
v2.0.20
v2.0.19
v2.0.18
v2.0.17
v2.0.16
v2.0.15
v2.0.14
v2.0.13
v2.0.12
v2.0.11
v2.0.10
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v1.7.2
v1.7.1
v1.7.0
v1.6.0
v1.5.5
v1.5.0
v1.4.11
v1.4.9
v1.4.7
v1.4.6
v1.4.4
v1.4.2
v1.4.0
v1.4.1
v1.3.4
v1.3.3
v1.3.1
v1.2.8
v1.2.6
v1.2.5
v1.2.4
v1.2.1
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.10
v1.1.9
v1.1.8
v1.0.0
0.9.61-beta.0
0.9.61-beta
Labels
Clear labels
authentication
backlog
bug
chapter editor
config-issue
ebooks
encoding/embedding
enhancement
help wanted
listening sessions & progress
planned
possible plugin
progress sync
pull-request
sorting/filtering/searching
unable to reproduce
upload
users & permissions
waiting
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/audiobookshelf#183
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @soilheart on GitHub (Jan 21, 2022).
(Borrowing the template from the audiobookshelf-app-repo)
Is your feature request related to a problem? Please describe.
Improve folder structure for series with multiple authors, grouping the files/folders mainly by series, and not author.
Describe the solution you'd like
What I would like is support for a structure where Author information is parsed after the Series folder, e.g.:
I have thought long and hard about it though, and I haven't figured out any suggestion that is also backwards compatible with the current supported path formats so I don't have a solution
(I have some books which follow a
Series/Book 1 - Title/format, but as expected the series gets misinterpreted as author in that case)Describe alternatives you've considered
A workaround that kind of works, but can get a bit unruly is using the structure:
The downside to this as I see it is that the books folders is now harder to process in bulk etc. For example if I needed to add a leading zero to the number as the series grow I would need to do so in authors number of folders, instead of a single folder. It also clutters up the top folder with authors that may only be relevant for one series (although that is possible to solve with yet another top folder)
Additional context
Example of series with multiple authors
Horus Heresy: https://wh40k.lexicanum.com/wiki/Horus_Heresy_Series (This one also has short story collections, which could add yet another level of complexity).
The Old Republic: https://starwars.fandom.com/wiki/Star_Wars:The_Old_Republic(novel_series)
@JKamsker commented on GitHub (Jan 22, 2022):
+1
Perry Rhodan: https://www.audible.de/series/Perry-Rhodan-NEO-1-50-Hoerbuecher/B075192HZF
Maybe make even a specialized folder named Series would be cool. Like
Series/[Series Name]/Author/Book [N] - Title@soilheart commented on GitHub (Jan 23, 2022):
Reading through my initial text again, I realize that my example wasn't the best.
What I would like is to be able to do
Series/Book 1 - Title/But have it pick up Author somewhere after the book number (not sure where...)
The suggestion from JKamser would work for me, but I would prefer if
Book 1could come first after the[Series Name]folder...Perhaps:
Various Authors/[Series Name]/Book [N] - Title - Author/E.g. if the author is "Various Authors" (loaned from the term "Various Artist" in music tagging etc.), then pick the actual Author from the Book folder (possibly disallowing subtitle).
@advplyr commented on GitHub (Jan 24, 2022):
I think series needs to be thought through again because I also missed the use-case where a book could belong to multiple series.
One of the reasons Abs started off relying heavily on directory structure was because at first it wasn't pulling audio file metadata and there was no match feature.
Now that it parses audio file metadata well, and there will soon be automatic matching, then maybe we can have the directory structure be optional altogether.
Maybe there is a better way to go about this that can be used to solve for any directory structure.
@soilheart commented on GitHub (Jan 26, 2022):
While I agree that directory structure could be optional, that already seems to be the case with the "Scanner prefer [audio|OPF] metadata"
While I understand this is a very subjective opinion:
As there's no de-facto standard for this kind of metadata (at least when it comes to in-file tags), I prefer having the information outside the file (as I prefer portability, e.g. not modifying the file for a specific software). Ideally this could be solved through folder structure, but in the cases where it's not enough maybe the OPF track is the way to go...
How does it work at the moment? Is it either/or with folder structure and for example OPF metadata? Or is the switch only a switch for saying what takes preference for the fields? (E.g. could I add an OPF file with basically only the author in the book folders for now, and that way get around this issue for now?)
@wtanksleyjr commented on GitHub (Jan 27, 2022):
I agree with the author-series problem (being a Wheel of Time fan), and the multiple-series problem (look at the data Audible provides, it frequently includes "chronological order" and "published order", and more for series like the various Thrawn books).
It strikes me that we might actually want a system more like the current Genre system, in which you can simply assign as many as you want to each book. This can be done using OPF files (or some replacement, but I'm happy with what kinda works right now).
With that said, I wanted to point out a problem with all schemes like this. If I have two books that are identical except for one attribute that's not recorded in the filename/path, how do I store them? This happens right now with narrators (in my collection I have LOTR, Hobbit, and Narnia in multiple versions, and of course someday there might be a good recording of Dune and for some reason I might want to keep the old one please don't hate me). I have an adequate solution, which is to repurpose the subtitle parsing so the title contains both parts and the subtitle contains the narrator.
@advplyr commented on GitHub (Jan 27, 2022):
It is just for what takes priority. Yes to your question.
I was thinking series could be treated more like collections are
There is no good way to handle the case of multiple books with different narrators. I have that in my library and I added the narrator name to the audiobook folder then manually edited the title in audiobookshelf.
@wtanksleyjr commented on GitHub (Jan 28, 2022):
In the end they'd have to be their own thing, obviously. In the meantime, whatever's easy to balance programming and ease of use! It's at least interesting that OPF files already support multiple series, so technically we have the "how to get the data loaded" mostly solved.
So what I did was I changed my book-organization Python script so that it appended all of the subtitles onto the title, and then added the narrator after a " - ". Then I turned on subtitle parsing. Boom, an easy way to track who's narrating :) . I actually like the subtitle being part of the book name (except when it's just "Series Name, Book 3" but that's also something I easily fixed).
@soilheart commented on GitHub (Jan 28, 2022):
Great, then I have a workaround for now
And what I've done, is that for books where I have multiple versions, I usually add the distinguishing features in a parentheses after the title, e.g.
Title (Narrator1)andTitle (Narrator2)if two different narrator, orTitleandTitle (m4a)if I have book in both m4a and mp3 (mp3 is the default, so doesn't get any distinction).Was about to propose to add a feature to "clean up the title" by removing parentheses (and/or brackets) from the title etc., but didn't feel like I had thought the idea through enough, but as the topic was brought up.... :)
@snowmangoh commented on GitHub (Feb 9, 2022):
That's exactly how I handle the different narrator problem.
@advplyr commented on GitHub (Jul 15, 2022):
That folder structure won't be supported as the default structure but if we add support for selecting custom folder patterns then this would be supported. Follow #774