Docker: Administra tu colección de música con Beets

Introducción

Antes de nada, decir que Beets es un administrador para tu biblioteca de música y no un reproductor de música, aunque podemos añadir un plugin para reproducir música de forma muy básica. si el navegador soporta audio HTML5.

Si cuentas con una gran colección de música Beets te ayudará a tenerla bien ordenada ya que se encargará de importar la biblioteca y etiquetarla correctamente según tus gustos.

Beets es una herramienta increíble, escanea tu colección original y automáticamente borrará los metadatos y los sustituirá por los que encuentre en MusicBrainz corrigiendo cualquier inconsistencia que pueda haber encontrar en los metadatos de una pista, cComo errores tipográficos o errores ortográficos.

Resumiendo Beets es una herramienta de limpieza de datos que pasamos a nuestra biblioteca de música, obteniendo unos archivos limpios y etiquetados correctamente.

¿Por qué usar una herramienta como esta?

Generalmente obtenemos nuestra música de muchas maneras diferentes, ya sea comprándola en una tienda o descargándola de otras fuentes, así que lo más normal es que tengas muchos albines o canciones con diferentes metadatos, y es aquí donde entra a jugar Beets, volviendo a dar formato un único formato a todos los metadatos, además, controlas cómo quieres que tu música sea archivada y leída.

Beets está escrito en Python, por la tanto depende de las bibliotecas de Python para funcionar. Sin embargo, si no te quieres complicar la vida puedes usar la imagen de linuxserver, ahorrándote molestias y asegurando tener instaladas correctamente todas las dependencias necesarias.

Instalación

Simplemente ejecuta el siguiente comando, eso si, configura los volúmenes según se correspondan a tu equipo, en mi caso:

docker create \
  --name=beets \
  -e PUID=1000 \
  -e PGID=100 \
  -e TZ=Europe/Madrid \
  -p 8337:8337 \
  -v /mnt/datos/Docker/Config/beets:/config \
  -v /mnt/datos/Media/Música:/musica:/music \
  -v /mnt/datos/Descargas/:/downloads \
--restart unless-stopped \
  linuxserver/beets
  • config: es el directorio de configuración, contiene todos los archivos de configuración de Beets, incluida la base de datos de música. Los coloco en /mnt/datos/Docker/Config/beets de mi disco.

  • music: Es donde deseas reside tu música limpia una vez importada y con los nuevos metadatos. En mi caso, tengo mi colección de música en /mnt/datos/Media/Música.

  • downloads: es la carpeta donde actualmente residen los datos no limpios o que deseas importar.

  • GID y {UID son los ID de grupo y usuario a los que se asignará el contenedor en ejecución.

Una vez descargado y creado, el contenedor Beets se puede iniciar con:

docker start beets

Configurando beets

Beets tiene una gran cantidad de opciones para su configuración, pero también tiene una gran documentación sobre todos los comandos y opciones posibles.

Todos los ajustes se almacenan en un archivo llamado config.yaml , que reside en la carpeta /config del contenedor, si has creado un volumen para la carpeta /config puedes acceder al archivo de configuración y cambiarlo según tus preferencias.

De manera predeterminada, la imagen de linuxserver utiliza una configuración muy parecida a la siguiente, recuerda que la configuración reside en el fichero en config.yaml

plugins: fetchart embedart convert scrub replaygain lastgenre chroma web
directory: /music
library: /config/libreria_musica.blb
art_filename: albumart
threaded: yes
original_date: no
per_disc_numbering: no

convert:
    auto: no
    ffmpeg: /usr/bin/ffmpeg
    opts: -ab 320k -ac 2 -ar 48000
    max_bitrate: 320
    threads: 1

paths:
    default: $albumartist/$album%aunique{}/$track - $title
    singleton: Non-Album/$artist - $title
    comp: Compilations/$album%aunique{}/$track - $title
    albumtype_soundtrack: Soundtracks/$album/$track $title

import:
    write: yes
    copy: no
    move: yes
    resume: ask
    incremental: no
    quiet_fallback: skip
    timid: no
    log: /config/beet.log
    from_scratch: no

lastgenre:
    auto: yes
    source: album

embedart:
    auto: yes

fetchart:
    auto: yes

replaygain:
    auto: no

scrub:
    auto: yes

replace:
    '^\.': _
    '[\x00-\x1f]': _
    '[<>:"\?\*\|]': _
    '[\xE8-\xEB]': e
    '[\xEC-\xEF]': i
    '[\xE2-\xE6]': a
    '[\xF2-\xF6]': o
    '[\xF8]': o
    '\.$': _
    '\s+$': ''

web:
    host: 0.0.0.0
    port: 8337

Además como has podido observar viene con los plugins activados (fetchart embedart convert scrub replaygain lastgenre chroma web)

La configuración predeterminada :

Escanea la carpeta definida durante la creación del contenedor como /downloads en busca de música y raspa los metadatos desde MusicBrainz, si encuentra alguna discrepancia (nombres de pista mal escritos, por ejemplo), los corrige en función de un valor de similitud.

Los archivos se renombrarán de acuerdo con el patrón estándar para cada pista y álbum definido en el fichero de configuración ( default: $albumartist/$album%aunique{}/$track - $title ).

La música limpia se mueve ( move: yes ) a la carpeta de música designada ( directory: /music ).

Si aún no existe, Beets descargará la portada del álbum, archivo albumart.jpg para cada álbum que se importe.

Funcionamiento de beets

Tenemos dos formas de interactuar con Beets, enviando las ordenes correspondientes al contenedor

docker exec -u abc -it beets /bin/bash -c 'beet import /downloads'

O bien entrando en la shell del contenedor y empezar a trabajar con Beets

docker exec -it beets /bin/bash

Cuando Beets no puede encontrar información sobre un álbum, pregunta qué hacer, ya que así lo pedimos en nuestro fichero de configuración (resume: ask ), esto ocurrirá cuando Beets no pueda encontrar una coincidencia dentro del umbral de similitud, que por defecto está configurado en un 96% de probabilidad de coincidencia.

Al importar, Beets escanea cada álbum individualmente, extrae la información relevante en línea y luego compara los nuevos datos con cada pista por lo que si tu colección es muy extensa y tiene muchos errores en los metadatos prepara un par de tazas de cafe hasta que termines la importación.

Cuando se requiere la intervención manual deberemos decirle lo que deseamos hacer. Tendremos un conjunto de opciones en letras mayúsculas: A, M, S, U, T, G, E, I o B.

Es decir, puedes elegir una de las siguientes opciones:

  • A : Aplica los cambios sugeridos que se muestran y continua.
  • M : Mostrar más opciones.
  • S : Salta este álbum por completo y pasa al siguiente, no lo importa.
  • U : Importa el álbum sin cambiar ninguna etiqueta. Esta es una buena opción para álbumes que no están en la base de datos de MusicBrainz.
  • T : Importa el directorio como pistas, no como un álbum.
  • G : Agrupa pistas en este directorio por artista del álbum y álbum e importa los grupos como álbumes. Esto es útil si un directorio contiene varios álbumes.
  • E : Ingresa un artista y un álbum para usar como búsqueda en la base de datos. Usa esta opción si Beets no ha encontrado ninguna buena opción porque el álbum está equivocado o sin etiquetar.
  • I : Ingresa un ID de metadatos para usar como búsqueda en la base de datos. También puedes especificar varias ID separándolas por un espacio.
  • B : Cancela esta tarea de importación por completo. No se etiquetarán más álbumes; Beets se apaga inmediatamente. Sin embargo, la próxima vez que intentes importar el mismo directorio, Beets le preguntará si desea reanudar el etiquetado donde lo dejó.

Ten en cuenta que la opción con los [C]orchetes es la predeterminada, por lo que si quieres aplicar los cambios, puedes presionar la tecla de retorno sin ingresar nada.

Lo mismo ocurre si Beets encuentran un álbum o pista duplicado en la colección.

La configuración que tengo Beets dice que los archivos de un álbum deben nombrarse como $track - $title , lo que significa que la importación borrará los datos agregando un guión entre el número de pista y su nombre.

Según la configuración de mi fichero config.yaml, Beets borra cualquier carácter que pueda alterar los estándares de nombres ficheros(: / etc.).

Añadir plugins

Simplemente agrega el nombre del complemento a la sección plugins: en la parte superior de config.yaml .

Actualizando datos ya importados

Si ha pasado un tiempo desde nuestra última importación, los metadatos pueden haber cambiado en MusicBrainz. Podemos ejecutar una actualización para asegurarnmos de que los datos se mantengan actualizados:

docker exec -it beets /bin/bash -c 'beet update'

Si realizamos cambios en la configuración que alteren la estructura física de los archivos de la colección, deberemos ejecutar una nueva importación en la carpeta de música:

docker exec -it beets /bin/bash -c 'beet import /music'

Aún hay muchos mas

Esto es simplemente un poco de todo lo que puede hacer Beets por nuestra colección de música, tienes muchas opciones, plugins y configuraciones, te vuelvo a dejar un enlace a su documentación pos si quieres completar este articulo

Espero que te haya gustado pasa un buen día…🐧

Referencias: