# Create Flexible Attributes from ID3

**URL:** <https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300>\
**Category:** Help\
**Created:** [March 20, 2023, 5:25pm UTC](https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300 "2023-03-20T17:25:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![NorthWest](https://avatars.discourse-cdn.com/v4/letter/n/e0b2c6/32.png) [@NorthWest](https://discourse.beets.io/u/NorthWest)\
**Post date:** [March 20, 2023, 5:25pm UTC](https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300/1 "2023-03-20T17:25:57Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![jojo](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.beets.io/jojo/32/709_2.png) [@jojo](https://discourse.beets.io/u/jojo)\
**Post date:** [March 21, 2023, 4:00pm UTC](https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300/2 "2023-03-21T16:00:04Z")

</div>

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](https://beets.readthedocs.io/en/latest/reference/config.html#path-format-config)

---

<div class="post-metadata">

**Author:** ![NorthWest](https://avatars.discourse-cdn.com/v4/letter/n/e0b2c6/32.png) [@NorthWest](https://discourse.beets.io/u/NorthWest)\
**Post date:** [March 22, 2023, 12:22am UTC](https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300/3 "2023-03-22T00:22:37Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![adrian](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.beets.io/adrian/32/4_2.png) [@adrian](https://discourse.beets.io/u/adrian)\
**Post date:** [March 25, 2023, 12:39am UTC](https://discourse.beets.io/t/create-flexible-attributes-from-id3/2300/4 "2023-03-25T00:39:47Z")

</div>

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](https://beets.readthedocs.io/en/stable/dev/plugins.html#extend-mediafile)
