# Audiobook Player A web player for an [OpenAudible](https://openaudible.org) library, with user accounts, per-user listening progress synced across devices, and an iPhone-friendly layout. Python 3 standard library only. ## Setup ```bash python3 server.py setup # OpenAudible login the server uses (shared by all accounts) python3 server.py adduser NAME # create a player account python3 server.py serve # --upstream http://HOST:8000 --port 8080 ``` Then open `http://:8080` and sign in. The first account (and the `PLAYER_USER` default in Docker) is an admin. Admins manage users at `/admin`. Other commands: `users`, `passwd NAME`, `deluser NAME`. Only MP3/M4B files can be played in a browser; convert Audible `.aax`/`.aaxc` books in OpenAudible first. ## Notes - Credentials and user data live in `config.json`, `users.json`, `sessions.json`, `progress_users.json` (git-ignored). - Only read-only OpenAudible endpoints are proxied; admin commands and import are blocked. - Traffic is plain HTTP. Use a VPN (e.g. Tailscale) or a TLS reverse proxy for access outside your home network. ## Docker ```bash # .env next to docker-compose.yml OPENAUDIBLE_USER=... OPENAUDIBLE_PASSWORD=... PLAYER_USER=nate # default account, created on first start PLAYER_PASSWORD=... ``` `docker compose up -d`, then sign in at port 8080. The default account is only created if it doesn't exist, so changing its password later with `docker exec -it audiobook-player python server.py passwd nate` sticks. Add more people with `adduser`.