Git Product home page Git Product logo

docker-beets's Introduction

linuxserver.io

Blog Discord Discourse Fleet GitHub Open Collective

The LinuxServer.io team brings you another container release featuring:

  • regular and timely application updates
  • easy user mappings (PGID, PUID)
  • custom base image with s6 overlay
  • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
  • regular security updates

Find us at:

  • Blog - all the things you can do with our containers including How-To guides, opinions and much more!
  • Discord - realtime support / chat with the community and the team.
  • Discourse - post on our community forum.
  • Fleet - an online web interface which displays all of our maintained images.
  • GitHub - view the source for all of our repositories.
  • Open Collective - please consider helping us by either donating or contributing to our budget

Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

Beets is a music library manager and not, for the most part, a music player. It does include a simple player plugin and an experimental Web-based player, but it generally leaves actual sound-reproduction to specialized tools.

beets

Supported Architectures

We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

Simply pulling lscr.io/linuxserver/beets:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

The architectures supported by this image are:

Architecture Available Tag
x86-64 amd64-<version tag>
arm64 arm64v8-<version tag>
armhf

Version Tags

This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

Tag Available Description
latest Stable Beets Releases
nightly Built against head of Beets git, generally considered unstable but a likely choice for power users of the application.

Application Setup

Edit the config file in /config

To edit the config from within the container use beet config -e

For a command prompt as user abc docker exec -it -u abc beets bash

See Beets for more info.

Contains beets-extrafiles plugin, configuration details

Usage

To help you get started creating a container from this image you can either use docker-compose or the docker cli.

docker-compose (recommended, click here for more info)

---
services:
  beets:
    image: lscr.io/linuxserver/beets:latest
    container_name: beets
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /path/to/beets/config:/config
      - /path/to/music/library:/music
      - /path/to/ingest:/downloads
    ports:
      - 8337:8337
    restart: unless-stopped
docker run -d \
  --name=beets \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -p 8337:8337 \
  -v /path/to/beets/config:/config \
  -v /path/to/music/library:/music \
  -v /path/to/ingest:/downloads \
  --restart unless-stopped \
  lscr.io/linuxserver/beets:latest

Parameters

Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

Parameter Function
-p 8337 Application WebUI
-e PUID=1000 for UserID - see below for explanation
-e PGID=1000 for GroupID - see below for explanation
-e TZ=Etc/UTC specify a timezone to use, see this list.
-v /config Persistent config files
-v /music Music library
-v /downloads Non processed music

Environment variables from files (Docker secrets)

You can set any environment variable from a file by using a special prepend FILE__.

As an example:

-e FILE__MYVAR=/run/secrets/mysecretvariable

Will set the environment variable MYVAR based on the contents of the /run/secrets/mysecretvariable file.

Umask for running applications

For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

User / Group Identifiers

When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance PUID=1000 and PGID=1000, to find yours use id your_user as below:

id your_user

Example output:

uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)

Docker Mods

Docker Mods Docker Universal Mods

We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

Support Info

  • Shell access whilst the container is running:

    docker exec -it beets /bin/bash
  • To monitor the logs of the container in realtime:

    docker logs -f beets
  • Container version number:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' beets
  • Image version number:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/beets:latest

Updating Info

Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the Application Setup section above to see if it is recommended for the image.

Below are the instructions for updating containers:

Via Docker Compose

  • Update images:

    • All images:

      docker-compose pull
    • Single image:

      docker-compose pull beets
  • Update containers:

    • All containers:

      docker-compose up -d
    • Single container:

      docker-compose up -d beets
  • You can also remove the old dangling images:

    docker image prune

Via Docker Run

  • Update the image:

    docker pull lscr.io/linuxserver/beets:latest
  • Stop the running container:

    docker stop beets
  • Delete the container:

    docker rm beets
  • Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your /config folder and settings will be preserved)

  • You can also remove the old dangling images:

    docker image prune

Image Update Notifications - Diun (Docker Image Update Notifier)

tip: We recommend Diun for update notifications. Other tools that automatically update containers unattended are not recommended or supported.

Building locally

If you want to make local modifications to these images for development purposes or just to customize the logic:

git clone https://github.com/linuxserver/docker-beets.git
cd docker-beets
docker build \
  --no-cache \
  --pull \
  -t lscr.io/linuxserver/beets:latest .

The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

docker run --rm --privileged multiarch/qemu-user-static:register --reset

Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

Versions

  • 28.08.24: - Rebase to Alpine 3.20, switch from Pillow to Imagemagick.
  • 23.12.23: - Rebase to Alpine 3.19.
  • 25.08.23: - Rebase to Alpine 3.18, pin Pillow to 9.5.0.
  • 07.07.23: - Deprecate armhf. As announced here
  • 25.03.23: - Add requests_oauthlib required for beatport plugin.
  • 24.02.23: - Rebase to Alpine 3.17, migrate to s6v3, install chromaprint from Alpine repos, add beetcamp plugin.
  • 15.01.22: - Rebasing to alpine 3.15.
  • 19.12.19: - Rebasing to alpine 3.11.
  • 28.06.19: - Rebasing to alpine 3.10.
  • 12.05.19: - Add flac and mp3val binaries required for badfiles plugin.
  • 12.04.19: - Rebase to Alpine 3.9.
  • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
  • 11.03.19: - Swap copyartifacts for extrafiles, update endpoints with nightly tag.
  • 01.03.19: - Switch to python3.
  • 07.02.19: - Add fftw-dev build dependency for chromaprint.
  • 28.01.19: - Add pipeline logic and multi arch.
  • 15.08.18: - Rebase to alpine 3.8, use alpine repo version of pylast.
  • 12.08.18: - Add requests pip package.
  • 04.03.18: - Upgrade mp3gain to 1.6.1.
  • 02.01.18: - Deprecate cpu_core routine lack of scaling.
  • 27.12.17: - Add beautifulsoup4 pip package.
  • 06.12.17: - Rebase to alpine linux 3.7.
  • 25.05.17: - Rebase to alpine linux 3.6.
  • 06.02.17: - Rebase to alpine linux 3.5.
  • 16.01.17: - Add packages required for replaygain.
  • 24.12.16: - Add beets-copyartifacts plugin.
  • 07.12.16: - Edit cmake options for chromaprint, should now build and install fpcalc, add gstreamer lib
  • 14.10.16: - Add version layer information.
  • 01.10.16: - Add nano and editor variable to allow editing of the config from the container command line.
  • 30.09.16: - Fix umask.
  • 24.09.16: - Rebase to alpine linux.
  • 10.09.16: - Add layer badges to README.
  • 05.01.16: - Change ffpmeg repository, other version crashes container
  • 06.11.15: - Initial Release
  • 29.11.15: - Take out term setting, causing issues with key entry for some users

docker-beets's People

Contributors

aptalca avatar artbird309 avatar bartdorlandt avatar benburdick avatar bigoulours avatar chbmb avatar ironicbadger avatar j0nnymoe avatar jsetton avatar linuxserver-ci avatar lonix avatar nemchik avatar nomandera avatar omgimalexis avatar simonmcnair avatar smdion avatar sparklyballs avatar thelamer avatar thespad avatar tobbenb avatar wilsonic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-beets's Issues

beets nightly is lacking python pkg confuse >= 1.0.0

linuxserver.io

Running beets nightly docker and it won't start anymore - log says:

pkg_resources.DistributionNotFound: The 'confuse>=1.0.0' distribution was not found and is required by beets

Connected to console and re-installed via command-line - after that its working again.

Following packages are missing:

  • mediafile (0.1.0)
  • confuse (1.0.0)

Bildschirmfoto 2019-06-04 um 20 08 14

Bildschirmfoto 2019-06-04 um 20 08 52

Maybe pip3 could also be updated to 19.1.1? 😃

Cheers, and thanx though 👍

make cron-file persistent?

beets can use cron-jobs to check for new songs in the downloads-directory and it works fantastic to autoimport new music.
but whenever i restart the container, the cronfile will reset. is it possible to make the cronfile persistent?

Beets is broken at head

Latest image is non functional:

  File "/usr/bin/beet", line 11, in <module>
    load_entry_point('beets==1.4.7', 'console_scripts', 'beet')()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 480, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2691, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2322, in load
    return self.resolve()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2328, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/site-packages/beets/ui/__init__.py", line 42, in <module>
    from beets.autotag import mb
  File "/usr/lib/python2.7/site-packages/beets/autotag/__init__.py", line 26, in <module>
    from .match import tag_item, tag_album, Proposal  # noqa
  File "/usr/lib/python2.7/site-packages/beets/autotag/match.py", line 24, in <module>
    from munkres import Munkres
  File "/usr/lib/python2.7/site-packages/munkres.py", line 79
    def pad_matrix(self, matrix: Matrix, pad_value: int=0) -> Matrix:

unable to map on group with ID already existing in S6 alpine image

when trying to launch image with env variable -e PGID=65534 the settings is ignored and the resulting group id used is finally 1001 althouth the log says the contrary :

s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing...


      _     _ _
     | |___| (_) ___
     | / __| | |/ _ \
     | \__ \ | | (_) |
     |_|___/ |_|\___/
           |_|

Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/index.php/donations/

GID/UID

User uid: 65534
User gid: 65534

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
[cont-init.d] 30-config: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.


config directory permissions resulting :

-rw-r--r-- 1 65534 1001 636 nov. 12 17:03 beets.sh
-rw-r--r-- 1 65534 1001 1566 nov. 12 17:05 config.yaml
-rw-r--r-- 1 65534 1001 36864 nov. 12 17:03 musiclibrary.blb

linuxserver.io

Thanks, team linuxserver.io

Add "parentwork" addon to image

Hi guys,

I'm trying to use the Parentwork plugin but it would appear it isn't included in this image (as far as I can see) -- or at least it's not working (I'm receiving "ModuleNotFoundError: No module named 'beetsplug.parentwork'" when I attempt to run using the plugin). Would it be possible to include it in a future build to assist in Classical music organization?

Thanks!

copyartifacts plugin fails to load as it hasn't been updated to support Python 3

linuxserver.io

You can see the issue here:
image
It appears as the plugin is lacking support for Python 3.

The issue also finds discussion here: https://github.com/sbarakat/beets-copyartifacts/issues/31#issuecomment-282508634
and a working version that I have tested is here: https://github.com/mverbowski/beets-copyartifacts/blob/master/beetsplug/copyartifacts.py
Of course though that one works, it will not receive updates if the dev becomes active again. - His last commit was on 24-Oct-2017 and RP's also don't seem to be implemented.

Personally I find this plugin very important to my usecase of beets. I was told by Aptalca on the Linuxserver Discord channel to post this issue here.

Regards, Johan

Thanks, team linuxserver.io

[FEAT] Running the docker container without starting up a web instance

Is this a new feature request?

  • I have searched the existing issues

Wanted change

I would like to be able to query beets without standing up a web server here. This would run it as a CLI command

Reason for change

Need for this is that the importing and collection management isn't needed as a true server sense. The need is so that I can run this sporattically when needed.

Proposed code change

Adding environment varraible
Adding conditional logic in the service d to not start up the beets server.
Accept the arguements as what to run from the command line.

[BUG] Maintainers did not respond to change request

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I created an issue #94 which received no response. This led me to conclude that this repo is unmaintained and create doc changes to note that LSIO is not maintained by the beets project itself, and some of the default config may differ from what beets ships with.

beetbox/beets#4859

We would love to work with y'all, we don't exactly have the people to dedicate to maintaining e.g. Docker images for beets. But ideally this would look more like a partnership and less like an ivory tower. Is there any way our project can communicate with you?

Expected Behavior

Open dialogue between LSIO and beets

Steps To Reproduce

Make an issue, wait for a response

Environment

- OS: github
- How docker service was installed: woo

CPU architecture

x86-64

Docker creation

asdf

Container logs

zxcv

Update to python 3.8.10 breaks image on Raspberry Pi

linuxserver.io


Expected Behavior

Container should serve beets.

Current Behavior

Logs show it's hung on "ValueError: Name node can't be used with 'None' constant"
Running v1.4.9-ls49 works fine.

Steps to Reproduce

  1. Start container in Docker with latest image using docker-compose

Environment

OS: Raspbian
CPU architecture: arm32
How docker service was installed: Official docker repo

Command used to create docker container (run/create/compose/screenshot)

beets:
image: linuxserver/beets:latest
container_name: beets
restart: unless-stopped
ports:
- 8337:8337
environment:
- PUID=1000
- PGID=1000
- TZ=America/XXX
- UMASK=002
volumes:
- /beets/config:/config
- /beets/music:/music
- /beets/downloads:/downloads

Docker logs

ValueError: Name node can't be used with 'None' constant,
Traceback (most recent call last):,
File "/usr/bin/beet", line 33, in ,
sys.exit(load_entry_point('beets==1.4.9', 'console_scripts', 'beet')()),
File "/usr/lib/python3.8/site-packages/beets/ui/init.py", line 1266, in main,
_raw_main(args),
File "/usr/lib/python3.8/site-packages/beets/ui/init.py", line 1249, in _raw_main,
subcommands, plugins, lib = _setup(options, lib),
File "/usr/lib/python3.8/site-packages/beets/ui/init.py", line 1144, in _setup,
lib = _open_library(config),
File "/usr/lib/python3.8/site-packages/beets/ui/init.py", line 1201, in _open_library,
get_path_formats(),,
File "/usr/lib/python3.8/site-packages/beets/ui/init.py", line 619, in get_path_formats,
path_formats.append((query, template(view.as_str()))),
File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 571, in template,
return Template(fmt),
File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 581, in init,
self.compiled = self.translate(),
File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 614, in translate,
func = compile_func(,
File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 155, in compile_func,
prog = compile(mod, '', 'exec'),
ValueError: Name node can't be used with 'None' constant,

[BUG] <Container is not working>

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Is the second time that i installed the Beets container but after installation i see no information on the webpage.
The only thing i see is Beets in the left upper corner of the screen but no further infomation.
beets

Take a look and you will see.
The logs tells me nothing
Beets-log.txt

Expected Behavior

A GUI which i use.

Steps To Reproduce

No steps at the moment

Environment

- OS:
- How docker service was installed:

CPU architecture

x86-64

Docker creation

Portainer

Container logs

see attachment

[BUG] <title>Blank screen when launching Web UI

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Using Docker in Unraid, the install goes fine. When you open the Web UI, it's just a blank screen with the Query box in the top left corner. I've tried installing different versions and different branches, but the same thing happens each time. Folders are properly mapped to the Docker container folders. Ports are obviously mapped ok. The CLI DOES work inside the container. I've included the entirety of the log and a screenshot of the Web UI at the bottom. Thanks!

Screenshot_20221215_105630
Screenshot_20221215_111311

Expected Behavior

Web UI loads.

Steps To Reproduce

  1. In Unraid, go to Apps. Search Beets. Click on install.
  2. Specify folders for music collection and incoming files. Map ports. Click install.
  3. In the Docker tab, click on the Beets icon and select Open Web UI. The page should open as described above.

Environment

- OS:Unraid
- How docker service was installed: Unraid Apps tab

CPU architecture

x86-64

Docker creation

See screenshot in post.

Container logs

text  error  warn  system  array  login  

s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service 00-legacy: starting
s6-rc: info: service 00-legacy successfully started
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
cont-init: info: running /etc/cont-init.d/01-envfile
cont-init: info: /etc/cont-init.d/01-envfile exited 0
cont-init: info: running /etc/cont-init.d/01-migrations
cont-init: info: /etc/cont-init.d/01-migrations exited 0
cont-init: info: running /etc/cont-init.d/10-adduser
cont-init: info: /etc/cont-init.d/10-adduser exited 0
cont-init: info: running /etc/cont-init.d/30-config
cont-init: info: /etc/cont-init.d/30-config exited 0
cont-init: info: running /etc/cont-init.d/99-custom-files
cont-init: info: /etc/cont-init.d/99-custom-files exited 0
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-mods: starting
s6-rc: info: service init-mods successfully started
s6-rc: info: service init-mods-package-install: starting
s6-rc: info: service init-mods-package-install successfully started
s6-rc: info: service init-mods-end: starting
s6-rc: info: service init-mods-end successfully started
s6-rc: info: service init-services: starting
s6-rc: info: service init-services successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun beets (no readiness notification)
s6-rc: info: service legacy-services successfully started
s6-rc: info: service 99-ci-service-check: starting
s6-rc: info: service 99-ci-service-check successfully started
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.6:8337/ (Press CTRL+C to quit)
192.168.1.38 - - [15/Dec/2022 07:56:18] "GET / HTTP/1.1" 200 -
192.168.1.38 - - [15/Dec/2022 08:00:30] "GET / HTTP/1.1" 200 -
192.168.1.38 - - [15/Dec/2022 08:02:32] "GET / HTTP/1.1" 200 -
[custom-init] No custom services found, skipping...
[migrations] started
[migrations] no migrations found

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    99
User gid:    100
-------------------------------------

[custom-init] No custom files found, skipping...
[ls.io-init] done.
 * Serving Flask app 'beetsplug.web' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

Question: Why is it necessary to run the image as service for beet web?

At first i would like to thank you for this great piece of work... it saved me a lot of time.

One thing does not fit my needs and i just would like to know, if there is a reason, using beet web via custom shell script by default?

I personally don't like the web interface at all, I'm using beet only to organize music.

So unfortunately this image is not usable for me - my solution was to create a Dockerfile based on yours without the beet web initialisation script... an example:

# Dockerfile
# ...everything exactly like in your Dockerfile
 rm -rf \
	/root/.cache \
	/tmp/*

# environment settings
ENV BEETSDIR="/config" \
EDITOR="nano" \
HOME="/config"

# HERES THE CHANGE
CMD ["web"] # i would prefer ["help"], but not if default mode should be the web interface...
ENTRYPOINT ["beet"]
# building the image as *beets*
docker build . -t beets
# Adding some aliases to my shell...
alias beet='docker run -it --rm -u $(id -u):$(id -g) -v "${HOME}/docker-data/beets:/config" -v "${HOME}/dotfiles/etc/beets/config.yaml:/config/config.yaml:ro" -v "${HOME}/music:/music" -v "${HOME}/incoming-music:/downloads" beets'

alias beet-import='beet import /downloads'

Now the default command is beet web, but all other commands could be used without having to run a service and an open port too, e.g. beet ls.

What do you think about it? Could this be an improvement or would it break something important?

FFmpeg with libfdk-aac [Enhancement]

I noticed that an earlier issue once added this ffmpeg library to the container but was later removed when switching to Alpine linux.

The below container has a dockerfile that builds ffmpeg with libfdk-aac for Alpine linux.

https://hub.docker.com/r/alfg/ffmpeg/

Would it be possible to incorporate the building of FFmpeg with libfdk-aac into this beets container? The libfdk-aac codec is superior to aac.

GStreamer-based ReplayGain Plugin Initialisation Fails

Host OS: CoreOS 1235.4.0.
docker-beets version tag: 52

I have configured the beets replaygain plugins as follows;

replaygain:
    backend: gstreamer
    auto: yes

However, when running any beet commands, I receive the following error;

root@beets-709324527-mbbqf:/$ beet ls
error: replaygain initialization failed: Failed to load GStreamer: python-gi not found

Checking the Dockerfile, python-gi should be installed as the py-gobject package has been installed. However, this appears to be version 2.0, whereas the beets documentation mentions version 3.x. I did attempt to remove the py-gobject package and install py-gobject3 but to no avail - beets returns the following error instead;

root@beets-709324527-mbbqf:/$ beet ls
error: replaygain initialization failed: Failed to load required GStreamer plugins

Do you know what changes need to be made in order to make use of the GStreamer-based ReplayGain plugin?

Many thanks.

[BUG] New install, blank screen?

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

So I just installed this docker container, and can connect to it, but not sure if I missing something, but I can't get anything to happen. For example I type status, and nothing.

image

Expected Behavior

No response

Steps To Reproduce

docker-compose up

Environment

- OS: Linux
- How docker service was installed: As part of UnRaid

CPU architecture

x86-64

Docker creation

beets:
    image: lscr.io/linuxserver/beets:latest

    environment:
      - PUID=99
      - PGID=100
      - TZ=Etc/UTC
    volumes:
      - /mnt/user/appdata/music/beets:/data
      - /mnt/user/media/music/downloads:/music
    ports:
      - 8337:8337
    restart: unless-stopped


### Container logs

```bash
2023-10-27T13:57:12.709148792Z [migrations] no migrations found

2023-10-27T13:57:17.267010952Z usermod: no changes

2023-10-27T13:57:17.268313502Z ───────────────────────────────────────

2023-10-27T13:57:17.268330712Z 

2023-10-27T13:57:17.268335622Z       ██╗     ███████╗██╗ ██████╗ 

2023-10-27T13:57:17.268340092Z       ██║     ██╔════╝██║██╔═══██╗

2023-10-27T13:57:17.268344502Z       ██║     ███████╗██║██║   ██║

2023-10-27T13:57:17.268348822Z       ██║     ╚════██║██║██║   ██║

2023-10-27T13:57:17.268353132Z       ███████╗███████║██║╚██████╔╝

2023-10-27T13:57:17.268357412Z       ╚══════╝╚══════╝╚═╝ ╚═════╝ 

2023-10-27T13:57:17.268361832Z 

2023-10-27T13:57:17.268365742Z    Brought to you by linuxserver.io

2023-10-27T13:57:17.268369852Z ───────────────────────────────────────

2023-10-27T13:57:17.268662282Z 

2023-10-27T13:57:17.268672812Z To support LSIO projects visit:

2023-10-27T13:57:17.268676232Z https://www.linuxserver.io/donate/

2023-10-27T13:57:17.268679242Z 

2023-10-27T13:57:17.268682192Z ───────────────────────────────────────

2023-10-27T13:57:17.268685742Z GID/UID

2023-10-27T13:57:17.268688652Z ───────────────────────────────────────

2023-10-27T13:57:17.271057201Z 

2023-10-27T13:57:17.271065091Z User UID:    99

2023-10-27T13:57:17.271067291Z User GID:    100

2023-10-27T13:57:17.271069041Z ───────────────────────────────────────

2023-10-27T13:57:17.271071011Z 

2023-10-27T13:57:17.288229652Z cp: not replacing '/config/beets.sh'

2023-10-27T13:57:17.289097512Z cp: not replacing '/config/config.yaml'

2023-10-27T13:57:17.292488060Z [custom-init] No custom files found, skipping...

2023-10-27T13:57:18.140264832Z  * Serving Flask app 'beetsplug.web'

2023-10-27T13:57:18.140286142Z  * Debug mode: off

2023-10-27T13:57:18.141311432Z WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

2023-10-27T13:57:18.141343322Z  * Running on all addresses (0.0.0.0)

2023-10-27T13:57:18.141348672Z  * Running on http://127.0.0.1:8337

2023-10-27T13:57:18.141352882Z  * Running on http://172.23.0.3:8337

2023-10-27T13:57:18.141356962Z Press CTRL+C to quit

2023-10-27T13:57:18.319646376Z [ls.io-init] done.

Ram fills when chroma plugin is active

I posted about the issue here: https://groups.google.com/forum/#!topic/beets-users/rQgK1l4mIrI

Basically the ram fills when the chroma plugin is active, it doesn't fill when it's not active. Ram continues filling until beets stalls, if left for long enough all docker containers and even the unraid docker UI slows to a crawl and slowly becomes unresponsive, takes about 30mins. Ram fills to about 27GB (out of 32GB on the system) before locking up. Ram is cleared when import is cancelled or beets is restarted.

linuxserver.io

UNRAID 6.5.3

M/B: Supermicro - X9SRL-F
CPU: Intel® Xeon® CPU E5-1650 v2 @ 3.50GHz
HVM: Enabled
IOMMU: Enabled
Cache: 384 kB, 1536 kB, 12288 kB
Memory: 32 GB Multi-bit ECC (max. installable capacity 512 GB)
Network: eth0: 1000 Mb/s, full duplex, mtu 1500
eth1: not connected
Kernel: Linux 4.14.49-unRAID x86_64
OpenSSL: 1.0.2o

screen shot 2018-08-24 at 9 16 54 am

Thanks, team linuxserver.io

[BUG] Replaygain bug (#20) seems to be back

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

On updating to the latest beets image, I received:

error: replaygain initialization failed: Failed to load GStreamer: python-gi not found

#20 - seems this bug is back with the rebase to Alpine?

Expected Behavior

That error wouldn't be there.

Steps To Reproduce

  1. Docker running on Ubuntu 22.04.02 LTS
  2. Pull the latest beets image
  3. with this in your config:
replaygain:
    backend: gstreamer
    overwrite: no  

You get:

error: replaygain initialization failed: Failed to load GStreamer: python-gi not found

Environment

- OS: Ubuntu 22.04.02 LTS
- How docker service was installed: distro's package manager

CPU architecture

x86-64

Docker creation

beets:
        image: ghcr.io/linuxserver/beets:nightly
        container_name: beets
        environment:
            - PUID=${UID}
            - PGID=${GUID}
            - TZ=${TZ}
        volumes:
            - ${BEETS_CONFIG}:/config
            - ${BEETS_OUT_KAMY}:/music
            - ${BEETS_IN}:/downloads
        ports:
            - 8337:8337
        restart: unless-stopped


### Container logs

```bash
[migrations] started
[migrations] no migrations found
───────────────────────────────────────

      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝

   Brought to you by linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    1000
User GID:    1000
───────────────────────────────────────

[custom-init] No custom files found, skipping...
error: replaygain initialization failed: Failed to load GStreamer: python-gi not found
error: replaygain initialization failed: Failed to load GStreamer: python-gi not found
error: replaygain initialization failed: Failed to load GStreamer: python-gi not found
error: replaygain initialization failed: Failed to load GStreamer: python-gi not found

...and that error just repeats on endlessly

Beets imported files owned by root:root

linuxserver.io

Expected Behavior

Running a beets import with either copy or move, files copied from the completed music download folder to the local library folder should be owned by the user ID and group ID specified as PUID and PGID in the docker environment. On my system, this is PUID 1000 and PGID 999.

Current Behavior

After running a beets import docker exec -ti beets /bin/bash -c 'beet import /downloads' or docker exec -ti beets /bin/bash -c 'beet import -c /downloads' the files that appear in the /music path (on host, at /home/data/music/) appear owned by root:root instead of myuserid:docker. The files in downloads are already properly owned as myuserid:docker, as they appear there from Lidarr.

Steps to Reproduce

  1. Configure beets docker-compose and config.yaml.
  2. Run import (docker exec -ti beets /bin/bash -c 'beet import /downloads')
  3. ls -ahl on files to verify.

Environment

OS: Ubuntu 18.04 server
CPU architecture: x86_64
How docker service was installed:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install -y docker-ce
sudo systemctl status docker
sudo usermod -aG docker ${USER}

VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)

DESTINATION=/usr/local/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
sudo chmod 755 $DESTINATION
sudo chmod +x $DESTINATION

sudo setfacl -Rdm g:docker:rwx ~/docker
sudo chmod -R 775 ~/docker

Command used to create docker container (run/create/compose/screenshot)

  beets:
    image: linuxserver/beets
    container_name: beets
    restart: unless-stopped
    networks:
      - web
    depends_on:
      - musicbrainz
    volumes:
      - ${USERDIR}/docker/beets/config:/config
      - /home/gmedia/music:/music
      - /home/data/downloads/complete/music:/downloads
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}

/home/gmedia is a mergerfs mount, rw local & ro gdrive with an rclone backend mount of /home/data (local) and /home/gdrive (remote)

I'm not exposing the web interface via traefik so I've removed all traefik labels from my normal compose template as well as the expose/port values.

Docker logs

[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing... 
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing... 
usermod: no changes

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1000
User gid:    999
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing... 
[cont-init.d] 30-config: exited 0.
[cont-init.d] 99-custom-files: executing... 
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
 * Serving Flask app "beetsplug.web" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8337/ (Press CTRL+C to quit)

Error when importing M4B with gapless set to true.

linuxserver.io

importing an M4B file with gapless attribute(pgap) set to true, mediafile generates an error. I encountered this error while testing Neurrone/beets-audible#15 but the stack trace does not touch on plugin. Perhaps this is related to the older version of mediafile installed? Latest version is 0.9.0


Expected Behavior

No error should occur if attribute is present.

Current Behavior

beet import -It .
Traceback (most recent call last):
  File "/usr/bin/beet", line 33, in <module>
    sys.exit(load_entry_point('beets==1.6.1', 'console_scripts', 'beet')())
  File "/usr/lib/python3.9/site-packages/beets/ui/__init__.py", line 1304, in main
    _raw_main(args)
  File "/usr/lib/python3.9/site-packages/beets/ui/__init__.py", line 1291, in _raw_main
    subcommand.func(lib, suboptions, subargs)
  File "/usr/lib/python3.9/site-packages/beets/ui/commands.py", line 973, in import_func
    import_files(lib, paths, query)
  File "/usr/lib/python3.9/site-packages/beets/ui/commands.py", line 943, in import_files
    session.run()
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 340, in run
    pl.run_parallel(QUEUE_SIZE)
  File "/usr/lib/python3.9/site-packages/beets/util/pipeline.py", line 446, in run_parallel
    raise exc_info[1].with_traceback(exc_info[2])
  File "/usr/lib/python3.9/site-packages/beets/util/pipeline.py", line 260, in run
    msg = next(self.coro)
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 1320, in read_tasks
    yield from task_factory.tasks()
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 1145, in tasks
    tasks = self._create(self.album(paths, dirs))
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 1224, in album
    items = [item for item in items if item]
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 1224, in <listcomp>
    items = [item for item in items if item]
  File "/usr/lib/python3.9/site-packages/beets/importer.py", line 1273, in read_item
    return library.Item.from_path(path)
  File "/usr/lib/python3.9/site-packages/beets/library.py", line 606, in from_path
    i.read(path)
  File "/usr/lib/python3.9/site-packages/beets/library.py", line 718, in read
    value = getattr(mediafile, key)
  File "/config/.local/lib/python3.9/site-packages/mediafile-0.6.0-py3.9.egg/mediafile.py", line 1198, in __get__
    out = style.get(mediafile.mgfile)
  File "/config/.local/lib/python3.9/site-packages/mediafile-0.6.0-py3.9.egg/mediafile.py", line 487, in get
    return self.deserialize(self.fetch(mutagen_file))
  File "/config/.local/lib/python3.9/site-packages/mediafile-0.6.0-py3.9.egg/mediafile.py", line 494, in fetch
    return mutagen_file[self.key][0]
TypeError: 'bool' object is not subscriptable

Steps to Reproduce

  1. beet import -It gapless-set.m4b

Environment

OS:
CPU architecture: arm64
How docker service was installed:

armbian-config

Command used to create docker container (run/create/compose/screenshot)

  beets:
    image: lscr.io/linuxserver/beets:nightly
    container_name: beets
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=100
    volumes:
      - /mnt/seagate4TB/appdata/beets:/config
      - /mnt/storage:/storage
    ports:
      - 8337:8337
    restart: unless-stopped

Docker logs

[BUG] music folder doesn't have write permissions

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When creating new container (using steps of this blog post), folders that mounted to the host OS don't have write permissions, preventing beets from execution:

Specifically /music

d---------   1 root root   60 Jan 21 11:57 music

Expected Behavior

That music folder will be writeable by abc user, so I can actually import music files.

Steps To Reproduce

  1. Open blog post
  2. Follow steps
  3. Create nightly docker container
  4. Run import
  5. See permission denied error
$ docker exec -u abc -it beets /bin/bash -c 'beet import /downloads'

/downloads/C.W. McCall/Wolf Creek Pass (1974) (10 items)
Tagging:
    C.W. McCall - Wolf Creek Pass
URL:
    https://musicbrainz.org/release/14341a6e-d33c-48af-a946-548b6dfba86a
(Similarity: 97.3%) (tracks, year) (12" Vinyl, 1975, US, MGM Records, M3G 4989)
 * Old Thirty                                     -> Old 30 (title)
 * Old Home Filler-Up An' Keeo On A-Truckin' Cafe -> Old Home Filler-Up an' Keep on A-Truckin' Cafe (title)
Error: Permission denied while creating /music/Albums

Environment

- OS: Synology DSM7
- How docker service was installed: Via Package Center

CPU architecture

x86-64

Docker creation

docker create \
--name=beets \
-v /etc/localtime:/etc/localtime:ro \
-v /redacted/_config:/config \
-v /redacted:/music \
-v /redacted/_Music:/downloads \
-e PGID=`id -g` -e PUID=`id -u` \
-p 8337:8337 \
linuxserver/beets:nightly


### Container logs

```bash
$ docker logs beets
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service 00-legacy: starting
s6-rc: info: service 00-legacy successfully started
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
cont-init: info: running /etc/cont-init.d/01-envfile
cont-init: info: /etc/cont-init.d/01-envfile exited 0
cont-init: info: running /etc/cont-init.d/01-migrations
[migrations] started
[migrations] no migrations found
cont-init: info: /etc/cont-init.d/01-migrations exited 0
cont-init: info: running /etc/cont-init.d/10-adduser

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    1531
User gid:    1000
-------------------------------------

cont-init: info: /etc/cont-init.d/10-adduser exited 0
cont-init: info: running /etc/cont-init.d/30-config
cont-init: info: /etc/cont-init.d/30-config exited 0
cont-init: info: running /etc/cont-init.d/99-custom-files
[custom-init] No custom files found, skipping...
cont-init: info: /etc/cont-init.d/99-custom-files exited 0
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service init-mods: starting
s6-rc: info: service init-mods successfully started
s6-rc: info: service init-mods-package-install: starting
s6-rc: info: service init-mods-package-install successfully started
s6-rc: info: service init-mods-end: starting
s6-rc: info: service init-mods-end successfully started
s6-rc: info: service init-services: starting
s6-rc: info: service init-services successfully started
s6-rc: info: service legacy-services: starting
services-up: info: copying legacy longrun beets (no readiness notification)
s6-rc: info: service legacy-services successfully started
s6-rc: info: service 99-ci-service-check: starting
[ls.io-init] done.
s6-rc: info: service 99-ci-service-check successfully started
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'
error: unknown command 'web'

beets-alternatives plugin

Hi,

Great project.
Would you consider including the beets-alternatives plugin into the base image?
(https://github.com/geigerzaehler/beets-alternatives)

It basically supports 2 usecases.

  • Export a subset of the collection for mobile players
  • Create alternative path tree of linked files.
    This can be used for example to access HighRes files via DLNA.

I can do a Pull Request if this helps.
Cheers.

PIP broken: ImportError: cannot import name 'InvalidSchemeCombination' from 'pip._internal.exceptions' (/usr/lib/python3.9/site-packages/pip/_internal/exceptions.py)

linuxserver.io

Any invocation of pip results in the following error.
ImportError: cannot import name 'InvalidSchemeCombination' from 'pip._internal.exceptions' (/usr/lib/python3.9/site-packages/pip/_internal/exceptions.py)


Expected Behavior

should not generate error on pip --version or any other command

Current Behavior

Error!

Steps to Reproduce

  1. run beets container
  2. docker exec -it beets /bin/bash
  3. pip --version
  4. see error

Environment

OS: Armbian
CPU architecture: arm64
How docker service was installed: armbian-setup

Command used to create docker container (run/create/compose/screenshot)

  beets:
    image: lscr.io/linuxserver/beets:nightly
    container_name: beets
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=100
    volumes:
      - /mnt/storage/appdata/beets:/config
      - /mnt/storage:/storage
    ports:
      - 8337:8337
    restart: unless-stopped

Docker logs

No output generated in docker log.

root@cf6a90ea7b07:/# pip --version
Traceback (most recent call last):
  File "/usr/bin/pip", line 33, in <module>
    sys.exit(load_entry_point('pip==20.3.4', 'console_scripts', 'pip')())
  File "/usr/bin/pip", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/usr/lib/python3.9/importlib/metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/main.py", line 10, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py", line 9, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/main_parser.py", line 7, in <module>
    from pip._internal.cli import cmdoptions
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/cmdoptions.py", line 25, in <module>
    from pip._internal.cli.progress_bars import BAR_TYPES
  File "/usr/lib/python3.9/site-packages/pip/_internal/cli/progress_bars.py", line 12, in <module>
    from pip._internal.utils.logging import get_indentation
  File "/usr/lib/python3.9/site-packages/pip/_internal/utils/logging.py", line 18, in <module>
    from pip._internal.utils.misc import ensure_dir
  File "/usr/lib/python3.9/site-packages/pip/_internal/utils/misc.py", line 34, in <module>
    from pip._internal.locations import get_major_minor_version, site_packages, user_site
  File "/usr/lib/python3.9/site-packages/pip/_internal/locations/__init__.py", line 14, in <module>
    from . import _distutils, _sysconfig
  File "/usr/lib/python3.9/site-packages/pip/_internal/locations/_sysconfig.py", line 8, in <module>
    from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid
ImportError: cannot import name 'InvalidSchemeCombination' from 'pip._internal.exceptions' (/usr/lib/python3.9/site-packages/pip/_internal/exceptions.py)

[FEAT] Include originquery plugin

Is this a new feature request?

  • I have searched the existing issues

Wanted change

Include the beets originquery plugin

Reason for change

Improves searching and tagging of music by allowing tags from included files to be searched with

Proposed code change

No response

[BUG] Serving media files via Web UI

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I'm getting 500 error whenever i try to download/stream media files using the web ui.

I would expect that i would be served the media file, but instead there seems to occur a TypeError somewhere in beets.

I've looked at the Beets repository and it looks like they have updated their code, but i'm not sure if this has been picked up in these images as the error does still refer to attachment_filename in the error.

https://github.com/beetbox/beets/blob/master/beetsplug/web/__init__.py#L330

Expected Behavior

Download or be able to stream media files

Steps To Reproduce

  1. Create new docker container (or compose) from the template provided by LSIO
  2. Ingest a working media file
  3. Open the web-ui
  4. Play or download media from browser

Environment

- OS: Debian 11
- How docker service was installed: `piping https://get.docker.com/ through bash`


- OS: MacOS
- How docker service was installed: Official Docker package

CPU architecture

x86-64

Docker creation

---
version: "2.1"
services:
  beets:
    image: lscr.io/linuxserver/beets:latest
    container_name: beets
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Amsterdam
    volumes:
      - ./config:/config
      - ./library:/music
      - ./ingest:/downloads
    ports:
      - 8337:8337
    restart: unless-stopped

Container logs

10.1.100.167 - - [31/Aug/2023 16:03:36] "GET / HTTP/1.1" 200 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /static/beets.css HTTP/1.1" 304 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /static/jquery.js HTTP/1.1" 304 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /static/underscore.js HTTP/1.1" 304 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /static/beets.js HTTP/1.1" 304 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /static/backbone.js HTTP/1.1" 304 -
10.1.100.167 - - [31/Aug/2023 16:03:36] "GET /page/2 HTTP/1.1" 404 -
10.1.100.167 - - [31/Aug/2023 16:03:42] "GET /item/query/a HTTP/1.1" 200 -
[2023-08-31 16:03:49,615] ERROR in app: Exception on /item/331/file [GET]
Traceback (most recent call last):
  File "/lsiopy/lib/python3.11/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/lsiopy/lib/python3.11/site-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/lsiopy/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/lsiopy/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/lsiopy/lib/python3.11/site-packages/beetsplug/web/__init__.py", line 324, in item_file
    response = flask.send_file(
               ^^^^^^^^^^^^^^^^
TypeError: send_file() got an unexpected keyword argument 'attachment_filename'
10.1.100.167 - - [31/Aug/2023 16:03:49] "GET /item/331/file HTTP/1.1" 500 -

[FEAT] Use more of upstream config.yaml

Is this a new feature request?

  • I have searched the existing issues

Wanted change

There's a mismatch between the config here and the default beets config:

https://github.com/beetbox/beets/blob/master/beets/config_default.yaml

https://github.com/linuxserver/docker-beets/blob/master/root/defaults/config.yaml

Perhaps most critically is this part in upstream:

import:
write: yes
copy: yes
move: no

This means "copy all imported music to a new folder, and write new tags into the copied files, and leave the raw imported files alone", basically.

This repo has:
import:
write: yes
copy: no
move: yes

This is a source of confusion, with a popular YouTuber (Techno Dad Life) recommending a change from these defaults. https://youtu.be/IQGM52MiIqg?t=198

Is there a reason for this?

Reason for change

I can't find any commit where upstream has move:yes.

https://github.com/beetbox/beets/commits/master?after=cc7abe3a4734de73c86cb9ba6253c6a5596a042b+69&branch=master&path%5B%5D=beets&path%5B%5D=config_default.yaml&qualified_name=refs%2Fheads%2Fmaster

Proposed code change

No response

[BUG] discogs plugin issues with beet 2.0.0

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Beet has a new release, here are the changelogs: https://github.com/beetbox/beets/releases/tag/v2.0.0

The discogs plugin throws this error when running this command daily via cron:
docker exec -u abc -it beets /bin/bash -c 'beet import -q /mnt/downloads/completed/music/*

error message:
discogs: python3-discogs-client version should be >= 2.3.15

Expected Behavior

It should run with not errors.

Steps To Reproduce

Simply run beets with the discogs plugin enabled.

Environment

OS: Debian 12
Docker Image by linuxserver (latest) 
Docker installed via its own repos

 version
discogs: python3-discogs-client version should be >= 2.3.15
beets version 2.0.0
Python version 3.11.9
plugins: albumtypes, beatport, chroma, convert, discogs, duplicates, embedart, fetchart, fromfilename, fuzzy, info, lastgenre, mbsync, missing, permissions, replaygain, rewrite, scrub, web

CPU architecture

x86-64

Docker creation

services:

# https://docs.linuxserver.io/images/docker-beets
# https://wintelguy.com/umask-calc.pl
# https://beets.readthedocs.io/en/stable/reference/cli.html

  beets:
    image: lscr.io/linuxserver/beets:latest
    container_name: beets
    hostname: beets
    restart: "no"
#        ports:
#          - 8337:8337/tcp
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK=007
      - UMASK_SET=007
      - TZ=Europe/Berlin
      - DOCKER_MODS=linuxserver/mods:universal-package-install
      - INSTALL_PACKAGES=py3-requests-oauthlib
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /opt/media/beets:/config
      - /sgate18TB01/Music:/music
      - /sgate18TB01/tmp/downloads/completed/music:/mnt/downloads/completed/music
    cpus: 2
    mem_limit: 2G
    networks:
      beets:
        ipv4_address: 192.168.192.130
    healthcheck:
      test: curl --connect-timeout 15 --silent --show-error --fail http://localhost:8337
      interval: 30s
      timeout: 15s
      retries: 3
      start_period: 1m00s



networks:

  beets:
    name: beets
    driver: macvlan
    ipam:
      config:
        - subnet: 192.168.192.128/30
          gateway: 192.168.192.129
    driver_opts:
      parent: vmbr1.1027
    external: false
    internal: false

Container logs

[mod-init] Running Docker Modification Logic
[mod-init] Adding linuxserver/mods:universal-package-install to container
[mod-init] Downloading linuxserver/mods:universal-package-install from lscr.io
[mod-init] Installing linuxserver/mods:universal-package-install
[mod-init] linuxserver/mods:universal-package-install applied to container
[migrations] started
[migrations] no migrations found
───────────────────────────────────────

      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝

   Brought to you by linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    1000
User GID:    1000
───────────────────────────────────────

cp: not replacing '/config/beets.sh'
**** Adding py3-requests-oauthlib to OS package install list ****
cp: not replacing '/config/config.yaml'
[pkg-install-init] **** Installing all mod packages ****
fetch http://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz
(1/14) Installing py3-oauthlib (3.2.2-r2)
(2/14) Installing py3-oauthlib-pyc (3.2.2-r2)
(3/14) Installing py3-certifi (2024.2.2-r0)
(4/14) Installing py3-certifi-pyc (2024.2.2-r0)
(5/14) Installing py3-charset-normalizer (3.3.2-r0)
(6/14) Installing py3-charset-normalizer-pyc (3.3.2-r0)
(7/14) Installing py3-idna (3.7-r0)
(8/14) Installing py3-idna-pyc (3.7-r0)
(9/14) Installing py3-urllib3 (1.26.18-r0)
(10/14) Installing py3-urllib3-pyc (1.26.18-r0)
(11/14) Installing py3-requests (2.31.0-r1)
(12/14) Installing py3-requests-pyc (2.31.0-r1)
(13/14) Installing py3-requests-oauthlib-pyc (1.3.1-r3)
(14/14) Installing py3-requests-oauthlib (1.3.1-r3)
Executing busybox-1.36.1-r18.trigger
OK: 230 MiB in 239 packages
[custom-init] No custom files found, skipping...
discogs: python3-discogs-client version should be >= 2.3.15
 * Serving Flask app 'beetsplug.web'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8337
 * Running on http://192.168.192.130:8337
Press CTRL+C to quit
Connection to localhost (127.0.0.1) 8337 port [tcp/*] succeeded!
[ls.io-init] done.

beets.mediafile is deprecated; use mediafile instead

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Everytime I run any Beets command on the cli, through Docker Portainer, I get:

/usr/lib/python3.9/site-packages/beets/mediafile.py:19: UserWarning: beets.mediafile is deprecated; use mediafile instead
  warnings.warn("beets.mediafile is deprecated; use mediafile instead")

Aside from the usual changes to config.yaml, there is no other configuration on my end.

Expected Behavior

Whilst everything seems to work as expected, I am worried about the deprecation nag.

Steps To Reproduce

  1. Open Docker Portainer
  2. Select 'beets' container command line
  3. Run beets

Environment

- OS: Open Media Vault 5.6.26
- How docker service was installed: Through Open Media Vault Web UI.

CPU architecture

x86-64

Docker creation

<screenshot not supported here>

Container logs

error: unknown command 'web'
/usr/lib/python3.9/site-packages/beets/mediafile.py:19: UserWarning: beets.mediafile is deprecated; use mediafile instead
  warnings.warn("beets.mediafile is deprecated; use mediafile instead")

[BUG] ANTIALIAS was removed in Pillow 10.0.0

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Beet import fails for some albums with the following error message:
AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'

Downgrading pillow to 9.5.0 resolves the issue.

Expected Behavior

Beet import is successful.

Steps To Reproduce

beet import /music/artist/album_title

Environment

- OS:  Ubuntu 22.04
- How docker service was installed:  Docker Compose

CPU architecture

x86-64

Docker creation

beets:
    image: lscr.io/linuxserver/beets:latest
    container_name: beets
    restart: always
    environment:
      - TZ=${TZ}
      - PUID=${PUID}
      - PGID=${PGID}
    ports:
      - 8337:8337
    volumes:
      - ${docker}/beets:/config
      - ${downloads}:/downloads
      - ${xbmc}/Music/Managed:/music

Container logs

N/A as container starts and runs successfully.  No errors are present in the container logs.

ValueError: Name node can't be used with 'None' constant

linuxserver.io


Expected Behavior

Should run beet command

Current Behavior

Get this python error:

Traceback (most recent call last):
  File "/usr/bin/beet", line 33, in <module>
    sys.exit(load_entry_point('beets==1.4.9', 'console_scripts', 'beet')())
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1266, in main
    _raw_main(args)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1249, in _raw_main
    subcommands, plugins, lib = _setup(options, lib)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1144, in _setup
    lib = _open_library(config)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1201, in _open_library
    get_path_formats(),
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 619, in get_path_formats
    path_formats.append((query, template(view.as_str())))
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 571, in template
    return Template(fmt)
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 581, in __init__
    self.compiled = self.translate()
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 614, in translate
    func = compile_func(
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 155, in compile_func
    prog = compile(mod, '<generated>', 'exec')
ValueError: Name node can't be used with 'None' constant
Traceback (most recent call last):
  File "/usr/bin/beet", line 33, in <module>
    sys.exit(load_entry_point('beets==1.4.9', 'console_scripts', 'beet')())
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1266, in main
    _raw_main(args)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1249, in _raw_main
    subcommands, plugins, lib = _setup(options, lib)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1144, in _setup
    lib = _open_library(config)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1201, in _open_library
    get_path_formats(),
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 619, in get_path_formats
    path_formats.append((query, template(view.as_str())))
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 571, in template
    return Template(fmt)
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 581, in __init__
    self.compiled = self.translate()
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 614, in translate
    func = compile_func(
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 155, in compile_func
    prog = compile(mod, '<generated>', 'exec')
ValueError: Name node can't be used with 'None' constant

Steps to Reproduce

  1. docker run --rm ghcr.io/linuxserver/beets beet

Environment

OS: mac os and linux boxes
CPU architecture: arm64 and x86
How docker service was installed:

Homebrew and via k3s

Command used to create docker container (run/create/compose/screenshot)

Docker logs

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 01-envfile: executing...
[cont-init.d] 01-envfile: exited 0.
[cont-init.d] 10-adduser: executing...
usermod: no changes

-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/


Brought to you by linuxserver.io
-------------------------------------

To support LSIO projects visit:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------

User uid:    911
User gid:    911
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 30-config: executing...
[cont-init.d] 30-config: exited 0.
[cont-init.d] 99-custom-files: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-files: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
Traceback (most recent call last):
  File "/usr/bin/beet", line 33, in <module>
    sys.exit(load_entry_point('beets==1.4.9', 'console_scripts', 'beet')())
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1266, in main
    _raw_main(args)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1249, in _raw_main
    subcommands, plugins, lib = _setup(options, lib)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1144, in _setup
    lib = _open_library(config)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1201, in _open_library
    get_path_formats(),
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 619, in get_path_formats
    path_formats.append((query, template(view.as_str())))
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 571, in template
    return Template(fmt)
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 581, in __init__
    self.compiled = self.translate()
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 614, in translate
    func = compile_func(
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 155, in compile_func
    prog = compile(mod, '<generated>', 'exec')
ValueError: Name node can't be used with 'None' constant
Traceback (most recent call last):
  File "/usr/bin/beet", line 33, in <module>
    sys.exit(load_entry_point('beets==1.4.9', 'console_scripts', 'beet')())
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1266, in main
    _raw_main(args)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1249, in _raw_main
    subcommands, plugins, lib = _setup(options, lib)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1144, in _setup
    lib = _open_library(config)
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 1201, in _open_library
    get_path_formats(),
  File "/usr/lib/python3.8/site-packages/beets/ui/__init__.py", line 619, in get_path_formats
    path_formats.append((query, template(view.as_str())))
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 571, in template
    return Template(fmt)
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 581, in __init__
    self.compiled = self.translate()
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 614, in translate
    func = compile_func(
  File "/usr/lib/python3.8/site-packages/beets/util/functemplate.py", line 155, in compile_func
    prog = compile(mod, '<generated>', 'exec')
ValueError: Name node can't be used with 'None' constant
[cmd] beet exited 1
[cont-finish.d] executing container finish scripts...
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-finish] sending all processes the KILL signal and exiting.

Remove downloads and music volumes from Dockerfile

Can the extra volumes (/downloads /music) be removed from the docker files so the user can decide how they want to setup the filesystem like they did in Sonarr?

Reference:
linuxserver/docker-sonarr#133

Files to change:

VOLUME /config /downloads /music

VOLUME /config /downloads /music

VOLUME /config /downloads /music

Adding support for Gmusic plugin

Feature request to add container support of gmusic plugin

Add apks:

  • libc-dev
  • libxml2-dev
  • python-dev
  • xmlsec-dev

Add python library

  • gmusicapi

(I can probably get to this in a day or so and submit a pull request)

Upgrade python 3.8 to 3.9?

linuxserver.io

There are some beets plugins that are broken in the current python v3.8. It has been reported that there are some fixes with the latest python 3.9. Would it be please upgrade it to the latest version?

[Question] nightly tag on docker hub

Hi all,

I came across the beets docker image and saw on docker hub that the nightly tag is about a month old.

Bildschirmfoto 2019-05-03 um 22 24 48

Not sure if my understanding is wrong, but shouldn't that image been updated nightly? I just double checked if there weren't any code changes on the beets repro but the latest head version of beets is just 1 day old.

Bildschirmfoto 2019-05-03 um 22 26 18

So I assume it is outdated? Or is there any different mechanism to get it updated. My goal was to run watchtower to updated daily to the latest head.

Thanks for all the effort you did with all the images!
m.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.