Skip to content

dubyte/dir2opds

Repository files navigation

dir2opds - serve books from a directory

dir2opds inspects the given folder and serves an OPDS 1.1 compliant server.

Overview

There are good options for serving books using OPDS. Calibre is a popular choice, but if you have a headless server, installing Calibre might not be the best option.

That's where calibre2opds comes in. However, if you have a large number of books and don't want to create a Calibre library, dir2opds can help you set up an OPDS server from a directory with one condition:

  • A folder should contain either only folders or only files.

Change log

Installation

go install github.com/dubyte/dir2opds@latest

Usage

Usage of dir2opds:
  -calibre
        Hide files stored by calibre.
  -debug
        If it is set it will log the requests.
  -dir string
        A directory with books. (default "./books")
  -hide-dot-files
        Hide files that starts with dot.
  -host string
        The server will listen in this host. (default "0.0.0.0")
  -no-cache
        adds reponse headers to avoid client from caching.
  -port string
        The server will listen in this port. (default "8080")

Tested on

Moon+ reader

Cantook

It works on Cantook reader for me on iPhone.

https://apps.apple.com/us/app/cantook-by-aldiko/id1476410111

It would be nice if this was stated in README.

KYBook 3

It works with KyBook 3 Ebook Reader if access to Local Network is enabled in settings.

To enable access go to Settings -> Apps -> KyBook 3 -> Local Network (checked).

It seems that KyBook is so old, that it does not trigger access prompt from iOS, so it has to be configured manually.

More information

Binary release

Raspberry pi deployment using binary release

cd && mkdir dir2opds && cd dir2opds

# get the binary
wget https://github.com/dubyte/dir2opds/releases/download/v1.1.0/dir2opds_1.1.0_linux_armv7.tar.gz

tar xvf dir2opds_1.1.0_linux_armv7.tar.gz

sudo touch /etc/systemd/system/dir2opds.service

# Paste the content below but rember to pass the fullpath of your books in -dir
sudo nano /etc/systemd/system/dir2opds.service

sudo systemctl enable dir2opds.service

sudo systemctl start dir2opds.service

/etc/systemd/system/dir2opds.service

[Unit]
Description=dir2opds
Documentation=https://github.com/dubyte/dir2opds
After=network-online.target

[Service]
User=pi
Restart=on-failure

ExecStart=/home/pi/dir2opds/dir2opds -dir <FULL PATH OF BOOKS FOLDER> -port 8080

[Install]
WantedBy=multi-user.target

Rootless Container with podman

# build image
podman build -t localhost/dir2opds .
# prepare Books directory
mkdir /data/Books
chown -R $USER:$USER /data/Books
# run built image
podman run --name dir2opds --rm --userns=keep-id --mount type=bind,src=/data/Books,dst=/books,Z --publish 8008:8080 -i -t localhost/dir2opds /dir2opds -debug

where

  • /data/Books is a path to directory containing books.

Test from host with

curl http://localhost:8008

How to contribute

Special thanks

  • @clach04: for testing and report missing content type for comics.
  • @masked-owl: for reporting security issue about http transversal.