bragibooks
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.
Bragibooks
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 |
---|---|
![]() |
![]() |
Folder/file selection | Post-proccess overview |
---|---|
![]() |
![]() |
🏁 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:
- Select input - Use the file multi-select box to choose which books to process this session, and click next.
- Submit ASINs - Enter the 10-character ASIN for each book, found on Audible.com (US only) and submit.
- 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.
- Finish page - Page where you can see the data assigned to each book after it has finished processing.
⛏️ Built Using
- Django - Server/web framework
- Bulma - Frontend CSS framework
- audnexus - API backend for metadata
- m4b-merge - File merging and tagging
✍️ Authors
- @djdembeck - Idea & Initial work