Fork von vito0912/abs-agg: Metadaten-Provider fuer Audiobookshelf, erweitert um deutsche Hoerspiel-Quellen (DRA, hoerspiele.de, hoerspiel-request.de, hoerspielprojekt.de, ladybedfort.de)
  • TypeScript 99.8%
  • Dockerfile 0.2%
Find a file
Atlan 6ec4b11cea
Some checks failed
Publish Image / build-and-push-image (push) Failing after 3s
fix(dra, aggregate): Autor zuerst in die DRA-Suche; Einwort-Titel muessen dem Treffertitel gleichen
Atlans "Das Attentat" (Isaac Asimov, SDR 1967, DRA 1451116) wurde nicht gefunden: die
DRA hat mehrere "Das Attentat", der Provider nahm die ersten fuenf Treffer der
Titelsuche und Asimovs war nicht darunter. Das Suchfeld "ueberall" ist Volltext ueber
alle Felder, "Isaac Asimov Das Attentat" ist genau ein Treffer -- der Autor geht jetzt
als erster Suchbegriff mit.

Aggregator: bei nur einem bedeutsamen Wort reichte Enthaltensein, und "Attentat am
Gaemsengrat" (TKKG) sowie "Ueber das Attentat meines Vaters" (ARD Audiothek) kamen als
Treffer durch. Jetzt muss der Treffertitel ohne Stoppwoerter der Anfrage gleichen.

Gemessen lokal: hoerspiel "Das Attentat"/Isaac Asimov -> 1 Treffer (DRA, 52,9 min,
18 Sprecher); "Blutbad"/Dark Holmes und "Momo"/Michael Ende weiter richtig.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-27 01:41:40 +02:00
.github/workflows Add tag trigger for build workflow 2025-12-05 12:24:26 +01:00
src fix(dra, aggregate): Autor zuerst in die DRA-Suche; Einwort-Titel muessen dem Treffertitel gleichen 2026-09-27 01:41:40 +02:00
.dockerignore Docker, Workflow, Lint 2025-11-27 19:03:56 +01:00
.env.example Deezer 2026-07-11 21:17:45 +02:00
.gitignore GA 2025-11-27 20:26:01 +01:00
.prettierrc Init Example and Bookbeat 2025-10-03 19:40:00 +02:00
CONTRIBUTING.md Add The Story Graph 2026-07-30 20:38:01 +02:00
docker-compose.yml format and libro.fm api 2026-07-06 20:48:14 +02:00
Dockerfile Fixses #3 2025-11-28 06:55:25 +01:00
LICENSE make license more strict to require proper attribution 2026-07-11 21:28:34 +02:00
package-lock.json Add The Story Graph 2026-07-30 20:38:01 +02:00
package.json version 2026-07-31 09:37:34 +02:00
PRIVACYPOLICY.md Add PrivPolicy 2026-07-31 09:37:10 +02:00
Providers.md feat(providers): HolyShop (shop.holysoft.de) als Quelle; Libro.fm (lang:ger) in beide Sammelabfragen 2026-09-26 22:39:21 +02:00
README.md feat(providers): HolyShop (shop.holysoft.de) als Quelle; Libro.fm (lang:ger) in beide Sammelabfragen 2026-09-26 22:39:21 +02:00
tsconfig.json format and libro.fm api 2026-07-06 20:48:14 +02:00

abs-agg

A metadata provider server for Audiobookshelf. Aggregates audiobook metadata from multiple sources through a unified API.

This currently does not mean it connects them between providers. This might be added in the future.

abs-agg named after "aggregate" and the German "AGG", because each provider should be usable as the others.

Supported metadata providers

  • ARD Audiothek
  • Audioteka
  • Big Finish
  • BookBeat
  • Goodreads
  • Graphic Audio
  • Hardcover
  • LibriVox
  • Libro
  • Storytel
  • The StoryGraph
  • Die drei ???
  • Soundbooth

Added in this fork (German audio dramas / Hörspiele, all scraped on demand):

  • ARD Hörspieldatenbank (dra) – radio drama productions of the German public broadcasters
  • hoerspiele.de (hoerspielede) – commercial releases (Europa, Kiddinx, Maritim, ...)
  • Hörspiel-Request (hoerspielrequest) – episode guides of classic series
  • Hoerspielprojekt.de (hoerspielprojekt) – free community productions
  • Lady Bedfort (ladybedfort) – the official site of the series
  • Maritim Hörspiele (maritim) – the label catalog, series level only (cover + blurb)
  • HolyShop (holysoft) – Holysoft's shop: episodes with runtime, blurb, cast with roles, 1000 px covers
  • Audible (audible) – the catalog API Audiobookshelf itself uses, per region

Aggregate providers for Audiobookshelf's Quick Match (one provider per library):

  • hoerspiel – asks all German audio drama sources above plus Audible.de, Die drei ??? and ARD Audiothek in parallel, merges equal hits and returns one ranked list
  • hoerbuch – Audible.de, Storytel (de), BookBeat (germany), Audioteka (de)

Both are strict by default (/strict:false to see everything): a result must match the title words and, if given, the author, because Quick Match takes the first hit without asking. Audiobookshelf gives a custom provider 10 s, so every source is cut off after 8 s.

For detailed documentation on each provider, see Providers.md. The "Add to Audiobookshelf" URLs in Providers.md point to the upstream public instance; for this fork use your own host, e.g. http://<host>:3001/dra.

This unifies many existing audiobook metadata providers into a single server:

Other provider attribution

Quick Start

docker run -d \
  -p 3000:3000 \
  -v ./data:/app/data \
  ghcr.io/vito0912/abs-agg:latest

Or with docker-compose:

See docker-compose.yml.

API Usage

List available providers

GET /providers

Search for audiobooks

GET /:provider/search?title=<title>&author=<author>

Required parameters:

  • title - Book title to search for

Optional parameters:

  • author - Author name
  • cache - Set to false to bypass cache

Example:

curl "http://localhost:3000/librivox/search?title=sherlock+holmes&author=doyle"

Important

Parameters (especially optional ones, as they are not in the examples of the providers) must be in the following format: <host>/provider/<parameter1>/../<parameter2>/search?title=<title>&author=<author>

Example: http://localhost:3000/librivox/limit:10/search?title=sherlock+holmes&author=doyle

For ABS! do not add /search at the end. Just use:
`http://localhost:3000/librivox/limit:10

Configuration

Environment variables:

Variable Required Description
PORT No Server port (default: 3000)
HARDCOVER_TOKEN No API token for Hardcover provider
GOODREADS_KEY No API key for Goodreads provider
DEEZER_ACCESS_TOKEN No Token for higher rate limits

Contributing

See CONTRIBUTING.md