bragibooks icon indicating copy to clipboard operation
bragibooks copied to clipboard

An audiobook library cleanup and management tool built with Python and Django. Leveraging m4b-merge for audiobook standardization and editing. Ideal for enhancing audiobook library management.

Project logo

Bragibooks

Status GitHub Issues GitHub Pull Requests License Docker Docker Pulls Docker Image Size (latest by date) Docker Image Version (latest by date) CodeFactor Grade


An audiobook library cleanup & management app, written as a frontend for web use of m4b-merge.

📝 Table of Contents

  • About
  • Getting Started
  • Usage
  • Built Using
  • Contributing
  • Authors
  • Acknowledgments

🧐 About

Bragi - (god of poetry in Norse mythology): Bragibooks provides a minimal and straightforward webserver that you can run remotely or locally on your server. Since Bragibooks runs in a docker, you no longer need to install dependencies on whichever OS you are on. You can

Some basics of what Bragi does:

  • Merge multiple files
  • Convert mp3(s)
  • Cleanup existing data on an m4b file
  • More features on m4b-merge's help page

Screens

Folder/file selection ASIN input
file-selection asin-pre
Folder/file selection Post-proccess overview
asin-input post-process

🏁 Getting Started

You can either install this project directly or run it prepackaged in Docker.

Prerequisites

Docker

  • All prerequisites are included in the image.

Direct (Gunicorn)

  • You'll need to install m4b-tool and it's dependants from the project's readme
  • Run pip install -r requirements.txt from this project's directory.

Installing

Docker

To run Bragibooks as a container, you need to pass some paramaters in the run command:

Parameter Function
-v /path/to/input:/input Input folder
-v /path/to/output:/output Output folder
-v /appdata/bragibooks/config:/config Persistent config storage
-p 8000:8000/tcp Port for your browser to use
-e LOG_LEVEL=WARNING Choose any logging level
-e UID=99 User ID to run the container as (default 99)
-e GID=100 Group ID to run the container as (default 100)
-e CSRF_TRUSTED_ORIGINS=https://bragibooks.mydomain.com Domains to trust if bragibooks is hosted behind a reverse proxy.

Which all together should look like:

docker run --rm -d --name bragibooks -v /path/to/input:/input -v /path/to/output:/output -v /appdata/bragibooks/config:/config -p 8000:8000/tcp -e LOG_LEVEL=WARNING ghcr.io/djdembeck/bragibooks:main

Direct (Gunicorn)

  • Copy static assets to project folder:
    python manage.py collectstatic
    
  • Create the database:
    python manage.py migrate
    
  • Run the web server:
    gunicorn bragibooks_proj.wsgi \
    --bind 0.0.0.0:8000 \
    --timeout 1200 \
    --worker-tmp-dir /dev/shm \
    --workers=2 \
    --threads=4 \
    --worker-class=gthread \
    --reload \
    --enable-stdio-inheritance
    

🎈 Usage

The Bragibooks process is a linear, 3 step process:

  1. Select input - Use the file multi-select box to choose which books to process this session, and click next.
  2. Submit ASINs - Enter the 10-character ASIN for each book, found on Audible.com (US only) and submit.
  3. Wait for books to finish processing. This can take anywhere from 10 seconds to a few hours, depending on the number and type of files submitted.
  4. Finish page - Page where you can see the data assigned to each book after it has finished processing.

⛏️ Built Using

✍️ Authors

🎉 Acknowledgements