Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Beets Music Tagger Plugin for Unraid 5.x

Featured Replies

  • Author

 

Ok thanks, will be away for work for the next day or so, so may wait until you get to update.

 

Will try your edit tomorrow night.

 

Thanks

Updated plugin on GitHub to 1.4b.

 

Changed max field length for PATH_DEFAULT, PATH_SINGLETON, PATH_COMPILATION to 120 chars (from 60). 

  • Replies 77
  • Views 32k
  • Created
  • Last Reply

 

Thanks overbyrn, just got around to having another look.

 

Seems you have updated and it looks like that fixed things.

 

Cheers for that.

  • 3 weeks later...

 

No sure if I am misunderstanding the way this works, but I have flac source files, that I want to copy tagged to -> /mnt/user/My Data/MusicTaggedflac

 

I have convert set to 32ok mp3 to here -> /mnt/user/My Data/MusicTaggedmp3

 

I was expecting my flac files to get tagged and placed in the flac directory above, while the flac files were also converted to mp3 and place in the mp3 directory too.

 

Have I misunderstood, as I import the files and it places the converted mp3's into -> /mnt/user/My Data/MusicTaggedflac  :o

 

 

  • Author

 

No sure if I am misunderstanding the way this works, but I have flac source files, that I want to copy tagged to -> /mnt/user/My Data/MusicTaggedflac

 

I have convert set to 32ok mp3 to here -> /mnt/user/My Data/MusicTaggedmp3

 

I was expecting my flac files to get tagged and placed in the flac directory above, while the flac files were also converted to mp3 and place in the mp3 directory too.

 

Have I misunderstood, as I import the files and it places the converted mp3's into -> /mnt/user/My Data/MusicTaggedflac  :o

 

It's probably best if you have a look through the official beets documentation especially the convert plugin section.  Suspect this will answer your questions better than I can.  The plugin is just a pretty way of configuring the config.yaml file which beets relies on.  It might be that something is missing or needs tweaking to make it work the way you expect.  Once you've had a chance to look over the docs, let me know if there's anything which the plugin could do better.

 

 

Regards,

overbyrn

Hi there

 

I've read the docs before posting, as I wasn't sure whether I misunderstanding the action.

 

I found out that when convert is selected in the plugin, it converts and deletes the original files, while placing the newly converted files into the same directory as the original files.

 

Whereas, if I first tag the flac files and then run 'beet convert' then beet assumes the correct directory to create the converted files -> /mnt/user/My Data/MusicTaggedmp3 which it must be getting from your plugin setting that directory in the config file.

 

The options for convert are as follows;

 

Usage: beet convert [options]

 

Options:

  -h, --help            show this help message and exit

  -a, --album          choose albums instead of tracks

  -t THREADS, --threads=THREADS

                        change the number of threads,

                        defaults to maximum available processors

  -k, --keep-new        keep only the converted

                        and move the old files

  -d DEST, --dest=DEST  set the destination directory

 

So it 'seems' by the way it is working, is that if conversion is enabled in the plugin, it is somehow running the '-k' option by default, rather then converting and leaving the originals in place?

 

For people with a flac library and convert on the fly for iPod etc, then not having the 'k option enabled is preferred....

 

Regards

 

Edit: It would also be great (your time permitting) to have access to set the embedding of cover art on 'embed: true' and the smartplaylist plugin :) But I apprecaite I may be coming across as ungrateful! Thats not the intention, your plugin has introduced me to beet and I am very glad it did :)

  • 2 months later...

how do we update to beets 1.3.1 with this plugin?

  • Author

how do we update to beets 1.3.1 with this plugin?

Reboot or reinstall the plugin.  The plugin will always get the latest available version of Beets as known to the Python package tool Pip.  Which currently is version 1.3.1

 

Perfect, thanks!

  • Author

So it 'seems' by the way it is working, is that if conversion is enabled in the plugin, it is somehow running the '-k' option by default, rather then converting and leaving the originals in place?

 

For people with a flac library and convert on the fly for iPod etc, then not having the 'k option enabled is preferred....

 

Regards

 

Edit: It would also be great (your time permitting) to have access to set the embedding of cover art on 'embed: true' and the smartplaylist plugin :) But I apprecaite I may be coming across as ungrateful! Thats not the intention, your plugin has introduced me to beet and I am very glad it did :)

 

Very late to reply, but I will make the changes you recommend.  v1.3.1 introduced the option to convert between a number of formats and so now would probably be a good time for me to review the settings made available in the webgu, add in the necessary 'format' entry to the convert plugin and perhaps tinker with a few others.

 

Happy to hear from anyone as to whether any of the current settings need tweaking or what other options could be added.  For instance, is it worth enabling other plugins such as EchoNest Tempo Plugin to obtain and store the tracks tempo in BPM field, or newer options like the ability to write older ID3v2.3 tags instead of default ID3v2.4?

 

Hello mate!

 

Again, no criticisms from me, love all your plugins! One though, on the plugin side... instead of having to ask for you to re-write the plugin to include a specific beets plugin, possibly add a text field or the like so we can just add it from the unRAID WebGUI and then good to go?!

 

Just a thought, slightly hungover so it might not be the best one! :)

 

Alex

  • Author

Hello mate!

 

Again, no criticisms from me, love all your plugins! One though, on the plugin side... instead of having to ask for you to re-write the plugin to include a specific beets plugin, possibly add a text field or the like so we can just add it from the unRAID WebGUI and then good to go?!

 

Just a thought, slightly hungover so it might not be the best one! :)

 

Alex

Don't forget you can also directly modify /boot/config/plugins/beets/config.yaml.  Config changes made to beets via the plugin webgui settings page only affects the respective entries in config.yaml.

 

So for example, if you wanted to customise your installation of beets by adding another plugin, you can add that entry to the config file;

 

eg.

before:

plugins: fetchart embedart convert scrub replaygain lastgenre chroma discogs

after adding "zero" plugin;

plugins: fetchart embedart convert scrub replaygain lastgenre chroma discogs zero

 

Then you'd need to add in the zero plugin specific config entries at the bottom of the file;

 

before:

<...>
replaygain:
    auto: yes

 

after;

 

<...>
replaygain:
    auto: yes

zero:
    fields: month day genre comments
    comments: [EAC, LAME, from.+collection, 'ripped by']
    genre: [rnb, 'power metal']

 

Any changes you make to the plugin from the gui setting page wont modify the "plugins:" config line or other config entries that it doesn't know about.

 

The above example probably holds true for anything that doesn't have a new dependency.  For instance, in the case of EchoNest plugin, it needs pyechonest python module, so a change would be needed to the base plugin code so that this is also brought in during installation.  I think this would make it pretty hard to modify the gui by adding a text field as it wouldn't account for other changes which might be needed.

 

 

 

Regards,

overbyrn

 

All makes perfect sense!!

 

Thanks again dude :)

  • 4 weeks later...

Great plugin.

 

Unfortunately it does not work with python 2.6.6.

I had to uninstall 2.7.3 as it broke functionality in other plugins.

 

Is it possible to compile this with Python 2.6.6?

  • Author

Great plugin.

 

Unfortunately it does not work with python 2.6.6.

I had to uninstall 2.7.3 as it broke functionality in other plugins.

 

Is it possible to compile this with Python 2.6.6?

I'm confused.  It sounds as if you are saying that you think beets uses python 2.7.x?  The beets plugin uses python 2.6.6.  If you have python 2.7.3 installing and breaking other plugins, then it's coming in from somewhere else.

I'm having the same issue,

I think what has happened is

Beets was updated, and some code in beets was modified to only work with python 2.7 (although on the beets site they state that it will work with python 2.6)

The team at beets must yet to have realised this error.

 

I installed beets and python 2.7 on my windows machine for now. until a fix.

 

Cheers,

Brett

  • Author

I'm having the same issue,

I think what has happened is

Beets was updated, and some code in beets was modified to only work with python 2.7 (although on the beets site they state that it will work with python 2.6)

The team at beets must yet to have realised this error.

 

I installed beets and python 2.7 on my windows machine for now. until a fix.

 

Cheers,

Brett

Ahh, that makes more sense.  Just had a tinker with a virgin dev unraid VM and indeed beets barfed upon import.  No expert but the python traceback seemed to have an issue within the lastgenre plugin.  On a whim I set "Use LastFM Genre" to no and re-ran.  This time the import worked okay.

 

Might be a problem with last genre plugin.

 

 

Confirmed, I also disabled the lastgenre plugin, ran an import and had no errors!

  • 2 weeks later...

Can you advise how I disable the last genre plugin?

 

Thanks

 

NM found it.

 

Still not working after disabling LastFM Genre plugin.

...

Got it working.

  • Author

Can you advise how I disable the last genre plugin?

 

Thanks

 

NM found it.

 

Still not working after disabling LastFM Genre plugin.

Please provide a log of the error you are getting

Tried searching and i know it's a dumb question, but what do you substitute for spaces in a folder name on the command line?

 

ex. "/mnt/user/music/The Black Keys" stops after "The"

 

 

Tried searching and i know it's a dumb question, but what do you substitute for spaces in a folder name on the command line?

 

ex. "/mnt/user/music/The Black Keys" stops after "The"

In Linux, you can often just quote the whole thing. In your example you surrounded it with quotes but did you really try it that way?

 

Another way to do it is to just put a backslash \ before any special characters so your example would be

 

/mnt/user/music/The\ Black\ Keys

 

In Linux, you can often just quote the whole thing. In your example you surrounded it with quotes but did you really try it that way?

 

Another way to do it is to just put a backslash \ before any special characters so your example would be

 

/mnt/user/music/The\ Black\ Keys

 

double quotes worked perfectly. think I tried everything but those. Thank you

  • 3 weeks later...

So it 'seems' by the way it is working, is that if conversion is enabled in the plugin, it is somehow running the '-k' option by default, rather then converting and leaving the originals in place?

 

For people with a flac library and convert on the fly for iPod etc, then not having the 'k option enabled is preferred....

 

Regards

 

Edit: It would also be great (your time permitting) to have access to set the embedding of cover art on 'embed: true' and the smartplaylist plugin :) But I apprecaite I may be coming across as ungrateful! Thats not the intention, your plugin has introduced me to beet and I am very glad it did :)

 

Very late to reply, but I will make the changes you recommend.  v1.3.1 introduced the option to convert between a number of formats and so now would probably be a good time for me to review the settings made available in the webgu, add in the necessary 'format' entry to the convert plugin and perhaps tinker with a few others.

 

Happy to hear from anyone as to whether any of the current settings need tweaking or what other options could be added.  For instance, is it worth enabling other plugins such as EchoNest Tempo Plugin to obtain and store the tracks tempo in BPM field, or newer options like the ability to write older ID3v2.3 tags instead of default ID3v2.4?

 

Thats great news, thanks for your efforts and time!

 

I also wondered if changing the source file to the github latest version would cause any issues with your plugin?

 

I'm having issues with 1.3.2 beets and the dev has fixed my bug, but I cannot try the latest version, while waiting for him to release 1.3.3 :(

 

The link is -> pip install https://github.com/sampsyo/beets/tarball/master.

 

Info -> https://beets.readthedocs.org/en/v1.3.2/faq.html#run-the-latest-source-version-of-beets

  • 2 months later...

Hi, I've recently grabbed this plg and tried to install.

All looks good inthe web gui but I seem to have problems with setuptools, here's output from a manual installplg:

installplg /boot/config/plugins/beets_overbyrn.plg
installing plugin: beets_overbyrn
file /tmp/plugin-prepare: successfully wrote INLINE file contents
  /bin/bash /tmp/plugin-prepare ... success
file /boot/config/plugins/beets/beets.png: already exists
file /boot/config/plugins/images/device_status.png: already exists
file /boot/config/plugins/images/new_config.png: already exists
file /boot/config/plugins/images/information.png: already exists
file /boot/packages/python-2.6.6-i486-1.txz: already exists
  upgradepkg --install-new /boot/packages/python-2.6.6-i486-1.txz ...
+==============================================================================
| Skipping package python-2.6.6-i486-1 (already installed)
+==============================================================================


success
file /boot/packages/sqlite-3.7.14.1-i486-1_slack14.0.txz: already exists
  upgradepkg --install-new /boot/packages/sqlite-3.7.14.1-i486-1_slack14.0.txz ...
+==============================================================================
| Skipping package sqlite-3.7.14.1-i486-1_slack14.0 (already installed)
+==============================================================================


success
file /boot/packages/mp3gain-1.4.6-i486-3sl.txz: already exists
  upgradepkg --install-new /boot/packages/mp3gain-1.4.6-i486-3sl.txz ...
+==============================================================================
| Skipping package mp3gain-1.4.6-i486-3sl (already installed)
+==============================================================================


success
file /boot/config/plugins/beets/ffmpeg.static.32bit.2013-04-06.tar.gz: already exists
file /boot/config/plugins/beets/setuptools-0.9.8-py2.6.egg: already exists
file /boot/config/plugins/beets/pip-1.4.tar.gz: already exists
file /boot/config/plugins/beets/fpcalc: already exists
file /tmp/plugin-cleanup: successfully wrote INLINE file contents
  /bin/bash /tmp/plugin-cleanup ... success
file /boot/config/plugins/beets/beets.sh: already exists
file /boot/config/plugins/beets/config.yaml: already exists
file /boot/config/plugins/beets/beets.cfg: already exists
file /tmp/plugin-chkcfg: successfully wrote INLINE file contents
  /bin/bash /tmp/plugin-chkcfg ... success
file /etc/rc.d/rc.beets: successfully wrote INLINE file contents
  successfully changed file mode
file /usr/local/emhttp/plugins/beets/beets.png: successfully copied LOCAL file
file /usr/local/emhttp/plugins/beets/device_status.png: successfully copied LOCAL file
file /usr/local/emhttp/plugins/beets/new_config.png: successfully copied LOCAL file
file /usr/local/emhttp/plugins/beets/information.png: successfully copied LOCAL file
file /usr/local/emhttp/plugins/beets/beets.php: successfully wrote INLINE file contents
file /usr/local/emhttp/plugins/beets/beetsctl.php: successfully wrote INLINE file contents
file /tmp/plugin-install: successfully wrote INLINE file contents
  /bin/bash /tmp/plugin-install ... Processing setuptools-0.9.8-py2.6.egg
Removing /usr/lib/python2.6/site-packages/setuptools-0.9.8-py2.6.egg
Copying setuptools-0.9.8-py2.6.egg to /usr/lib/python2.6/site-packages
setuptools 0.9.8 is already the active version in easy-install.pth
Installing easy_install script to /usr/bin
Installing easy_install-2.6 script to /usr/bin

Installed /usr/lib/python2.6/site-packages/setuptools-0.9.8-py2.6.egg
Processing dependencies for setuptools==0.9.8
Finished processing dependencies for setuptools==0.9.8
pip-1.4/
pip-1.4/AUTHORS.txt
pip-1.4/CHANGES.txt
pip-1.4/docs/
pip-1.4/docs/configuration.rst
pip-1.4/docs/cookbook.rst
pip-1.4/docs/development.rst
pip-1.4/docs/index.rst
pip-1.4/docs/installing.rst
pip-1.4/docs/logic.rst
pip-1.4/docs/news.rst
pip-1.4/docs/other-tools.rst
pip-1.4/docs/quickstart.rst
pip-1.4/docs/usage.rst
pip-1.4/LICENSE.txt
pip-1.4/MANIFEST.in
pip-1.4/pip/
pip-1.4/pip/__init__.py
pip-1.4/pip/__main__.py
pip-1.4/pip/backwardcompat/
pip-1.4/pip/backwardcompat/__init__.py
pip-1.4/pip/backwardcompat/ssl_match_hostname.py
pip-1.4/pip/basecommand.py
pip-1.4/pip/baseparser.py
pip-1.4/pip/cacert.pem
pip-1.4/pip/cmdoptions.py
pip-1.4/pip/commands/
pip-1.4/pip/commands/__init__.py
pip-1.4/pip/commands/bundle.py
pip-1.4/pip/commands/completion.py
pip-1.4/pip/commands/freeze.py
pip-1.4/pip/commands/help.py
pip-1.4/pip/commands/install.py
pip-1.4/pip/commands/list.py
pip-1.4/pip/commands/search.py
pip-1.4/pip/commands/show.py
pip-1.4/pip/commands/uninstall.py
pip-1.4/pip/commands/unzip.py
pip-1.4/pip/commands/wheel.py
pip-1.4/pip/commands/zip.py
pip-1.4/pip/download.py
pip-1.4/pip/exceptions.py
pip-1.4/pip/index.py
pip-1.4/pip/locations.py
pip-1.4/pip/log.py
pip-1.4/pip/pep425tags.py
pip-1.4/pip/req.py
pip-1.4/pip/runner.py
pip-1.4/pip/status_codes.py
pip-1.4/pip/util.py
pip-1.4/pip/vcs/
pip-1.4/pip/vcs/__init__.py
pip-1.4/pip/vcs/bazaar.py
pip-1.4/pip/vcs/git.py
pip-1.4/pip/vcs/mercurial.py
pip-1.4/pip/vcs/subversion.py
pip-1.4/pip/vendor/
pip-1.4/pip/vendor/__init__.py
pip-1.4/pip/vendor/distlib/
pip-1.4/pip/vendor/distlib/__init__.py
pip-1.4/pip/vendor/distlib/_backport/
pip-1.4/pip/vendor/distlib/_backport/__init__.py
pip-1.4/pip/vendor/distlib/_backport/misc.py
pip-1.4/pip/vendor/distlib/_backport/shutil.py
pip-1.4/pip/vendor/distlib/_backport/sysconfig.py
pip-1.4/pip/vendor/distlib/_backport/tarfile.py
pip-1.4/pip/vendor/distlib/compat.py
pip-1.4/pip/vendor/distlib/database.py
pip-1.4/pip/vendor/distlib/index.py
pip-1.4/pip/vendor/distlib/locators.py
pip-1.4/pip/vendor/distlib/manifest.py
pip-1.4/pip/vendor/distlib/markers.py
pip-1.4/pip/vendor/distlib/metadata.py
pip-1.4/pip/vendor/distlib/resources.py
pip-1.4/pip/vendor/distlib/scripts.py
pip-1.4/pip/vendor/distlib/util.py
pip-1.4/pip/vendor/distlib/version.py
pip-1.4/pip/vendor/distlib/wheel.py
pip-1.4/pip/vendor/html5lib/
pip-1.4/pip/vendor/html5lib/__init__.py
pip-1.4/pip/vendor/html5lib/constants.py
pip-1.4/pip/vendor/html5lib/filters/
pip-1.4/pip/vendor/html5lib/filters/__init__.py
pip-1.4/pip/vendor/html5lib/filters/_base.py
pip-1.4/pip/vendor/html5lib/filters/alphabeticalattributes.py
pip-1.4/pip/vendor/html5lib/filters/inject_meta_charset.py
pip-1.4/pip/vendor/html5lib/filters/lint.py
pip-1.4/pip/vendor/html5lib/filters/optionaltags.py
pip-1.4/pip/vendor/html5lib/filters/sanitizer.py
pip-1.4/pip/vendor/html5lib/filters/whitespace.py
pip-1.4/pip/vendor/html5lib/html5parser.py
pip-1.4/pip/vendor/html5lib/ihatexml.py
pip-1.4/pip/vendor/html5lib/inputstream.py
pip-1.4/pip/vendor/html5lib/sanitizer.py
pip-1.4/pip/vendor/html5lib/serializer/
pip-1.4/pip/vendor/html5lib/serializer/__init__.py
pip-1.4/pip/vendor/html5lib/serializer/htmlserializer.py
pip-1.4/pip/vendor/html5lib/tokenizer.py
pip-1.4/pip/vendor/html5lib/treebuilders/
pip-1.4/pip/vendor/html5lib/treebuilders/__init__.py
pip-1.4/pip/vendor/html5lib/treebuilders/_base.py
pip-1.4/pip/vendor/html5lib/treebuilders/dom.py
pip-1.4/pip/vendor/html5lib/treebuilders/etree.py
pip-1.4/pip/vendor/html5lib/treebuilders/etree_lxml.py
pip-1.4/pip/vendor/html5lib/treewalkers/
pip-1.4/pip/vendor/html5lib/treewalkers/__init__.py
pip-1.4/pip/vendor/html5lib/treewalkers/_base.py
pip-1.4/pip/vendor/html5lib/treewalkers/dom.py
pip-1.4/pip/vendor/html5lib/treewalkers/etree.py
pip-1.4/pip/vendor/html5lib/treewalkers/genshistream.py
pip-1.4/pip/vendor/html5lib/treewalkers/lxmletree.py
pip-1.4/pip/vendor/html5lib/treewalkers/pulldom.py
pip-1.4/pip/vendor/html5lib/trie/
pip-1.4/pip/vendor/html5lib/trie/__init__.py
pip-1.4/pip/vendor/html5lib/trie/_base.py
pip-1.4/pip/vendor/html5lib/trie/datrie.py
pip-1.4/pip/vendor/html5lib/trie/py.py
pip-1.4/pip/vendor/html5lib/utils.py
pip-1.4/pip/vendor/six.py
pip-1.4/pip/wheel.py
pip-1.4/pip.egg-info/
pip-1.4/pip.egg-info/dependency_links.txt
pip-1.4/pip.egg-info/entry_points.txt
pip-1.4/pip.egg-info/not-zip-safe
pip-1.4/pip.egg-info/PKG-INFO
pip-1.4/pip.egg-info/requires.txt
pip-1.4/pip.egg-info/SOURCES.txt
pip-1.4/pip.egg-info/top_level.txt
pip-1.4/PKG-INFO
pip-1.4/PROJECT.txt
pip-1.4/README.rst
pip-1.4/setup.cfg
pip-1.4/setup.py
Traceback (most recent call last):
  File "setup.py", line 5, in <module>
    from setuptools import setup, find_packages
ImportError: No module named setuptools
/tmp/plugin-install: line 13: pip: command not found
/tmp/plugin-install: line 16: pip: command not found
/tmp/plugin-install: line 19: pip: command not found
/tmp/plugin-install: line 22: pip: command not found
ffmpeg
success
file /usr/local/emhttp/plugins/beets/beets.page: successfully wrote INLINE file contents
file /var/log/plugins/beets: successfully wrote INLINE file contents
file /tmp/plugin-development: successfully wrote INLINE file contents
  /bin/bash /tmp/plugin-development ... success
plugin successfully installed

 

I have tried performing the steps from the plg manually and while setuptools' egg file is there and no errors are returned when I run it, I can't install PIP..

 

Any tips greatfully received, I'm running beets remotely at the moment and while it's working perfectly, it' a bit sluggish :(

 

Unraid 5.0.5, beets_overbyrn.plg v.1.5

  • 4 months later...

Is there any chance of getting an Unraid 6 plugin version?

Archived

This topic is now archived and is closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.