Create Flexible Attributes from ID3

I started using MusicBrainz Picard several years before I became aware of beets. In that time, I had created scripts in Picard to add custom ID3 fields. (As an example, one field indicates whether the source of the file was CD, vinyl, digital, or other). My current pipeline for personal use is MP3 → Picard → beets.

I would like to use these custom ID3 fields for file naming purposes in beets. If I understand correctly, I need flexible attributes for the file naming to work.

Is my understanding about needing the flexible attributes (instead of custom ID3 fields) correct? If so, is there an established method to do this? I’m willing to write a plugin if need be, but I’d rather not duplicate existing efforts if they exist.

You can supply flexible attributes during import (either put in config.yaml or on cli beet import ... --set my_attribute=my_value ...

or oven after your have imported: beet mofify -a my_attribute='my value' → -a sets for the whole album. leaving it out sets for single tracks.

Those values can be used as $my_attribute in your config.yaml paths configurations:

https://beets.readthedocs.io/en/latest/reference/config.html#path-format-config

I would like 'my value' to be taken from (non-standard) ID3 fields already present in the MP3 file. For example, I have a field ‘Collection Origin’ that I would like to pull from. As best as I can tell, the import and modify commands expect the value to be a string. Is there a way to use ID3 fields as the value?

Hi! To do this, you currently need to create a special plugin to add custom mappings to ID3 tags:
https://beets.readthedocs.io/en/stable/dev/plugins.html#extend-mediafile