mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-31 00:48:39 +02:00
[Enhancement]: Include itemid and "audiobookshelf" in metadata.json sidecars & API endpoint to pull itemid from the full path on disk. #1959
Closed
opened 2026-04-25 00:01:46 +02:00 by adam
·
2 comments
No Branch/Tag Specified
master
auth_sessions_enhancements
account_sessions_table
logout_all_devices
pw_change_invalidates_sessions
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.36.0
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 labels
enhancement
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/audiobookshelf#1959
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.
Originally created by @iconoclasthero on GitHub (May 6, 2024).
Describe the feature/enhancement
I have another FR requesting the ability to change the name of metadata.json so that it matches the rest of the files in the directory, this is for file maintenance purposes. Additionally, metadata.json is generic and could conflict with another application.
I want to use the metadata.json files in my library for cli scripting and it would be helpful if there was some way to verify that it is an abs-created metadata.json, but I don't see any sort of designation for that. Maybe that's not a thing that's done in .jsons? I dunno, but between the generic file name and the lack of anything that specifically ties it to abs, means that I've been unable to come up with a way to verify the metadata.json i'm running through jq is from abs.
A good deal of the end points require the itemid, but there's no itemid query i could find. You basically need to know the itemid before you can do a lot of the things. The easiest way to get the itemid given the path that I've found is to query the sqlitedb:
Searching the api documentation:
So if there was an endpoint to do this with the API, then the sqlite db could be left alone, and itemid could be retrieved remotely, however, ideally, the itemid would be included in the metadata.json sidecar so it's right there for jq to pull for an api query!
@advplyr commented on GitHub (May 6, 2024):
Item id should not be in the sidecar file, that is only metadata so you could share it with someone who has the same audiobook and it gets scanned in.
I don't see the value in adding that API endpoint. It seems like you already wrote a script to query the db to find what you need which is a good solution. You can also use the endpoint to get library items in a library and traverse through it to find what you need. You can share specifically what you are trying to do with the API and why then maybe we can find a better solution for you.
@iconoclasthero commented on GitHub (May 10, 2024):
Goal: As per the discussion last weekend, I'm looking to establish some ability to run CLI/ChUI queries at a minimum. To put it fairly succinctly: I want
abcthe audiobookshelf cli that is what mpc is to mpd.* I, personally, am unable to glean any benefit from icon-based displays of music or audiobooks and, again personally find them extremely and disproportionately frustrating...thought this is apparently a minority view. As such, I'm going to develop what I can.(A ChUI was one of my first FRs as was some sort of DB query. The ability to access those functions from bash is still something I use and need/want to be extended.)
With that in mind, the first thing I did was extend the m4b indexing functionality to opus with updated chapter info from the web via the API. This will also allow me to drop chapter information into audiobooks via a simple script I can execute over ssh on my phone... I don't have to use the webui at all if the book has an ASIN. This basically takes care of another FR I put in.
I know that there are some abs/python3 libraries being developed and python's easy enough, but I only know BASH so that's where I'm going to start to figure out what I eventually want to develop. That said, there are some places I know I want to start and that is with the aforementioned queries.
Presently, the only queries I can run (i.e., via GNU find) are based on my file structure and they end up being Author(s); Title: Subtitle; and Year. That takes care of most of what I need, but since I now have this entire database of metadata on my audiobook library that abs has created, it makes sense to leverage that rather than either trying to index the files myself or, worse, trying to query the opus metadata or the metadata.json.
Speaking of which, the rationale for not putting the itemid in the sidecar makes sense. I still wish that there was at least something that would identify it as an abs file...the only test i could come up with for that is to run .json through jq and check the index against what it should be.
rationale for itemid endpoint
I suggested using the PWD because that is something I know without reference to anything other than my file system, so it's a known known and it is in the database so I know that it is a handle that can be used. Also, it is unambiguous and unique while the title is not. So, let's say I want to do something with one of the three copies of Moby Dick I have. How do I start with the API? Search for Melville or Moby Dick? ...So where do you envision someone starting here because I see a chicken-egg problem.
* I use CLI for 99% of how I interact with my music collection (let's exclude Picard...which is a gui for processing text). Most of those are custom scripts, so I have every reason to want, desire, expect to be able to do the same thing with other self-hosted platforms on my server.