Giter Site home page Giter Site logo

advplyr / audiobookshelf Goto Github PK

View Code? Open in Web Editor NEW
5.4K 47.0 374.0 25.77 MB

Self-hosted audiobook and podcast server

Home Page: https://audiobookshelf.org

License: GNU General Public License v3.0

Dockerfile 0.03% JavaScript 65.09% Vue 33.83% CSS 0.86% Shell 0.19% HTML 0.01%
audiobookshelf audiobooks self-hosted audiobook-manager podcasts

audiobookshelf's Introduction


About

Audiobookshelf is a self-hosted audiobook and podcast server.

Features

  • Fully open-source, including the android & iOS app (in beta)
  • Stream all audio formats on the fly
  • Search and add podcasts to download episodes w/ auto-download
  • Multi-user support w/ custom permissions
  • Keeps progress per user and syncs across devices
  • Auto-detects library updates, no need to re-scan
  • Upload books and podcasts w/ bulk upload drag and drop folders
  • Backup your metadata + automated daily backups
  • Progressive Web App (PWA)
  • Chromecast support on the web app and android app
  • Fetch metadata and cover art from several sources
  • Chapter editor and chapter lookup (using Audnexus API)
  • Merge your audio files into a single m4b
  • Embed metadata and cover image into your audio files (using Tone)
  • Basic ebook support and ereader
    • Epub, pdf, cbr, cbz
    • Send ebook to device (i.e. Kindle)
  • Open RSS feeds for podcasts and audiobooks

Is there a feature you are looking for? Suggest it

Join us on Discord or Matrix

Android App (beta)

Try it out on the Google Play Store

iOS App (beta)

Beta is currently full. Apple has a hard limit of 10k beta testers. Updates will be posted in Discord/Matrix.

Using Test Flight: https://testflight.apple.com/join/wiic7QIW (beta is full)

Build your own tools & clients

Check out the API documentation


Library Screenshot


Organizing your audiobooks

Directory structure and folder names are important to Audiobookshelf!

See documentation for supported directory structure, folder naming conventions, and audio file metadata usage.


Installation

See install docs


Reverse Proxy Set Up

Important! Audiobookshelf requires a websocket connection.

Note: Subfolder paths (e.g. /audiobooks) are not supported yet. See issue

NGINX Proxy Manager

Toggle websockets support.

NGINX Web socket

NGINX Reverse Proxy

Add this to the site config file on your nginx server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.

server
{
        listen 443 ssl;
        server_name <sub>.<domain>.<tld>;

        access_log /var/log/nginx/audiobookshelf.access.log;
        error_log /var/log/nginx/audiobookshelf.error.log;

        ssl_certificate      /path/to/certificate;
        ssl_certificate_key  /path/to/key;

        location / {
                     proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
                     proxy_set_header  X-Forwarded-Proto $scheme;
                     proxy_set_header  Host              $host;
                     proxy_set_header Upgrade            $http_upgrade;
                     proxy_set_header Connection         "upgrade";

                     proxy_http_version                  1.1;

                     proxy_pass                          http://<URL_to_forward_to>;
                     proxy_redirect                      http:// https://;
                   }
}

Apache Reverse Proxy

Add this to the site config file on your Apache server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.

For this to work you must enable at least the following mods using a2enmod:

  • ssl
  • proxy
  • proxy_http
  • proxy_balancer
  • proxy_wstunnel
  • rewrite
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName <sub>.<domain>.<tld>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyPass / http://localhost:<audiobookshelf_port>/
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) "ws://localhost:<audiobookshelf_port>/$1" [P,L]

    # unless you're doing something special this should be generated by a
    # tool like certbot by let's encrypt
    SSLCertificateFile /path/to/cert/file
    SSLCertificateKeyFile /path/to/key/file
</VirtualHost>
</IfModule>

Some SSL certificates like those signed by Let's Encrypt require ACME validation. To allow Let's Encrypt to write and confirm the ACME challenge, edit your VirtualHost definition to prevent proxying traffic that queries /.well-known and instead serve that directly:

<VirtualHost *:443>
    # ...

    # create the directory structure  /.well-known/acme-challenges
    # within DocumentRoot and give the HTTP user recursive write
    # access to it.
    DocumentRoot /path/to/local/directory
    
    ProxyPreserveHost On
    ProxyPass /.well-known !
    ProxyPass / http://localhost:<audiobookshelf_port>/
    
    # ...
</VirtualHost>    

SWAG Reverse Proxy

See LinuxServer.io config sample

Synology NAS Reverse Proxy Setup (DSM 7+/Quickconnect)

  1. Open Control Panel

    • Navigate to Login Portal > Advanced.
  2. General Tab

    • Click Reverse Proxy > Create.
    Setting Value
    Reverse Proxy Name audiobookshelf
  3. Source Configuration

    Setting Value
    Protocol HTTPS
    Hostname <sub>.<quickconnectdomain>.synology.me
    Port 443
    Access Control Profile Leave as is
    • Example Hostname: audiobookshelf.mydomain.synology.me
  4. Destination Configuration

    Setting Value
    Protocol HTTP
    Hostname Your NAS IP
    Port 13378
  5. Custom Header Tab

    • Go to Create > Websocket.
    • Configure Headers (leave as is):
    Header Name Value
    Upgrade $http_upgrade
    Connection $connection_upgrade
  6. Advanced Settings Tab

    • Leave as is.

Middleware relating to CORS will cause the app to report Unknown Error when logging in. To prevent this don't apply any of the following headers to the router for this site:

  • accessControlAllowMethods
  • accessControlAllowOriginList
  • accessControlMaxAge

From @Dondochaka and @BeastleeUK

Example Caddyfile - Caddy Reverse Proxy

subdomain.domain.com {
        encode gzip zstd
        reverse_proxy <LOCAL_IP>:<PORT>
}

HAProxy

Below is a generic HAProxy config, using audiobookshelf.YOUR_DOMAIN.COM.

To use http2, ssl is needed.

global
    # ... (your global settings go here)

defaults
    mode http
    # ... (your default settings go here)

frontend my_frontend
    # Bind to port 443, enable SSL, and specify the certificate list file
    bind :443 name :443 ssl crt-list /path/to/cert.crt_list alpn h2,http/1.1
    mode http

    # Define an ACL for subdomains starting with "audiobookshelf"
    acl is_audiobookshelf hdr_beg(host) -i audiobookshelf

    # Use the ACL to route traffic to audiobookshelf_backend if the condition is met,
    # otherwise, use the default_backend
    use_backend audiobookshelf_backend if is_audiobookshelf
    default_backend default_backend

backend audiobookshelf_backend
    mode http
    # ... (backend settings for audiobookshelf go here)

    # Define the server for the audiobookshelf backend
    server audiobookshelf_server 127.0.0.99:13378

backend default_backend
    mode http
    # ... (default backend settings go here)

    # Define the server for the default backend
    server default_server 127.0.0.123:8081

pfSense and HAProxy

For pfSense the inputs are graphical, and Health checking is enabled.

Frontend, Default backend, access control lists and actions

Access Control lists
Name Expression CS Not Value
audiobookshelf Host starts with: audiobookshelf.
Actions

The condition acl names needs to match the name above audiobookshelf.

Action Parameters Condition acl names
Use Backend audiobookshelf audiobookshelf

Backend

The Name needs to match the Parameters above audiobookshelf.

Name audiobookshelf
Server list:
Name Expression CS Not Value
audiobookshelf Host starts with: audiobookshelf.
Health checking:

Health checking is enabled by default. Http check method of OPTIONS is not supported on Audiobookshelf. If Health check fails, data will not be forwared. Need to do one of following:

  • To disable: Change Health check method to none.
  • To make Health checking function: Change Http check method to HEAD or GET.

Run from source

Contributing

This application is built using NodeJs.

Information on helping with translations of the web client here.

Dev Container Setup

The easiest way to begin developing this project is to use a dev container. An introduction to dev containers in VSCode can be found here.

Required Software:

Note, it is possible to use other container software than Docker and IDEs other than VSCode. However, this setup is more complicated and not covered here.

Install the required software on Windows with winget

Note: This requires a PowerShell prompt with winget installed. You should be able to copy and paste the code block to install. If you use an elevated PowerShell prompt, UAC will not pop up during the installs.

winget install -e --id Docker.DockerDesktop; `
winget install -e --id Microsoft.VisualStudioCode

Install the required software on MacOS with homebrew

brew install --cask docker visual-studio-code

Install the required software on Linux with snap

sudo snap install docker; \
sudo snap install code --classic

After installing these packages, you can now install the Remote Development extension for VSCode. After installing this extension open the command pallet (ctrl+shift+p or cmd+shift+p) and select the command >Dev Containers: Rebuild and Reopen in Container. This will cause the development environment container to be built and launched.

You are now ready to start development!

Manual Environment Setup

If you don't want to use the dev container, you can still develop this project. First, you will need to install NodeJs (version 20) and FFmpeg.

Next you will need to create a dev.js file in the project's root directory. This contains configuration information and paths unique to your development environment. You can find an example of this file in .devcontainer/dev.js.

You are now ready to build the client:

npm ci
cd client
npm ci
npm run generate
cd ..

Development Commands

After setting up your development environment, either using the dev container or using your own custom environment, the following commands will help you run the server and client.

To run the server, you can use the command npm run dev. This will use the client that was built when you ran npm run generate in the client directory or when you started the dev container. If you make changes to the server, you will need to restart the server. If you make changes to the client, you will need to run the command (cd client; npm run generate) and then restart the server. By default the client runs at localhost:3333, though the port can be configured in dev.js.

You can also build a version of the client that supports live reloading. To do this, start the server, then run the command (cd client; npm run dev). This will run a separate instance of the client at localhost:3000 that will be automatically updated as you make changes to the client.

If you are using VSCode, this project includes a couple of pre-defined targets to speed up this process. First, if you build the project (ctrl+shift+b or cmd+shift+b) it will automatically generate the client. Next, there are debug commands for running the server and client. You can view these targets using the debug panel (bring it up with (ctrl+shift+d or cmd+shift+d):

  • Debug server—Run the server.
  • Debug client (nuxt)—Run the client with live reload.
  • Debug server and client (nuxt)—Runs both the preceding two debug targets.

How to Support

See the incomplete "How to Support" page

audiobookshelf's People

Contributors

advplyr avatar burghy86 avatar cassieesposito avatar hallo951 avatar igorkaldowski avatar ipcintron avatar iso-b avatar jblond avatar jflattery avatar jmt-gh avatar k9withabone avatar keaganhilliard avatar kieraneglin avatar lkiesow avatar lukeiam avatar machou avatar mfcar avatar mikiher avatar mx03 avatar nichwall avatar petras-sukys avatar pmangro avatar rasmuslos avatar ruoti avatar sapd avatar selfhost-alt avatar springsunx avatar tomazed avatar undergrid avatar weldawadyathink avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

audiobookshelf's Issues

Certain Folder Structures "hide" audiobooks from Scanner.

There are 4 books in this particular collection (Dennis Taylor's Bobiverse Series).

They are in the folders like this:
image

Notice the three .m4b files and a folder.

In AudioBookShelf, the only thing detected by the scan were the contents of that last folder
image

View from ABS:
image

Request: Order by Volume # use absolute numbering

Currently when ordered by Volume # it comes out as: (SQL default?)
1
10
11
2
20

Absolute numbering would be more useful for the user, as:
1
2
2.5
3

Using Real numbers to account for prequels & side stories.

Request: User Level Mass-Mark Read

Now that the Mass Mark Read flag is available on the home screen when doing a multi-select, can multi-select be made available to the user level accounts and given that ability?

Here's a screenshot of a user mousing over a title, but the multi-select option is not available.
image

Keyword Filter is too unforgiving because it is CaSe-SenSitiVe

The Keyword Filter is meant to help find books quicker. However, anything other than a CASE-SENSITIVE match will yield no results. I wonder if the tolerance needs to be "loosened up" a bit by removing case-matching.

Exact Match result for "The Language":
image

Result for "language":
image

Finally something that could dethrone Booksonic

First of all, very nice interface and I love how easy is to edit the audio books directly from UI, including search for covers.

So far I have request if possible, same like "Genre" ( by the way love that I can type my own genre and it will create it ) could you add input for "Series" ?

For example I could filter out Grotrex and Felix series, these have different authors but are part of one series. Same for example for Horus heresy books.

BUG(?): When I create my own Genre, by typing something that is not in the predefined list I can see that genre in main UI ( top right as option, which is good but I can't see it in the list when I want to add another book into it, the predefined list that offer genre seems to be static.

Request: user management, I did not notice any option to change password, add user, del user...

Looking forward to mobile app :D

users' "is active" status seems to be ignored at this time.

I noticed that the "active" toggle switch doesn't seem to be doing anything yet. Meaning, I am able to log in (with the proper credentials) to a user even if they are not marked as an "active" account.

Hopefully, that was helpful.

What do you think?

P.S. I had a much larger report that I deleted because all seems to be fixed when I thought to create a new user on the current version of the app and test with that. (All my previous tests were with users created on an older version)

Request: Turn Off Automatically Empty Trash

Anyone using this with remote mounted storage will likely get frustrated if they start up their machine and the remote mount doesn't come up, then the scanner can't find the files so it removes the book from the library and then pairs it as something new once reconnected.

Please add an option to turn off the Automatically Empty Trash on scan in the Settings.

Loging screen showing ROOT username

I forwarded the port to have an access to the server externally but I think there is few things that needs to be done to make the server more secure.

On the login screen the user ROOT shows up. I think username field should be empty.
image

It would be good if there was an option to delete user ROOT if another admin user has been created as the root user is the most attacked user name.

I think this should make the server a bit more secure.

Enhancement: Add a little dot to your chapter highlight

I love the little tweaks being made to make this more powerful and at the same time, easy to use. Keep it up!

My suggestion comes because while testing your recently added feature of having the currently playing chapter highlighted in the chapter's modal, I noticed that it was trickier to spot the highlight.

Maybe you could change the color of the highlight, or just add a little dot, like so:
image

What do you think?

Request: Manually select local cover image file

After the scanner was unable to find some niche book covers, I found my own links and used those, but found that occasionally links wouldn't work for the images, so I'd like to be able to go into a single book and select an image I've downloaded, or have the database automatically recognize an image file in the folder with a book (Either with the same name as the book or just named "cover.jpg" for example) and have the option to use local files for cover images.

Along with this, not sure if it would be possible, but it would be nice if there was an option to download found covers in the scanner and have those files available locally and placed alongside their respective books, so that all book and cover files could be hosted locally.

Scanner won't scan

When clicking scan, just shows "Scanning... 0 of 0 0%", and the log shows an error of "Api called without a token", along with a few other things. When I initially tested the scan after the install, it did scan the 2 books I put in there for testing, but after the recent update it won't add any of the other books that I added. I've attached a txt file that's a copy of the log for reference

Audiobookshelf log 8-20-2021.txt

Bug: Scanner Adds Duplicates of First Track to Track List

Some of the books are saying "Duplicate Track" but it turns out to be the first track was added multiple times to the track list.

image

When I tested fixing this one by removing the year and rescanning, another one popped up with the issue. Removing the year didn't fix it.

Enhancement: Mark Read Button on Home Page During Multi-Select

I love this application and how quickly it is coming together. In order to migrate an existing library from alternatives, the ability to quickly get the read status up to date is needed.

This can be mostly accomplished by adding a "Mark Read" button to the home screen when items are being multi-selected.

False duplicate detected. Adjustment needed.

Found a wrinkle that could use some smoothing...

image

You'll notice that I numbered this particular series "Brandon Sanderson - [Mistborn -4.0]" and then "Brandon Sanderson - [Mistborn -4.5]", but there is an incorrect duplicate detected. I suspect it is ignoring the decimal. Is there a way this precision could be added. I know I can "cheat" and rename 4.5 to 5 and increment that way. But, then the correct book order wouldn't be represented in the filename (and that would be nice to preserve, if possible).

A thought: maybe it would work out to have an override for the duplicate detection and "force" it to be included. Maybe on this screen?

image

Just thinking out loud here.

What do you think?

Server not saving book details or tags

I wanted to add some more book details and add some tags and I noticed that the server stopped saving this details.
First it looks like it is saved but if I refresh the page, the changes are gone.

Enhancement: Allow download option (per user if possible)

I had been thinking of something almost EXACTLY like this, so I was very happy to find it in unraid!!! Works great!

Is it possible to add allowing users to download through the browser UI? If it was on a per user basis, that would be even better. This would allow users who will be offline the chance to grab the audio ahead of time.

What do you think?

Either way, thank you for creating this!

Enhancement: Would it be possible to view the ebook version

I'm aware that the primary focus of this is to play audiobooks and do it well.

The thing is, your layout and interface and feature set is so good, that I'd LOVE to make this the access point to my personal library of ebooks and audiobooks!

We could include common ebook formats (epub, pdf, etc) in the same locations as the audiobooks. And if one of those formats is detected, we could have a "read"/"eBook" button show up that will let us select which file to display (in case of multiple eBook files) and view the eBook version.

example:
image

This would be perfect for books that have rich art that goes along with them that is hard/impossible to convey in the audio format. (Several Brandon Sanderson books come to mind that are Art rich titles)

I would just LOVE to have something exactly like what you've built that makes it easy to display, share, and use the many eBooks that I also have. And I figure, if we could do it all from the same place, that would be even better! If you're worried about too many non-audio books showing up (maybe the scanner sees the books even if the audiobook file is missing), then maybe we could simply add a quick-select switch on the main screen that let's us view books that "have audio", "eBooks" or "Both/All". This way, maybe there won't be too much extra to do.

Maybe something like this?:
image

But, what do YOU think?

P.S. reading this again, I realize that it would have been more accurate to have the "display quick-select" options read more like: Show All, Includes Audio, Includes eBook. The idea was meant to have it quickly display everything, or only all the books that have an audio file to go with it (even if they also have eBook files), or only display all the books that include eBook files (even if they also have audio files too). Do you know what I'm meaning?

Book not being added

So, just noticed this one:

image

BUT, you'll see what I've got in the path is:

image

Checking the existing book, it doesn't have the files accidentally under it. Tried fixing the name with and without the apostrophe (ie. mans/man's). Messed with the filenames:

image

Any thoughts?

BUG: Merge download feature used to work and is now misbehaving

image

The merge feature (while experimental) was working as expected before and is now giving me grief. I had a book with 30 tracks that I wanted merged from mp3 to a single, chapter-supporting, m4b.

Not sure what changed, but let me know what else I can do to help test this for you so we can get it working again.

You're doing GREAT! This is awesome!

Request: Pressing Enter in Global Search Loads Page of Results

The search bar not doing anything when Enter is pressed seems like a waste of its use, but it seems to basically do the same thing as the Keyword Filter entry but in a dropdown list.

Can the function of the Keyword Filter entry be moved to when Enter is pressed when using the Search box?

Audiobook status tags and icons

It would be really usefull if all the audiobooks got automatically assigned listening status like: New, Listening, Finished visible on the bookshelf. It could be a small icon on the bookcover or something like this, so I could clearly see which books are newly added or 100% finished. It could be used in the filter to show only the books with specific status like only new books, or only the started books.
I can see that all started books on the bookshelf have a yellow progress bar below the bookcover but this is barely visible and it is dificult to say it the books is 100% finished or almost fininished like 95%.
This is a great project and thank you for your work.

Bug? I'm actually not sure what Cover Scan is supposed to do.

When I click Scan for Covers it goes through and seems to scan all the image files in my library, but nothing actually updates until I click the big green Scan button.

  • Scan for Covers
    [2021-09-18T22:04:16.429Z] INFO: [Server] Start cover scan
    [2021-09-18T22:06:06.060Z] INFO: [Server] Cover scan complete

  • Scan
    [2021-09-18T22:11:32.187Z] INFO: [Server] Starting Scan
    [2021-09-18T22:11:32.625Z] INFO: [Scanner] Audiobook "Moby-Dick [Herman Mellvile]" is missing
    [2021-09-18T22:11:32.187Z] INFO: [Server] Starting Scan
    [2021-09-18T22:11:32.625Z] INFO: [Scanner] Audiobook "Moby-Dick [Herman Mellvile]" is missing
    [2021-09-18T22:11:32.810Z] INFO: [Audiobook] Local cover was set | "Ark Royal (2014)"
    [2021-09-18T22:11:32.810Z] INFO: [Scanner] "Ark Royal (2014)" was updated - saving
    [2021-09-18T22:11:32.966Z] INFO: [Audiobook] Local cover was set | "Culture Shock (2016)"
    [2021-09-18T22:11:32.966Z] INFO: [Scanner] "Culture Shock (2016)" was updated - saving
    [2021-09-18T22:11:33.127Z] INFO: [Audiobook] Local cover was set | "Semper Fi (2013)"
    [2021-09-18T22:11:33.127Z] INFO: [Scanner] "Semper Fi (2013)" was updated - saving
    [2021-09-18T22:11:33.283Z] INFO: [Audiobook] Local cover was set | "Never Surrender (2015)"
    [2021-09-18T22:11:33.283Z] INFO: [Scanner] "Never Surrender (2015)" was updated - saving
    [2021-09-18T22:11:33.439Z] INFO: [Audiobook] Local cover was set | "No Worse Enemy (2012)"
    [2021-09-18T22:11:33.440Z] INFO: [Scanner] "No Worse Enemy (2012)" was updated - saving
    [2021-09-18T22:11:33.594Z] INFO: [Audiobook] Local cover was set | "The Empires Corps (2011)"
    [2021-09-18T22:11:33.594Z] INFO: [Scanner] "The Empires Corps (2011)" was updated - saving
    [2021-09-18T22:11:33.745Z] INFO: [Audiobook] Local cover was set | "The Longest Day (2017)"
    [2021-09-18T22:11:33.745Z] INFO: [Scanner] "The Longest Day (2017)" was updated - saving

about chapter name

Sometimes the name of audiobookfile is chapter name, not just 001.mp3 ...
So if the chapters is empty, use filename as chapter name is helpful. And we can know which file is being played while playing.

My temporary method:
image

UI clarification suggestion for "remove" option

I had to manually test for how the "remove" function worked because it wasn't clear.

I assumed it wouldn't "delete" the files from my storage location and only "remove" the listing from my bookshelf and it turned out that WAS how it worked. But I wonder if there might be a little confusion in others as well.

Maybe a quick note somewhere noting that this will "remove from audiobookshelf library only and not 'touch' the files on the filesystem" ... or something. Maybe the note could be on the confirmation prompt when we are asked to verify our removal action.

What do you think?

P.S. I hope I'm not coming off as "picky", but you got all the really big, important stuff almost totally tackled! At least in my opinion, you're almost at the point where all that's left are little "picky" fixes, and feature enhancements!

You're doing GREAT work!!!

Directory Format

I imported a some audiobooks that I manage with both Plex and BookSonic that seem to like the directory structure to be:

author -> series -> year - title

Importing the same library into audiobookshelf treats the year as number of parts, stating that parts are missing.

Sort by Volume number in the Series

It would be great if there was an option to sort the books by Volume number in the Series.
So for example if I'm filtering books by Series, it would make sense to have the books in order by Volume number.

Bug: Invalid Token with no way to clear the session.

Hello,
For one of my users this error keeps appearing in the logs. In that account I can login, but no audiobooks populate in the library. I am able to login to other accounts and the library populates fine though. Spacing because github won't format this correctly...

[2021-09-16T03:10:29.179Z] ERROR: Cannot validate socket - invalid token
[2021-09-16T03:10:50.580Z] ERROR: JWT Verify Token Failed TokenExpiredError: jwt expired

at /node_modules/jsonwebtoken/verify.js:152:21

at getSecret (/node_modules/jsonwebtoken/verify.js:90:14)

at Object.module.exports [as verify] (/node_modules/jsonwebtoken/verify.js:94:10)

at /server/Auth.js:80:11

at new Promise ()

at Auth.verifyToken (/server/Auth.js:79:12)

at Auth.authMiddleware (/server/Auth.js:48:27)

at Server.authMiddleware (/server/Server.js:123:15)

at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:95:5)

at trim_prefix (/node_modules/express/lib/router/index.js:317:13) {
expiredAt: 2021-09-03T01:22:30.000Z
}
[2021-09-16T03:10:50.580Z] ERROR: Verify Token User Not Found eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJrdDNuN2pmbCIsImlhdCI6MTYzMDYzMDM1MCwiZXhwIjoxNjMwNjMyMTUwfQ.j_KkGWHpmxozACbAjx_illP86JUiwlRWqDBapNSu9vU

Crash: Server Crashed on Unraid

OS: Unraid
Install: Docker
ABS v1.1.10

I tried to login today and found the server down. It looks like Audiobookshelf has NPM packaged in the container.

This is everything in my logs, after which I had tried to batch update my entire library hours before so I don't think any of it applies and some of that may be in here.

/node_modules/proper-lockfile/lib/lockfile.js:213
onCompromised: (err) => { throw err; },
^

[Error: ENOENT: no such file or directory, stat '/config/audiobooks/data/data.2.json.lock'] {

errno: -2,
code: 'ECOMPROMISED',
syscall: 'stat',
path: '/config/audiobooks/data/data.2.json.lock'
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node index.js`
npm ERR! Exit status 1


npm ERR! Failed at the [email protected] start script.

npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-09-17T01_47_53_048Z-debug.log

Enhancement: Segmented streaming

First off thanks for the great project. A self-hosted audiobook platform is greatly needed and currently underserved. I hope this project takes off and I will be following closely and assisting where I can.

I don't know the correct terminology but I have noticed that when playing m4b files on a remote network through the Android app the entire file is downloaded in advance rather than it caching and beginning playback as soon as enough data is available. Is this a limitation of the mb4 file format? If so are there other options to remux or transcode into a container or format that supports this?

Request: New Filter Option, Status, Containing: Unread, Read, In Progress

A filter option to view books that are in specific states would be useful. The three I think are needed are:

  • Unread
  • Read
  • In Progress

This would allow a user to more easily navigate to the next Unread they could be looking for, rediscover a book they had stopped midway, and manage their library of Read items.

Server crashing

After last update, the Audiobookshelf container started crashing. This is the log:

> [email protected] start /
> node index.js

[2021-09-05T11:44:17.239Z] INFO: Log Level: 2
Config /config /metadata /audiobooks
[2021-09-05T11:44:17.325Z] INFO: === Starting Server ===
[2021-09-05T11:44:17.325Z] INFO: [Server] Init
[2021-09-05T11:44:17.326Z] INFO: Removing Orphan Stream downloads
[2021-09-05T11:44:17.349Z] INFO: Users Loaded 2
[2021-09-05T11:44:17.351Z] INFO: Audiobooks Loaded 21
[2021-09-05T11:44:17.351Z] ERROR: [DB] Insert settings Failed TypeError: Not an array

[2021-09-05T11:44:17.352Z] INFO: [FolderWatcher] Initializing..
[2021-09-05T11:44:17.356Z] INFO: Running on http://0.0.0.0:80
[2021-09-05T11:44:17.400Z] INFO: [FolderWatcher] Ready
[2021-09-05T11:58:16.380Z] INFO: [SOCKET] Socket Connected QFZg3yU2QbosaSicAAAB
[2021-09-05T11:58:31.082Z] INFO: [SOCKET] Socket Connected -UG5BCuZRUaHsnZIAAAD
/server/StreamManager.js:125
Logger.error('No stream for client', client.user.id)

^

TypeError: Cannot read property 'id' of undefined
at StreamManager.streamUpdate (/server/StreamManager.js:125:56)
at Socket.<anonymous> (/server/Server.js:190:66)
at Socket.emit (events.js:314:20)
at Socket.emitUntyped (/node_modules/socket.io/dist/typed-events.js:69:22)
at /node_modules/socket.io/dist/socket.js:428:39
at processTicksAndRejections (internal/process/task_queues.js:79:11)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node index.js`
npm ERR! Exit status 1


npm ERR! Failed at the [email protected] start script.

npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-09-05T11_58_36_116Z-debug.log

Enhancement: Stack Into Series on Home Screen with Unread and/or Total Books Counters

Currently the Home Screen can be a bit cluttered, and make it difficult to determine if a book is missing or find it if the search isn't doing it due to some tagging error.

If the books were allowed to be stacked into their Series, with strays still cluttering the surrounding area, clean up of tagging would be improved and overall usability of the home screen could improve.

With that, if Series were marked with the number of Unread books at home screen then it becomes that much easier to identify where to go for a newly imported title for listening or download.

Users can't always see audiobooks

Just set up audiobookshelf in a docker container, works great when signing in as root but the other user couldn't see the audiobooks. I created another user for testing and that user could see the audiobook - refreshing the library did nothing. In this screenshot you can see me signed in to the main user in one tab and the root user in another.
image

Please let me know if you need any more info for diagnosis.

Not an issue

Hey, first, THANK YOU!!! This is amazing. I just added your audiobookshelf to my unraid dockers. Works great! I wish I had any developer skills because this is exactly the functionality that I've been wishing someone smarter than me would make! I'm a jellyfin fanboy but it sucks at audio books. Have you considered taking your awesome bookshelf and integrating it into jellyfin rather than making full standalone server? If you got a donation thing somewhere, I definitely owe you a good beer!

Refresh Book Covers

Couple suggestions here:

First, when I import something, it's missing covers most of the time. However, on a manual search, it is not only always finding covers, it's usually even a good cover. So maybe some sort of "pull a cover and apply it and call it good" kind of option?

Second, if files get moved or changed, as far as I know the only way to find them is to scan again. But if you do that, you've now got dupes. So then you're either manually deleting dupes, or you're clearing and then rescanning...which means you've lost all the stuff you just fixed. Maybe a way to do a refresh rather than a complete delete and renew?

Third, I know you just added series, but a way to add a number as an additional option to the series so that books can be ordered inside a series would be pretty nice.

Fourth, if you're going to do sort by author, it'd really make sense to sort by last name, not first.

Finally, while I know people will probably disagree with me on this one, it would be nice to be able to make the main page work as folders. While it's nice to see 200 book covers all at once, it's not entirely practical. An option to get sub-shelves based on authors (composite pictures? Randomly chosen? Whatever) or series or something like that would be nice.

Alphabetization seems to be broken

It's possible one of the problems you're seeing here is that the Peter F. Hamilton books have a middle initial.

Title seems good:

image

Last, First:

Pretty random:

image

First, Last:

Doesn't change from the previous:

image

All of the authors are all consistent - all the Robert Jordan are the same text, all the Peter F. Hamilton are the same text, etc. But as you can see, they're sprinkled randomly. Duration and size I haven't actually checked that thoroughly, but they SEEM good.

Bug: Generate M4B creates a 30kb file instead of complete file.

image

When I clicked on the "Start Download" button, it finishes almost immediately and the button then says "Download". But when I click it the download it gives me (while it IS the expected filename and .m4b format) is only a few kb instead of the complete file I was expecting.

In case it's helpful, I'm including the logs generated in the metadata folder where the generated file is stored:

`file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 01.m4b
duration 1124.636

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 02.m4b
duration 1448.902

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 03.m4b
duration 1247.098

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 04.m4b
duration 864.015

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 05.m4b
duration 822.939

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 06.m4b
duration 669.664

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 07.m4b
duration 891.531

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 08.m4b
duration 1243.058

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 09.m4b
duration 858.582

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 10.m4b
duration 2289.929

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 11.m4b
duration 774.386

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 12.m4b
duration 795.191

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 13.m4b
duration 1838.092

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 14.m4b
duration 1186.122

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 15.m4b
duration 1429.63

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 16.m4b
duration 1154.357

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 17.m4b
duration 1004.728

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 18.m4b
duration 1692.131

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 19.m4b
duration 922.994

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 20.m4b
duration 1136.176

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 21.m4b
duration 1426.681

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 22.m4b
duration 1377.826

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 23.m4b
duration 972.081

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 24.m4b
duration 1034.24

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 25.m4b
duration 1075.293

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 26.m4b
duration 1903.967

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 27.m4b
duration 1284.644

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 28.m4b
duration 1098.606

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 29.m4b
duration 1507.068

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 30.m4b
duration 853.821

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 31.m4b
duration 996.183

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 32.m4b
duration 1898.139

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 33.m4b
duration 1576.984

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 34.m4b
duration 605.507

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 35.m4b
duration 559.834

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 36.m4b
duration 961.423

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 37.m4b
duration 501.76

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 38.m4b
duration 722.814

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 39.m4b
duration 484.81

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 40.m4b
duration 970.014

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 41.m4b
duration 1355.14

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 42.m4b
duration 478.564

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 43.m4b
duration 253.168

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 44.m4b
duration 318.439

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 45.m4b
duration 632.605

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 46.m4b
duration 824.309

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 47.m4b
duration 429.755

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 48.m4b
duration 824.657

file /audiobooks/Brandon\ Sanderson/Skyward\ Series/Book\ 02\ -\ Starsight/Starsight\ -\ 49.m4b
duration 1584.922`

;FFMETADATA1 title=Starsight artist=Brandon Sanderson date= comment=AudioBookshelf v1.2.5 genre=Audiobook [CHAPTER] TIMEBASE=1/1000 START=0 END=1124636 title=Chapter 1 [CHAPTER] TIMEBASE=1/1000 START=1124636 END=2573538 title=Chapter 2 [CHAPTER] TIMEBASE=1/1000 START=2573538 END=3820636 title=Chapter 3 [CHAPTER] TIMEBASE=1/1000 START=3820636 END=4684651 title=Chapter 4 [CHAPTER] TIMEBASE=1/1000 START=4684651 END=5507590 title=Chapter 5 [CHAPTER] TIMEBASE=1/1000 START=5507590 END=6177254 title=Chapter 6 [CHAPTER] TIMEBASE=1/1000 START=6177254 END=7068785 title=Chapter 7 [CHAPTER] TIMEBASE=1/1000 START=7068785 END=8311843 title=Chapter 8 [CHAPTER] TIMEBASE=1/1000 START=8311843 END=9170425 title=Chapter 9 [CHAPTER] TIMEBASE=1/1000 START=9170425 END=11460354 title=Chapter 10 [CHAPTER] TIMEBASE=1/1000 START=11460354 END=12234740 title=Chapter 11 [CHAPTER] TIMEBASE=1/1000 START=12234740 END=13029931 title=Chapter 12 [CHAPTER] TIMEBASE=1/1000 START=13029931 END=14868023 title=Chapter 13 [CHAPTER] TIMEBASE=1/1000 START=14868023 END=16054145 title=Chapter 14 [CHAPTER] TIMEBASE=1/1000 START=16054145 END=17483775 title=Chapter 15 [CHAPTER] TIMEBASE=1/1000 START=17483775 END=18638132 title=Chapter 16 [CHAPTER] TIMEBASE=1/1000 START=18638132 END=19642860 title=Chapter 17 [CHAPTER] TIMEBASE=1/1000 START=19642860 END=21334991 title=Chapter 18 [CHAPTER] TIMEBASE=1/1000 START=21334991 END=22257985 title=Chapter 19 [CHAPTER] TIMEBASE=1/1000 START=22257985 END=23394161 title=Chapter 20 [CHAPTER] TIMEBASE=1/1000 START=23394161 END=24820842 title=Chapter 21 [CHAPTER] TIMEBASE=1/1000 START=24820842 END=26198668 title=Chapter 22 [CHAPTER] TIMEBASE=1/1000 START=26198668 END=27170749 title=Chapter 23 [CHAPTER] TIMEBASE=1/1000 START=27170749 END=28204989 title=Chapter 24 [CHAPTER] TIMEBASE=1/1000 START=28204989 END=29280282 title=Chapter 25 [CHAPTER] TIMEBASE=1/1000 START=29280282 END=31184249 title=Chapter 26 [CHAPTER] TIMEBASE=1/1000 START=31184249 END=32468893 title=Chapter 27 [CHAPTER] TIMEBASE=1/1000 START=32468893 END=33567499 title=Chapter 28 [CHAPTER] TIMEBASE=1/1000 START=33567499 END=35074567 title=Chapter 29 [CHAPTER] TIMEBASE=1/1000 START=35074567 END=35928388 title=Chapter 30 [CHAPTER] TIMEBASE=1/1000 START=35928388 END=36924571 title=Chapter 31 [CHAPTER] TIMEBASE=1/1000 START=36924571 END=38822710 title=Chapter 32 [CHAPTER] TIMEBASE=1/1000 START=38822710 END=40399694 title=Chapter 33 [CHAPTER] TIMEBASE=1/1000 START=40399694 END=41005201 title=Chapter 34 [CHAPTER] TIMEBASE=1/1000 START=41005201 END=41565035 title=Chapter 35 [CHAPTER] TIMEBASE=1/1000 START=41565035 END=42526458 title=Chapter 36 [CHAPTER] TIMEBASE=1/1000 START=42526458 END=43028218 title=Chapter 37 [CHAPTER] TIMEBASE=1/1000 START=43028218 END=43751032 title=Chapter 38 [CHAPTER] TIMEBASE=1/1000 START=43751032 END=44235842 title=Chapter 39 [CHAPTER] TIMEBASE=1/1000 START=44235842 END=45205856 title=Chapter 40 [CHAPTER] TIMEBASE=1/1000 START=45205856 END=46560996 title=Chapter 41 [CHAPTER] TIMEBASE=1/1000 START=46560996 END=47039560 title=Chapter 42 [CHAPTER] TIMEBASE=1/1000 START=47039560 END=47292728 title=Chapter 43 [CHAPTER] TIMEBASE=1/1000 START=47292728 END=47611167 title=Chapter 44 [CHAPTER] TIMEBASE=1/1000 START=47611167 END=48243772 title=Chapter 45 [CHAPTER] TIMEBASE=1/1000 START=48243772 END=49068081 title=Chapter 46 [CHAPTER] TIMEBASE=1/1000 START=49068081 END=49497836 title=Chapter 47 [CHAPTER] TIMEBASE=1/1000 START=49497836 END=50322493 title=Chapter 48 [CHAPTER] TIMEBASE=1/1000 START=50322493 END=51907415 title=Chapter 49

Bug: Web Player: Attempted Stream of nonexistent file results in unclosable player that keeps trying the file.

If a user attempts to play a file that has been removed/renamed but the scanner hasn't picked it up, then the player just keeps hitting the server for the file.

I suppose the player could be closed by attempting to play another book and then stopping, but I didn't think to try it until after.

[2021-09-17T20:38:56.208Z] INFO: Stream Opened for client root for audiobook The Empire's Corps with streamId ktotr7qw
[2021-09-17T20:38:56.217Z] INFO: [INFO] FFMPEG transcoding started with command: ffmpeg -f concat -safe 0 -i /metadata/ktotr7qw/files.txt -y -loglevel error -map 0:a -c:a copy -f hls -copyts -avoid_negative_ts disabled -max_delay 5000000 -max_muxing_queue_size 2048 -hls_time 6 -hls_segment_type mpegts -start_number 0 -hls_playlist_type vod -hls_list_size 0 -hls_allow_cache 0 -hls_segment_filename /metadata/ktotr7qw/output-%d.ts /metadata/ktotr7qw/final-output.m3u8

[2021-09-17T20:38:56.217Z] INFO:
[2021-09-17T20:38:56.228Z] INFO: [concat @ 0x56357479b140] Impossible to open '/audiobooks/Christopher Nuttall/The Empire's Corps/The Empire's Corps - Book 10 - Never Surrender/The Empire's Corps - Book 10 - Never Surrender 2.mp3'
[2021-09-17T20:38:56.228Z] INFO: /metadata/ktotr7qw/files.txt: No such file or directory
[2021-09-17T20:38:56.229Z] INFO:
[2021-09-17T20:38:56.230Z] ERROR: Ffmpeg Err ffmpeg exited with code 1: /metadata/ktotr7qw/files.txt: No such file or directory

[2021-09-17T20:38:58.219Z] WARN: No Segments
[2021-09-17T20:39:00.220Z] WARN: No Segments
[2021-09-17T20:39:02.222Z] WARN: No Segments
[2021-09-17T20:39:04.223Z] WARN: No Segments
[2021-09-17T20:39:06.226Z] WARN: No Segments

Possible UI z depth tweak

I wanted to see where the "delete" button was and couldn't find it, until I realized it was being hidden by the playback UI at the bottom of the screen.

A possible solution might be to have the "edit" UI be on a higher layer (I think it's called z-depth) than the playback UI elements.

To be clear, this is NOT a big deal, but it did take me a moment to realize what to do. (In case it matters, I'm on a 2160p windows resolutions with 200% windows auto-scaling) I just figured I'd point it out in case it was an easy fix.

Enhancement: In progress/Recently Played views

A view with all in progress books sorted by most recently played would be great to have. Having the option to make this the default view when opening the webui/app makes sense to me from an intuitive use case as more often than not I am looking to continue a book already in progress rather than searching for a new book to start.

I realized that this can already be done using the filters but I think it really deserves its own tab like library and collections.

Some books not matching

So...I've got some books not matching. I'm guessing the title is off by a tiny bit.

What is the matching source? It would be good to know so that I can look them up manually and rename appropriately so that matching works correctly.

Enhancement request: Add per-user support for book Uploads

It would be awesome if it would be possible to upload (maybe drag and drop?) directly into our audiobook library using the browser. And adding permissions for this would be even better! That way, our libraries don't get bogged down with poor curators' contributions.

What do you think?

Enhancement: Requesting support for chapters

I have most of my audiobooks built as .m4b with chapter support (built with: https://github.com/yermak/AudioBookConverter).

Is it possible to add chapter support to the playback of the audiobooks?

I first noticed this was missing when I tried the download feature that combines all related tracks into one file (which totally works, BTW!). It seems related, and just in case it is, would it be possible to maintain chapters when combining tracks into one file? That would be really cool too.

What do you think?

Either way, THANK YOU for building this! AS-IS this is exactly what I was hoping to find. I wanted something that could easily serve my audiobook collection to family and friends that wouldn't require anything technical on their end, and this TOTALLY delivers! So, thank you.

Enhancement: add chapter "tick" marks to the playback progress bar

Would it be possible to make selecting chapters a bit easier by adding little "ticks" onto or under the playback progress bar that are selectable (and, if possible, also show the chapter's name while hovering over)?

What you currently have:
image

How VLC portrays chapters on their playback progress bar (notice the chapter name "020" displays when I mouse hover over that "tick" mark or the section of the playback bar covered by that chapter):
image

What do you think?

Bug: Unable to Reset Database

I finally have things in a good place, thanks to figuring out LL, so tried to reset the library.

[2021-09-22T02:26:29.692Z] INFO: Removing all Audiobooks
[2021-09-22T02:26:29.699Z] ERROR: [DB] Failed to drop audiobook db [Error: ENOTEMPTY: directory not empty, rmdir '/config/audiobooks/tmp'] {

errno: -39,
code: 'ENOTEMPTY',
syscall: 'rmdir',
path: '/config/audiobooks/tmp'
}
[2021-09-22T02:26:37.940Z] INFO: Removing all Audiobooks
[2021-09-22T02:26:37.941Z] ERROR: [DB] Failed to drop audiobook db [Error: ENOENT: no such file or directory, lstat '/config/audiobooks/data'] {

errno: -2,
code: 'ENOENT',
syscall: 'lstat',
path: '/config/audiobooks/data'

Feature Suggestion: Mass Edits

Since you've gone ahead and made some changes at my suggestion, I'm seeing the effect of them, which opens up another idea: mass edits.

A button that will give a one-page display of all books in the system, so mass edits can be more easily made. All the main fields, all on one page. Have them populated by the current value, and users can input whatever they want. Using copying, pasting, and the clipboard, it'd be much easier to to do big changes, like making them all part of a series, then putting the number in that series in the following field.

It'll also help as you develop things further, changes are made, and people need to go back and do yet another edit to all their audiobooks as fundamental back end changes are implemented.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.