January 13Jan 13 Summary: Support Thread for Nodiaque ShelfmarkApplication: ShelfmarkGithub: 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 January 16Jan 16 by Nodiaque
January 14Jan 14 This will be super helpful now that Ephemera disappeared. Thank you! Edited January 14Jan 14 by ignitionnight
January 14Jan 14 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.
January 14Jan 14 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/dataIf 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.
January 14Jan 14 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:but once I have prowlarr and my downloaders set up in Shelfmark, I get this error:editing the template to this fixes it:This matches how I have it in my downloader templates: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 January 14Jan 14 by JewelCrabCrab
January 14Jan 14 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 January 14Jan 14 by Nodiaque
January 15Jan 15 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.Any idea on how to fix? shelfmark-debug_BUILD-2026-01-13-475ae420e52a8b87d80c0011514566fad12d0211_RELEASE-v1.0.1_20260115-100650.zip
January 15Jan 15 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.Any idea on how to fix?shelfmark-debug_BUILD-2026-01-13-475ae420e52a8b87d80c0011514566fad12d0211_RELEASE-v1.0.1_20260115-100650.zipHello, 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.
January 20Jan 20 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.
January 20Jan 20 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.
January 20Jan 20 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.
January 20Jan 20 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 January 20Jan 20 by Nodiaque
January 20Jan 20 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.
January 20Jan 20 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 January 20Jan 20 by Nodiaque
March 8Mar 8 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?
March 8Mar 8 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 advancedBut 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 bookloreBookLore'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 March 8Mar 8 by Nodiaque
March 8Mar 8 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
March 8Mar 8 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.
May 19May 19 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. 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 :-)
May 19May 19 Author Hello, I suggest going to the shelfmark project to get help on using this. There is something in the configuration not working.
June 2Jun 2 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.
June 2Jun 2 Author You should run both with the same user. I have cwa with shelfmark no problem, everything is running smooth Edited June 2Jun 2 by Nodiaque
June 2Jun 2 1 hour ago, Nodiaque said:You should run both with the same user. I have vwa with shelfmark no problem, everything is running smoothI 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.