No description
  • HTML 53.1%
  • Python 41.8%
  • Shell 2.8%
  • JavaScript 1.2%
  • Dockerfile 1.1%
Find a file
2026-05-23 11:52:02 +02:00
static Upload files to "static" 2026-05-23 11:52:02 +02:00
docker-compose.yml Upload files to "/" 2026-05-23 11:51:24 +02:00
Dockerfile Upload files to "/" 2026-05-23 11:51:24 +02:00
entrypoint.sh Upload files to "/" 2026-05-23 11:51:24 +02:00
LICENSE Upload files to "/" 2026-05-23 11:51:24 +02:00
README.md Upload files to "/" 2026-05-23 11:51:24 +02:00
server.py Upload files to "/" 2026-05-23 11:51:37 +02:00

Audiobook Uploader

A mobile-first PWA for uploading audiobook zip files from your phone. It auto-extracts them, strips junk, and organizes everything into a clean Author/Book/ folder structure. Single Flask app served by gunicorn, with a minimal light/dark web UI.

Features

  • Mobile-first PWA — add to the iOS home screen, runs fullscreen
  • Light / dark theme — toggle in the header, remembered across sessions
  • Step-by-step wizard — pick zip, choose author, name book, done
  • Auto-extraction — strips the zip, removes junk (.DS_Store, __MACOSX), flattens nested folders
  • Author management — lists existing authors, create new ones inline
  • Library browser — all authors and books with file counts and sizes
  • Delete — remove audiobooks with a confirmation sheet
  • Zip preview — peeks inside the archive before upload
  • Self-contained icons — PWA icons are rendered live by the server

Deploy

Edit the host library path in docker-compose.yml, then:

docker compose up -d

Open http://<server-ip>:5001.

docker-compose.yml

The host audiobook folder is bind-mounted into the container:

volumes:
  - /mnt/decimus/audiobooks:/audiobooks   # host path : container path
environment:
  - PUID=1000        # match your host user so written files are owned correctly
  - PGID=1000
  - TZ=Europe/Berlin

Environment variables

Variable Default Description
AUDIOBOOKS_PATH /audiobooks Library path inside the container
UPLOAD_TEMP_PATH /tmp/audiobook-uploads Temp dir for processing
MAX_UPLOAD_SIZE_MB 4096 Max upload size in MB
PUID / PGID 1000 Owner UID/GID for written files
TZ UTC Timezone

Common commands

docker compose logs -f          # follow logs
docker compose up -d --build    # rebuild + restart after changes
docker compose down             # stop and remove the container

docker compose down only removes the container — your audiobooks on the host bind-mount are never touched.

Tech

  • Python 3 / Flask + flask-cors, served by gunicorn
  • Vanilla HTML/CSS/JS frontend, no build step, minimal flat UI with dark mode
  • PWA: manifest, service worker, server-rendered icons

License

MIT — see LICENSE.