Getting Started
Goal
Get your library syncing in about 10 minutes.
Prerequisites
Before you begin, you should have:
- Docker and Docker Compose
- A working Audiobookshelf server if you want audiobook matching or ABS sync
- An ebook folder on the Docker host
- Optional: KOSync, Grimmory, Storyteller, or Hardcover if you want those integrations
Step 1: Gather your ABS details
Audiobookshelf API token
- Log into Audiobookshelf.
- Go to Settings -> Users -> Your user.
- Click Generate API Token.
- Copy the token.
ABS library ID
If you want searches scoped to one ABS library:
- Open the audiobook library in Audiobookshelf.
- Look at the URL.
- Copy the part after
/library/.
Optional service credentials
If you plan to use them, also keep these handy:
- KOSync URL, username, and password
- Grimmory URL, username, and password
- Storyteller URL, username, and password
Step 2: Prepare a working directory
mkdir ~/abs-kosync
cd ~/abs-kosync
mkdir data
Step 3: Create docker-compose.yml
services:
abs-kosync:
container_name: abs_kosync
image: ghcr.io/cporcellijr/abs-kosync-bridge:latest
restart: unless-stopped
ports:
- "8080:5757"
# - "5758:5758" # Optional: expose the sync-only port when using KOSYNC_PORT=5758
environment:
- TZ=America/New_York
- LOG_LEVEL=INFO
# - KOSYNC_PORT=5758 # Optional: enable split-port mode
# Configure ABS, KOSync, Grimmory, Storyteller, and other services in the Web UI.
volumes:
- ./data:/data
- /path/to/ebooks:/books
# - /path/to/storyteller/library:/storyteller_library # Optional: local Storyteller fallback/download access
# - /path/to/storyteller/assets:/storyteller/assets # Optional: Storyteller transcript ingest
Split-port mode
By default, port 8080 exposes the full web UI and API.
If you want to expose only the KOSync endpoint to the internet:
- Uncomment
KOSYNC_PORT=5758. - Uncomment the
5758:5758port mapping. - Keep
8080private to your LAN or reverse proxy.
Optional Integrations
It is usually easiest to start with the minimal compose file above and finish configuration in the Web UI.
If you enable Grimmory, the bridge can use it for both ebook matching and Grimmory audiobook sources.
Forge uploads directly to Storyteller over the API, so a Storyteller library mount is not required for normal Forge imports.
If you mount Storyteller assets at /storyteller/assets, set Storyteller Assets Path in Settings to /storyteller.
The assets path can be configured entirely in the UI; STORYTELLER_ASSETS_DIR is optional.
Step 4: Start the service
docker compose up -d
Check the logs:
docker compose logs -f
Step 5: Finish configuration in the Web UI
- Open
http://localhost:8080/settings. - Enter your Audiobookshelf Server URL, API Token, and Library ID.
- Add any optional services you want to use:
- KOSync
- Grimmory
- Storyteller
- Hardcover
- Use the Test button on any service section if you want to check a service before saving.
- If you mounted Storyteller assets, set Storyteller Assets Path to
/storyteller. - If you are setting up an ebook-only or maintenance-focused install, you can enter
disabledin the ABS URL or token field instead of connecting Audiobookshelf. - Click Save Settings and wait for the app to come back.
Step 6: Create your first mapping
You can start in either of these ways:
Suggestions
- Open Suggestions.
- Click Scan Library.
- Review the likely pairs.
- Add the good ones to the queue.
- Click Process All.
Add Book
- Open Add Book.
- Pick an ABS audiobook, a Grimmory audiobook, or leave audio on None / Skip for an ebook-only link.
- Optionally pick a Storyteller title.
- Pick the standard ebook.
- Click Create Mapping.
That is enough to get syncing started. The normal background cycle runs every 5 minutes by default, and instant sync can react faster when supported by the source.
Optional: KOReader Plugin
If you want KOReader to download and manage bridge-provided books for you, you can also install the optional Bridge Sync KOReader plugin from the project's GitHub Releases page.
If you install it, you can later use the Grimmory settings to turn selected Grimmory shelves into KOReader collections for synced books.
This is optional. The bridge works without it.