A docker image for beets 
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:latestdocker-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:roDue to the ephemeral nature of Docker containers these images provide a number of optional volume mounts to persist data outside of the container:
/configcontain :.config/beets: The Beets config directory containingconfig.yaml..config/betanin: The Betanin config directory containingconfig.toml..local/share/betanin/: Containingbetanin.dbandsecret_keyfiles.
/Downloads: Incomming directory, this is where new music are comming must match withWATCH_DIRvariable./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 whereinotifywaitwill watch for incomming files , only used ininotifyMODE.BEETS_ARGS: add arguments to beet import command in entrypoint file (optional, default:none)TZ: To change the timezone of the container set theTZenvironment 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.