A docker image for beets with automation
From beets.io:
Beets is the media library management system for obsessive music geeks.
The purpose of beets is to get your music collection right once and for all. It catalogs your collection, automatically improving its metadata as it goes using the MusicBrainz database. Then it provides a bouquet of tools for manipulating and accessing your music.
- Source Code : https://github.com/beetbox/beets
- Documentation : https://beets.readthedocs.io
- Official Website : https://beets.io
All the lines commented in the examples below should be adapted to your environment.
Note: --user $(id -u):$(id -g)
should work out of the box on linux systems. If your docker host run on windows or if you want specify an other user id and group id just replace with the appropriates values.
docker run \
--detach \
--interactive \
--name beets \
--user $(id -u):$(id -g) \
#--publish 4030:4030 \
#--env MODE=betanin \
#--env BETANIN_HOST=0.0.0.0 \
#--env BETANIN_PORT=4030 \
#--env WATCH_DIR=/Downloads \
--env UMASK_SET=022 \
--env TZ=Europe/Paris \
--volume /etc/localtime:/etc/localtime:ro \
#--volume ./config:/config \
#--volume ./MyMusic:/Music \
#--Volume ./Downloads:/Downloads \
j33r/beets:latest
docker-compose
can help with defining the docker run
config in a repeatable way rather than ensuring you always pass the same CLI arguments.
Here's an example docker-compose.yml
config:
version: '3'
services:
beets:
image: j33r/beets:latest
container_name: beets
restart: unless-stopped
user: $(id -u):$(id -g)
#ports:
# - 4030:4030
#environment:
#- MODE=betanin
#- BETANIN_HOST="0.0.0.0"
#- BETANIN_PORT="4030"
#- WATCH_DIR=/Downloads
#- UMASK_SET=022
#- TZ=Europe/Paris
volumes:
#- ./config:/config
#- ./Download:/Download
#- ./MyMusic:/Music
- /etc/localtime:/etc/localtime:ro
Due to the ephemeral nature of Docker containers these images provide a number of optional volume mounts to persist data outside of the container:
/config
contain :.config/beets
: The Beets config directory containingconfig.yaml
..config/betanin
: The Betanin config directory containingconfig.toml
..local/share/betanin/
: Containingbetanin.db
andsecret_key
files.
/Downloads
: Incomming directory, this is where new music are comming must match withWATCH_DIR
variable./Music
: Final directory where are audio files moved after beets process is done.etc/localtime
: This directory is for have the same time as host inthe container.
You should create directory before run the container otherwise directories are created by the docker deamon and owned by the root user
MODE
: automation modeinotifywait
|betanin
|standalone
(default:betanin
)WATCH_DIR
: This is whereinotifywait
will watch for incomming files , only used ininotify
MODE
.BEETS_ARGS
: add arguments to beet import command in entrypoint file (optional, default:none
)TZ
: To change the timezone of the container set theTZ
environment variable. The full list of available options can be found on Wikipedia.UMASK
: set permission of files created by the container process. More info on ArchLinux Wiki ArchLinux Wiki.
4030
: Betanin default port can be changed in betanin config file.
This image come with Inotifywait and Betanin this tools are used for automatic import/rename/tag new audio files.
Inotifywait efficiently waits for changes and automatic import/rename/tag new audio file in the WATCH_DIR
.
Betanin is a beets based man-in-the-middle of your torrent client and music player
Betanin receive call from torrent client when the download is done then add the news files to the import queue process.
more info : https://github.com/sentriz/betanin
You are welcome to contribute to this project, but read this before please.
Found any issue or bug in the codebase? Have a great idea you want to propose ? You can help by submitting an issue to the Github repository.
Before opening a new issue, please check if the issue has not been already made by searching the issues
We would like to have discussions and general queries related to this repository.
you can reach me on Libera irc server /query jee
Before submitting a pull request, ensure that you go through the following:
- Ensure that there is no open or closed Pull Request corresponding to your submission to avoid duplication of effort.
- Create a new branch on your forked repo based on the main branch and make the changes in it. Example:
git clone https://your_fork
git checkout -B patch-N main
- Submit the pull request, provide informations (why/where/how) in the comments section
This project is under the GNU Generic Public License v3 to allow free use while ensuring it stays open.