Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/djdembeck/bragibooks
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.
https://github.com/djdembeck/bragibooks
audible audiobook-cleanup audiobooks audnexus django docker library-management m4b metadata-management metadata-parser python
Last synced: 9 days ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/djdembeck/bragibooks
- Owner: djdembeck
- License: gpl-3.0
- Created: 2021-04-26T22:15:28.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-09-17T16:17:03.000Z (about 2 months ago)
- Last Synced: 2024-09-17T20:31:23.445Z (about 2 months ago)
- Topics: audible, audiobook-cleanup, audiobooks, audnexus, django, docker, library-management, m4b, metadata-management, metadata-parser, python
- Language: Python
- Homepage:
- Size: 1.48 MB
- Stars: 145
- Watchers: 4
- Forks: 20
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
Bragibooks
[![Status](https://img.shields.io/badge/status-active-success.svg)]()
[![GitHub Issues](https://img.shields.io/github/issues/djdembeck/bragibooks.svg)](https://github.com/djdembeck/bragibooks/issues)
[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/djdembeck/bragibooks.svg)](https://github.com/djdembeck/bragibooks/pulls)
[![License](https://img.shields.io/github/license/djdembeck/bragibooks)](https://github.com/djdembeck/bragibooks/blob/develop/LICENSE)
[![Docker](https://github.com/djdembeck/bragibooks/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/djdembeck/bragibooks/actions/workflows/docker-publish.yml)
[![Docker Pulls](https://img.shields.io/docker/pulls/djdembeck/bragibooks)](https://hub.docker.com/r/djdembeck/bragibooks)
[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/djdembeck/bragibooks)](https://hub.docker.com/r/djdembeck/bragibooks)
[![Docker Image Version (latest by date)](https://img.shields.io/docker/v/djdembeck/bragibooks)](https://hub.docker.com/r/djdembeck/bragibooks)
[![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/djdembeck/bragibooks)](https://www.codefactor.io/repository/github/djdembeck/bragibooks)[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
---
An audiobook library cleanup & management app, written as a frontend for web use of m4b-merge.
## 📝 Table of Contents
- [About](#about)
- [Getting Started](#getting_started)
- [Usage](#usage)
- [Built Using](#built_using)
- [Contributing](../CONTRIBUTING.md)
- [Authors](#authors)
- [Contributors](#contributors)**Bragi - (god of poetry in [Norse mythology](https://en.wikipedia.org/wiki/Bragi)):**
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 canSome 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](https://github.com/djdembeck/m4b-merge)### Screens
Folder/file selection | ASIN input
:-------------------------:|:-------------------------:
![file-selection](../assets/screens/file_picker.png) | ![asin-auto-search](../assets/screens/auto_search_panel.png)Folder/file selection | Post-proccess overview
:-------------------------:|:-------------------------:
![asin-custom-search](../assets/screens/custom_search.png) | ![post-process](../assets/screens/processing_panel.png)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](https://github.com/sandreas/m4b-tool#installation)
- 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](https://www.loggly.com/ultimate-guide/python-logging-basics/) |
| `-e DEBUG=False` | Turn django debug on or off (default False) |
| `-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 CELERY_WORKERS=1` | The number or celery workers for processing books (default 1)|
| `-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
## Docker Compose
```
version: '3'services:
bragi:
image: ghcr.io/djdembeck/bragibooks:main
container_name: bragibooks
environment:
- CSRF_TRUSTED_ORIGINS=https://bragibooks.mydomain.com
- LOG_LEVEL=INFO
- DEBUG=False
- UID=1000
- GID=1000
volumes:
- path/to/config:/config
- path/to/input:/input
- path/to/output/output:/output
- path/to/done:/done
ports:
- 8000:8000
restart: unless-stopped
```#### Direct Build (Gunicorn)
- Copy static assets to project folder:
```
python manage.py collectstatic
```
- Create the database:
```
python manage.py migrate
```
- Run the celery worker for processing books:
```
celery -A bragibooks_proj worker \
--loglevel=info \
--concurrency 1 \
-E
```
- 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
```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__ - Bragi will auto search for the audiobook data on [Audible.com](https://www.audible.com) (US only). If the data found is incorrect you can do a custom search to find the correct title and then submit for processing.
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. This will be done in the background.
4. __Books page__ - Page where you can see the data assigned to each book after it has finished processing. You can also check the status of the books still being processed.- [Django](https://www.djangoproject.com/) - Server/web framework
- [Celery](https://docs.celeryq.dev/en/stable/getting-started/introduction.html) - Task queue and worker
- [Bulma](https://bulma.io/) - Frontend CSS framework
- [audnexus](https://github.com/laxamentumtech/audnexus) - API backend for metadata
- [m4b-merge](https://github.com/djdembeck/m4b-merge) - File merging and tagging## ✍️ Authors
[@djdembeck](https://github.com/djdembeck) - Idea & Initial work## Contributors ✨
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!