Press play onyour own server

Bookmark is a self-hosted home for your audiobooks, with room on the same shelf for ebooks and comics. It fills in covers, metadata, and ratings on its own, the player is built around how people actually listen, and your progress follows you everywhere.

docker compose up -d · MIT licensed · your files stay yours

Metadata

A library that fills itself in

Point Bookmark at the folders you already have. Covers and chapters come out of your files; the rest syncs from Goodreads, Hardcover, Audnexus, and Comic Vine. Your originals are mounted read-only and never rewritten.

  • Kept in sync, not fetched once. A background sync fills in descriptions, narrators, genres, and series order as your library grows.
  • Ratings from Goodreads and Hardcover. Community ratings sync along with the rest of the metadata. Sort the library by them, or browse the top list.
  • Fix anything by hand. Every field is editable, and a match dialog pulls better candidates when the automatic guess is wrong.
The Last LighthouseJune Okafor
The Last Lighthouse
June Okafor
Paper PlanetsH. Lindqvist
Paper Planets
H. Lindqvist
A Theory of RainImre Tóth
A Theory of Rain
Imre Tóth
The Midnight CartographerR. Ellery
The Midnight Cartographer
R. Ellery
Small Gods of the CityPriya Anand
Small Gods of the City
Priya Anand
Winter HarbourE. Sandell
Winter Harbour
E. Sandell
The Orchard at NightC. Weaver
The Orchard at Night
C. Weaver
Neon HarborVega & Ruiz12
Neon Harbor
Issue 12

The player

Built around how people actually listen

  • Playback speed. Anywhere from 0.5× to 2× on the web. The apps adjust in 0.05× steps.
  • Sleep timer. Set it in minutes, or have it stop at the end of the chapter.
  • Skip controls. Jump back 15 seconds or ahead 30 with one tap. The apps let you set your own intervals.

Progress sync

Pick up exactly where you left off

Your position saves to your server every few seconds while you listen. Pause on your phone in the checkout line, press play at your desk, and the same sentence is waiting. Live updates arrive over WebSocket; no refresh required.

iPhone & Android

Native apps, made for the way out the door

Not a wrapped website: real native apps that keep the whole library in your pocket, currently in beta.

  • Offline first. Download books to the phone, listen in airplane mode, and progress reconciles the moment you are back.
  • Paired in seconds. Open the Audiobook App page on the web, scan the QR code, done. No passwords retyped on a phone keyboard.
  • Made for iPad too. A sidebar layout that actually uses the screen.

One shelf, three formats

Audiobooks first. Not audiobooks only.

Letters to a CometY. NakamuraOPDS feed

Ebooks

EPUBs are scanned, enriched, and readable right in the browser. They are also served over OPDS, so you can keep using the reading app you already love.

EPUB
Neon HarborVega & Ruiz12Static AgeT. Brand3Moth & FlameK. Ilves7

Comics

Series and issues organized the way collectors expect: TPBs, omnibuses, one-shots. Browse, organize, and download your archives, or read them in your favorite comic app over OPDS.

CBZCBRPDFOPDS

AI narration

No audiobook edition? Bookmark can narrate an ebook into a real M4B, chapters included, using any OpenAI-compatible text-to-speech server. A ready-to-run engine ships in the compose file.

EPUB inM4B out

Your household, your rules

Make it yours, and theirs

  • Every listener gets their own shelf. Separate progress, lists, stats, and preferences per account; nobody loses your spot.
  • Permissions and tag filters. Decide who can edit metadata or upload, and keep certain shelves out of certain accounts.
  • Slots into your stack. Optional OpenID Connect SSO, per-user API keys, and a REST API documented with Swagger.
  • Sixteen accents, thirteen surfaces. From pure-black Pitch to light Silver, in English and Swedish.

Self-hosting

From zero to listening tonight

One image for the app, one for Postgres. Copy the config template, point it at your media folders, and start both with a single command. The first account you create becomes the admin.

~ on your-server
$ git clone https://github.com/RobinEdquist/bookmark.git
$ cd bookmark
$ cp example.env .env
# point .env at your media folders, then:
$ docker compose up -d
➜ Bookmark is listening at http://localhost:3001