Opens a larger view. Escape closes it.

home-server

README.md

The books stack

Three containers working as one pipeline. kobodl polls a Kobo account every five minutes and downloads anything purchased there; calibre-web-automated watches an ingest folder, converts and files whatever lands in it into a proper Calibre library, and serves it on port 8083; audiobookshelf serves audiobooks and podcasts on 13378 from its own library folder.

kobodl has no image of its own. The container is python:3.12-alpine, installs kobodl when it starts, serves the web UI on 5679 for the one-time login, and loops. After each sync it runs sort.sh, the wrapper: prose ebooks are copied into the ingest folder for Calibre-Web-Automated — which consumes and deletes them, so a separate sent-list is what stops a title being ingested again every cycle — audio files are moved into the audiobooks tree by author and title, an ebook of the same title is dropped next to its audiobook as a companion, and when anything moved it asks AudioBookshelf to rescan and to match the new items against Audible for metadata.

  • docker-compose.yml — the stack as Portainer runs it
  • kobodl/sort.sh — the wrapper kobodl runs after every sync