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] Nodiaque - Shelfmark

Featured Replies

Summary: Support Thread for Nodiaque Shelfmark

Application: Shelfmark

Github: https://github.com/calibrain/shelfmark

 

This template use the official image from calibrain (ghcr.io/calibrain/shelfmark:latest)

I only provide a template for the docker image, I do not maintain the image. For any issue with the software itself, please go to the official github.

 

If you come from CWA, a lot have changed. I suggest you start fresh with the new configuration. Going forward, the project prefer using a json with all the settings that can be edited through the webgui. It is possible to use env variable to lock the settings but it isn't supported. Thus, use at your own risk and I won't support any added env variable that isn't in the template.

Shelfmark support 2 mode, direct or universal mode to download. Per default, the template is configured to use direct which is using AA ways like CWA. The universal mode allow to integrate with prowlarr and might require change to the template. I haven't tested how to integrate yet, follow the instruction on the project page.

If you want to use env variable to lock some settings, you must add them. The reference to them are here: https://github.com/calibrain/shelfmark/blob/main/docs/environment-variables.md

Edited by Nodiaque

This will be super helpful now that Ephemera disappeared. Thank you!

Edited by ignitionnight

I was having permission issues when I set download container path to /mnt/user/data to match my sabnzbd and qbittorrent. I edited the container path to be /data and that fixed it.

  • Author
3 minutes ago, JewelCrabCrab said:

I was having permission issues when I set download container path to /mnt/user/data to match my sabnzbd and qbittorrent. I edited the container path to be /data and that fixed it.

I'm unsure what you mean, my template doesn't have any path matching /mnt/user/data

image.png

If it's the client download path, it should normally match how it is in your other docker and need to be edited. I think this is used only if using the universal mode and that require more configuration not covered in that template. I'm using direct currently as is, I've yet to try integrating with prowlarr and such.

9 minutes ago, Nodiaque said:

If it's the client download path, it should normally match how it is in your other docker and need to be edited. I think this is used only if using the universal mode and that require more configuration not covered in that template. I'm using direct currently as is, I've yet to try integrating with prowlarr and such.

I have it set up for universal. On the client path on your template, I assumed that was where I put the storage path for my downloaders, like this:

templateclientpath.png

but once I have prowlarr and my downloaders set up in Shelfmark, I get this error:

Error.png

editing the template to this fixes it:

workingmapping.png

This matches how I have it in my downloader templates:

qbit.png

This is similar to how I had it set up in your template for CWABD that updated to the shelfmark image. On universal mode it would download but not copy to ingest. I had to add a new container path of /data and map /mnt/user/data to it to match my downloaders. I shut down that container (and the bypass) and installed this. With both versions, I didn't need to do any other mapping in the template to make the universal search work. That was all done with API keys, IPs, or sign ins (qbit)

I don't know if this is the right way to set it up but it works for me.

Edited by JewelCrabCrab

  • Author

Yes you are suppose to change the mapping. That's why I said in the template that you must follow the guide on the github to setup universal. I think I'll remove the mapping in the template to make it less confusing. I followed the github template and that's why I put it with the information to change it. That's why the mount name is /client/path (like in the doc), it's to say to put your client path there. It must match exactly what you have in prowlarr and such. You did put the information at the right place, the edit you did in the second step is what you needed to also do.

Edited by Nodiaque

  • Author
8 minutes ago, Raven6 said:

Hello,
I am using shelfmark on unraid with prowlarr. I connect successfully to prowlarr and sabnzbd. When i search for and download a book, sabnzbd is updated with the request, but the file will not download.

image

Any idea on how to fix?

shelfmark-debug_BUILD-2026-01-13-475ae420e52a8b87d80c0011514566fad12d0211_RELEASE-v1.0.1_20260115-100650.zip

Hello, I'm unable to see the picture but I would suggest reaching the official support from project. My instance is using direct mode and not universal which download from AA, thus I don't know about the prowlarr or sabnzbd link unfortunatly.

I'm having same/similar issue with mapping errors. I've switched the paths but am having the same issue between both. I can search and start the download but after the download is finished it gives me the error that the downloaded path isn't accessable by the app.

My setup is using nzbget, which has a dedicated 'share' /mnt/user/downloads/* which all my apps will reach into after the download is complete to pull the files and move them to their own shares. For books it would be /mnt/user/Books.

I have tried (i think) all iterations of swapping these paths between book download path and downloader client path, including the absolute path for /mnt/user/downloads/complete which is where the files should be moved to in the final process on nzbget's side. This was tested last as other apps just needed the parent.

If anyone can point in the right direction here would super appreciate.

  • Author

Copy the mapping from your nzb into that one (for the book) exactly like it is in that one. I do not know how nzb work so I can't really chip in more then that, but it should be the same.

Thanks for reply. Attached images of the edit in unraid. Thats just the current folder setup for shelfmark, as mentioned I have tried /mnt/user/Downloads, /mnt/user/downloads/complete, /mnt/user/books.

What are the actual definitions of the paths? They aren't clear to me, or I thought they were but obviously not. I thought "download book download path" would be the dir files are downloaded into. But also downloader client path sounds similar? Assumption would be that "direct download" (assuming this means AA downloads?) would use "download book download path" and if usenet used, (i.e. NZBget in my instance) would be the "downloader client path" which is the path the usenet client stores the files after downloading. Even if that is the case all downloads in the SS should all land in the same place, which the app should have access to. The next question is how does the app then move the files into the correct share?
Sorry if not clear and thank you again in advance of any help.

Screenshot 2026-01-20 131339.png

Screenshot 2026-01-20 131432.png

  • Author

You can refer to the official doc if you need more info, it might help understanding how everything work.

The downloader path is where the file will be download when you select download. In a full automated way, it would be where calibre Web automated is set to import the file. If using other method, I cannot say. Like if it's manual, it would be where you want it to download so you can fetch them on your array/share.

The second path, client path, is only needed if using universal mode (default is direct mode and doesn't use that). It's when you do integration with qbittorrent, prowlarr, nzb and such. It must be the exact same path that you mount in these as the download path.

Edit: the app doesn't move anything. The app download in the download mount, the first one. It's the other app you connect to it that does automation. I myself.l use calibre web automated that then import the file from that mount and then do whatever it need to do with it. If using prowlarr, nzb and such, the shelfmark docker will wait for the download complete notice. Since you mapped the exact same map as you download client (let say qbittorrent download in the docker as /download and that on unraid template its mounted to /mnt/user/download, you map the exact same thing in shelfmark), shelfmark will receive a download finish notification from those other software saying download finish at path /download/filedownloaded. Thus shelfmark will take the file from this and put it in its own download folder (the first mapping).

You could say the first mapping is the ready to import folder, which is normally the import folder of CWA (as the origin of this project was to automates download and import into CWA)

Edited by Nodiaque

Again super appreciate the help. Everything you said makes sense, I'm only just getting to the stage of setting up my book stack. Makes sense that the other apps (calibre, audiobookshelf) will look after moving those files maybe, getting to that stage.

What is the expected behavior after download in that case? If the app isn't working to move the files or anything what is it looking for with the downloaded files?

Also I had a late thought to check that the container had the share "mounted" correctly and could see the files inside. All showing as expected if I cd /books/ then ls it shows the files in the /downloads folder as setup in unraid setup.

  • Author

The container itself just download the file at the location specified in the first path, nothing else. If it's not using the direct mode, it will get it from the client path (there could be multiple path I guess depending on multiple client but I never tried that mode) and move it to its download path.

This container does nothing else.

From there, it's all depending on what you want. Do you just want book to be downloaded in a folder where you can take them to put on your ebook reader? That's what this docker does.

If you already have calibre on your computer, you can manually import it from that point.

If you want a calibre on the server, you'll have to spin a new container (unraid have many calibre container), set it up and then manually import it like you would do with calibre on your computer.

The if you want a better webgui for calibre and a way to automate the import into it, that's when you setup calibre web automated that will both give you a new webgui (way better Imo) and also import whatever you put into its import folder automatically (which you would mount as the download path in shelfmark if you want it to be imported into calibre).

So in the end, it's all a question of what you want. This container is a simple downloader tool like a qbittorrent. The difference is there a search engine built in that allow using multiple source, so it's like a Google with a downloader built-in. What you do with it is only limited by your need ;)

Edited by Nodiaque

  • 1 month later...

Booklore import question.

I'm setting up shelfmark and don't see any umask options, when it initializes it shows RW permissions and if i direct download to a folder it creates the file with rw/r/r which works fine but if i set the download to booklore it creates with rw/-/- which is causing smb issues of course. I've worked around the issue by setting it to direct download and then changing my booklore bookdrop ingest to the same folder.

Is there a way to set/force 666 for file creation in Shelfmark?

  • Author

I haven't tried the booklore integration yet. I did setup booklore not long ago but it's using a different library since it wasn't properly integrated yet. The problem is booklore not running as intended unraid puid and guid of 99:100. Using CWA work properly and the file get moved no problem.

What you could do is simply create a custom script in shelfmark that change the mod after the download. You have that option under advanced

image.png

But there's something bugging me. How do you integrate with booklore? By my understanding, you just set a path to download the files and then whatever library tools you use, you set that folder as import folder. Using either CWA or Booklore shouldn't change the file mod when it get downloaded. If you are talking the file after it got ingested by Booklore, then you need to look at booklore. You might also want to look at the folder where you set the download for booklore, if the parent has 600 file permission, maybe that's why you get 600 file permission on booklore. Is your booklore trying to access from smb? Cause SMB isn't supported by booklore

BookLore's file operations (metadata writing, file renaming, file organization) are built for local file systems only. Network-attached storage (NAS, NFS, SMB/CIFS mounts, cloud-backed FUSE, etc.) is unsupported and untested.

edit: I see in download mode, there's Booklore API now. Mine is set to Folder since I use CWA. I honestly don't know how it work with the API but I guess when using the API, it's Booklore that create the file. So I'm not sure who is creating that file with 600 permission. You might want to head to both project github and ask question

Edited by Nodiaque

in the downloading tab of shelfmark there is a booklore option in the dropdown and a location to specific library or to bookdrop, selecting bookdrop automatically puts the file wherever the booklore bookdrop folder is configured. monitoring the download (watching unraid browse of directory) the file is created with 600, however, if i select folder for the download to the same path it's created with 644. Booklore and shelfmark are both set to 99:100 and in the same custom docker network using admin login/pass for booklore in the shelfmark download config.

I can use the script solution as well, it just feels very odd. Now that i think about it, laying out the order and steps taken this may be a booklore setting, since the file is created 644 when direct downloading to a folder from shelfmark

  • Author

Technically in unraid, all your docker should run off the same user which would remove that problem.

From what I read, the problem is not shelf ark but booklore that set the file as 600.

That's what i was saying. Using booklore api, it's booklore that's creating the file.

  • 2 weeks later...
  • Author

I'm unsure if people here use booklore, but you should uninstall it.

  • 1 month later...

Hi there, thinking this app is going to be great, i`m almost there with it. setup qbittorrent as the indexer but get this error when downloading audiobooks. image.png

not sure what I have done wrong as the indexer connects when testing:

Test ConnectionVerify your qBittorrent

Connected to qBittorrent (API v2.11.4)

Can you someone point me in the right direction please. Many thanks :-)

  • Author

Hello, I suggest going to the shelfmark project to get help on using this. There is something in the configuration not working.

  • 2 weeks later...

Thanks for sharing this container with us.

It has worked fine for me for months, but lately I am getting Errno:13 when trying to download new books. Running DockerSafeNewPerms fixes my issue for a while, but it reverts back to the error in short time. I checked the perms of my CWA import folder (where Shelfmark downloads to) and there are no write permissions when I get the error (drwxr-xr-x). Has anyone else encountered this? Should I be using something other than CWA for my library management? To me, it seems that CWA is changing folder permissions every time it runs an import, and that leaves Shelfmark unable to write to the directory, but I don't know where to go from here.

  • Author

You should run both with the same user. I have cwa with shelfmark no problem, everything is running smooth

Edited by Nodiaque

1 hour ago, Nodiaque said:

You should run both with the same user. I have vwa with shelfmark no problem, everything is running smooth

I haven't changed any defaults, and when I run docker exec -u nobody -it shelfmark whoami and again for CWA container, I get nobody returned for both.

I'm relatively unfamiliar with linux users and permissions, but I seemed to break CWA when forcing it to 99:100. I set extra parameters as --user 99:100 and created variables PGID and PUID to set to 100 and 99 respectively.

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.