Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] Audiobookshelf

Featured Replies

On 1/21/2025 at 11:34 PM, LondonDragon said:

Love this project for Audiobooks and epub files, is there a way to extract the cover from PDF's? Would love to use this for my PDF collection also! thanks

Not possible? thanks

  • Replies 349
  • Views 137.6k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Hey,   I tried doing the same process and it's working fine now. It was definitely a cover issue as the web browser version showed invalid cover. The issue was the android app would crash in

  • Yes, this is because the scanner & folder watcher doesn't know for sure whether you deleted it or it got moved or maybe some random file system issue and it wasn't detected. In that case if it rem

  • I don't think this is the correct way to do this. Not sure what problems you were having with the standard config. This worked for me, just make sure you're on the same network as SWAG   ## Ve

Posted Images

  • Author
3 hours ago, LondonDragon said:

Not possible? thanks

No, there is a feature request open for it on Github. It's best to check Discord and Github since most any question you have will have already been answered or discussed.

  • 1 month later...

Hi @advplyr. I recently had to recreate my docker img. After reinstalling Audiobookshelf from the old existing template which worked previously, I can't access it via ita LAN ip.

 

But oddly I can access it via URL because I reverse proxied it.

Do you know how to resolve this?

  • 4 weeks later...

I would like to change the container(!) port number for the server web UI (note that I do not want to change the host port number, I know that the docker port mapping can be used for that!). Is there an environment variable that I can use, or a config file that I need to change?

the container environment variable for the container port number seems to be PORT.

  • Author
1 hour ago, murkus said:

ntainer(!) port number for the server web UI (note that I do not want to change the host port number, I know that the docker port mapping can be used for that!). Is there an environment variable that I can use, or a conf

You can refer to the docs for the env vars https://www.audiobookshelf.org/docs#network

  • 1 month later...

Container is failing to spinup. Something about a DB error?

From logs:

[2025-07-29 02:53:40.379] INFO: [MigrationManager] Restored the original database from the backup.

[2025-07-29 02:53:40.380] INFO: [MigrationManager] Migration failed. Exiting Audiobookshelf with code 1.

Running in production mode.

Options: CONFIG_PATH=/config, METADATA_PATH=/metadata, PORT=80, HOST=undefined, SOURCE=docker, ROUTER_BASE_PATH=/audiobookshelf

[2025-07-29 03:30:49.571] INFO: === Starting Server ===

[2025-07-29 03:30:49.577] INFO: [Server] Init v2.26.3

[2025-07-29 03:30:49.577] INFO: [Server] Node.js Version: v20.19.4

[2025-07-29 03:30:49.577] INFO: [Server] Platform: linux

[2025-07-29 03:30:49.578] INFO: [Server] Arch: x64

[2025-07-29 03:30:49.582] INFO: [Database] Initializing db at "/config/absdatabase.sqlite"

[2025-07-29 03:30:49.639] INFO: [Database] Loading extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2025-07-29 03:30:49.648] INFO: [Database] Successfully loaded extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2025-07-29 03:30:49.649] INFO: [Database] Db supports unaccent and unicode foldings

[2025-07-29 03:30:49.649] INFO: [Database] Db connection was successful

[2025-07-29 03:30:49.749] INFO: [MigrationManager] Migrating database up to version 2.26.3

[2025-07-29 03:30:49.749] INFO: [MigrationManager] Migrations to run: v2.15.0-series-column-unique.js, v2.15.1-reindex-nocase.js, v2.15.2-index-creation.js, v2.17.0-uuid-replacement.js, v2.17.3-fk-constraints.js, v2.17.4-use-subfolder-for-oidc-redirect-uris.js, v2.17.5-remove-host-from-feed-urls.js, v2.17.6-share-add-isdownloadable.js, v2.17.7-add-indices.js, v2.19.1-copy-title-to-library-items.js, v2.19.4-improve-podcast-queries.js, v2.20.0-improve-author-sort-queries.js, v2.26.0-create-auth-tables.js

[2025-07-29 03:30:49.755] INFO: Created a backup of the original database.

[2025-07-29 03:30:49.773] INFO: { event: 'migrating', name: 'v2.15.0-series-column-unique.js' }

[2025-07-29 03:30:49.778] INFO: [2.15.0 migration] UPGRADE BEGIN: 2.15.0-series-column-unique

[2025-07-29 03:30:49.778] INFO: [2.15.0 migration] Reindexing NOCASE indices to fix potential hidden corruption issues

[2025-07-29 03:30:49.797] INFO: [MigrationManager] Saved the failed database as absdatabase.failed.sqlite.

[2025-07-29 03:30:49.800] INFO: [MigrationManager] Restored the original database from the backup.

[2025-07-29 03:30:49.800] INFO: [MigrationManager] Migration failed. Exiting Audiobookshelf with code 1.

  • 2 weeks later...

I just started having this happen today.
[Server] Unhandled rejection: TypeError: Cannot read properties of null (reading 'path') at PublicRouter.getTrack (/app/server/controllers/SessionController.js:312:88) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) promise: Promise { <rejected> TypeError: Cannot read properties of null (reading 'path') at PublicRouter.getTrack (/app/server/controllers/SessionController.js:312:88) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) }

It's taken down the service twice today, not sure what's throwing the null path... Anyone else have this issue?

  • Author
1 hour ago, ccano2011 said:

I just started having this happen today.
[Server] Unhandled rejection: TypeError: Cannot read properties of null (reading 'path') at PublicRouter.getTrack (/app/server/controllers/SessionController.js:312:88) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) promise: Promise { <rejected> TypeError: Cannot read properties of null (reading 'path') at PublicRouter.getTrack (/app/server/controllers/SessionController.js:312:88) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) }

It's taken down the service twice today, not sure what's throwing the null path... Anyone else have this issue?

This is fixed in v2.28.0 that just went live. https://github.com/advplyr/audiobookshelf/releases/tag/v2.28.0

Edited by advplyr

  • 3 months later...

where are temporary files like transcoding files stored?

I have set /metadata to a dir on my array and the /audiobooks is pointing to my array for the actual audiobook files.

/config is mapped to my apopData... /mnt/user/appdata/audiobookshelf

So where would the transocde files be placed... as I am pretty sure this is the issue I have... as I was running this for a while recently and I got this warning...

[quote]Notice [serverName] - Docker image disk utilization of 87%

Docker utilization of image file /mnt/user/system/docker/docker.img[/quote]

After a while it returned to normal Docker image disk utilization returned to normal level. I assume when I stopped listening.

What I would like to do is make sure that any persist ant files, are stored outside of the appData dir, and preferably any non-resistant files, like those used during transcode, to be stored in ram.

TL;DR : What dir in the docker is used to store temperory transcode files?

Anyone have any idea about this? Where audiobookshelf stores the temp files during transcoding?

  • 2 weeks later...

Just installed fresh, but I dont get the first login page to change/setup the login. I get a login page, I tried root in the username field but, unauthorised

any idea how I fix it?

  • 2 months later...

So trying to find out why not all books are being imported for some authors. Below are the scan logs. Let me know if there is anything else I need. Just want to figure out why its not adding all books.
audiobookshelf.txt

2 hours ago, Jurak said:

So trying to find out why not all books are being imported for some authors. Below are the scan logs. Let me know if there is anything else I need. Just want to figure out why its not adding all books.
audiobookshelf.txt

So, according to the log, only 2 books were not imported, and it clearly says why:

{"timestamp":"2026-02-10T13:00:20.531Z","message":"Library item at path \"Sarah Noffke/Determine the Future\" has no audio files and no ebook file - ignoring","levelName":"WARN","level":3}

{"timestamp":"2026-02-10T13:00:20.601Z","message":"Library item at path \"Robert Jordan/The Fires of Heaven - Kate Reading + Michael Kramer\" has no audio files and no ebook file - ignoring","levelName":"WARN","level":3}

Check that there are actually audio files in there.

2 hours ago, strike said:

So, according to the log, only 2 books were not imported, and it clearly says why:

{"timestamp":"2026-02-10T13:00:20.531Z","message":"Library item at path \"Sarah Noffke/Determine the Future\" has no audio files and no ebook file - ignoring","levelName":"WARN","level":3}

{"timestamp":"2026-02-10T13:00:20.601Z","message":"Library item at path \"Robert Jordan/The Fires of Heaven - Kate Reading + Michael Kramer\" has no audio files and no ebook file - ignoring","levelName":"WARN","level":3}

Check that there are actually audio files in there.

So I have let say Illona Andrews. There is 48 books in the folder for that author. In audiobookshelf is only showing 3. there are many more authors with many books missing that are in the folder that audiobookshelf scans.

1 minute ago, Jurak said:

So I have let say Illona Andrews. There is 48 books in the folder for that author. In audiobookshelf is only showing 3. there are many more authors with many books missing that are in the folder that audiobookshelf scans.

Most likely it's because of your folder structure/naming. Have you checked the docs? https://www.audiobookshelf.org/docs/#book-directory-structure

Or you have a filter on that's only showing those 3 books.

3 minutes ago, strike said:

Most likely it's because of your folder structure/naming. Have you checked the docs? https://www.audiobookshelf.org/docs/#book-directory-structure

No filters. and its /allbooks/author/booktitle/bookfiles. For each author. I have gone through each author folder (took a while) to make sure it was set up correctly.

Post your daily log instead of your scan log. Which version are you running?

35 minutes ago, Jurak said:

Im running 2.32.1 and daily scan in link below.
https://pastebin.jurak.business/?c35189c0159a07eb#EHmf8rFZQMxJhgGGZjCgWQVPzcMzeT9gV1Tf5hBG3hee

Im starting to wonder if its a metadata issue with my books. Im looking into that now as well.

I'm thinking it's a metadata issue too, but not with your files. You're using Google Books as your metadata provider, and your log is full of errors because it can't find your books. So your books are probably all in your library, but when you go to the author, you can only find 3 books because it fails to match the rest. Switch to the audible.com provider in the settings. and run a quick match on your library again.

I've tested with one of the books in your log with google and I couldn't find it either, but with Audible it was fine.

It also looks like you have a lot of files with conflicts. example: [Scan] \"Anthony Ryan/To Blackfyre Keep\": Library file with path \"/audiobooks/media/allbooks/Anthony Ryan/To Blackfyre Keep/To Blackfyre Keep.azw3\" not found, but found file with matching inode value \"27021597764458986\" at path \"/audiobooks/media/allbooks/Anthony Ryan/To Blackfyre Keep/To Blackfyre Keep (1).azw3

Lots of these. Have you recently copied duplicate files to your library and deleted the original? It finds the files with (1).azw3. And (1) is usually appended when there is a duplicate.

On 2/11/2026 at 5:50 AM, strike said:

It also looks like you have a lot of files with conflicts. example: [Scan] \"Anthony Ryan/To Blackfyre Keep\": Library file with path \"/audiobooks/media/allbooks/Anthony Ryan/To Blackfyre Keep/To Blackfyre Keep.azw3\" not found, but found file with matching inode value \"27021597764458986\" at path \"/audiobooks/media/allbooks/Anthony Ryan/To Blackfyre Keep/To Blackfyre Keep (1).azw3

Lots of these. Have you recently copied duplicate files to your library and deleted the original? It finds the files with (1).azw3. And (1) is usually appended when there is a duplicate.

It was a metadata issue. I redid the metadata on all books and everything is now showing up.

I cannot get the webui to pull up anymore. Was working fine for months and now I get the error below in my latest logs:

parameters: {}

}

promise: Promise {

<rejected> Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

}

[2026-02-15 10:51:57.632] FATAL: [Server] Unhandled rejection: Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

promise: Promise {

<rejected> Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

}

Running in production mode.

Options: CONFIG_PATH=/config, METADATA_PATH=/metadata, PORT=80, HOST=undefined, SOURCE=docker, ROUTER_BASE_PATH=/audiobookshelf

[2026-02-15 10:51:57.419] INFO: === Starting Server ===

[2026-02-15 10:51:57.421] INFO: [Server] Init v2.32.1

[2026-02-15 10:51:57.421] INFO: [Server] Node.js Version: v20.19.6

[2026-02-15 10:51:57.421] INFO: [Server] Platform: linux

[2026-02-15 10:51:57.421] INFO: [Server] Arch: x64

[2026-02-15 10:51:57.425] INFO: [Database] Initializing db at "/config/absdatabase.sqlite"

[2026-02-15 10:51:57.452] INFO: [Database] Loading extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2026-02-15 10:51:57.452] INFO: [Database] Successfully loaded extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2026-02-15 10:51:57.452] INFO: [Database] Db supports unaccent and unicode foldings

[2026-02-15 10:51:57.453] INFO: [Database] Db connection was successful

[2026-02-15 10:51:57.459] INFO: [MigrationManager] Database is already up to date.

[2026-02-15 10:51:57.584] INFO: [Database] Db initialized with models: user, session, apiKey, library, libraryFolder, book, podcast, podcastEpisode, libraryItem, mediaProgress, series, bookSeries, author, bookAuthor, collection, collectionBook, playlist, playlistMediaItem, device, playbackSession, feed, feedEpisode, setting, customMetadataProvider, mediaItemShare

[2026-02-15 10:51:57.628] INFO: [Database] running ANALYZE

1 hour ago, Johnny Utah said:

I cannot get the webui to pull up anymore. Was working fine for months and now I get the error below in my latest logs:

parameters: {}

}

promise: Promise {

<rejected> Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

}

[2026-02-15 10:51:57.632] FATAL: [Server] Unhandled rejection: Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

promise: Promise {

<rejected> Error

at Database.<anonymous> (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)

at /app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:50

at new Promise (<anonymous>)

at Query.run (/app/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)

at /app/node_modules/sequelize/lib/sequelize.js:315:28

at async Database.init (/app/server/Database.js:208:5)

at async Server.init (/app/server/Server.js:159:5)

at async Server.start (/app/server/Server.js:223:5) {

name: 'SequelizeDatabaseError',

parent: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

original: [Error: SQLITE_CANTOPEN: unable to open database file] {

errno: 14,

code: 'SQLITE_CANTOPEN',

sql: 'ANALYZE'

},

sql: 'ANALYZE',

parameters: {}

}

}

Running in production mode.

Options: CONFIG_PATH=/config, METADATA_PATH=/metadata, PORT=80, HOST=undefined, SOURCE=docker, ROUTER_BASE_PATH=/audiobookshelf

[2026-02-15 10:51:57.419] INFO: === Starting Server ===

[2026-02-15 10:51:57.421] INFO: [Server] Init v2.32.1

[2026-02-15 10:51:57.421] INFO: [Server] Node.js Version: v20.19.6

[2026-02-15 10:51:57.421] INFO: [Server] Platform: linux

[2026-02-15 10:51:57.421] INFO: [Server] Arch: x64

[2026-02-15 10:51:57.425] INFO: [Database] Initializing db at "/config/absdatabase.sqlite"

[2026-02-15 10:51:57.452] INFO: [Database] Loading extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2026-02-15 10:51:57.452] INFO: [Database] Successfully loaded extension /usr/local/lib/nusqlite3/libnusqlite3.so

[2026-02-15 10:51:57.452] INFO: [Database] Db supports unaccent and unicode foldings

[2026-02-15 10:51:57.453] INFO: [Database] Db connection was successful

[2026-02-15 10:51:57.459] INFO: [MigrationManager] Database is already up to date.

[2026-02-15 10:51:57.584] INFO: [Database] Db initialized with models: user, session, apiKey, library, libraryFolder, book, podcast, podcastEpisode, libraryItem, mediaProgress, series, bookSeries, author, bookAuthor, collection, collectionBook, playlist, playlistMediaItem, device, playbackSession, feed, feedEpisode, setting, customMetadataProvider, mediaItemShare

[2026-02-15 10:51:57.628] INFO: [Database] running ANALYZE

Seems to be a database issue. Can you restore from backup?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.