# Do Events actually have annotations?

**URL:** <https://community.metabrainz.org/t/do-events-actually-have-annotations/814247>\
**Category:** Development\
**Created:** [February 19, 2026, 9:25am UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247 "2026-02-19T09:25:23Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 9:25am UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/1 "2026-02-19T09:25:23Z")

</div>

It mentions it [here](https://musicbrainz.org/doc/Event), but I’ve been doing comments in the setlist. Is this actually in the schema and not implemented on the [event edit page](https://musicbrainz.org/event/ccc1314e-d367-42c2-853b-930916584a8a/edit)?

---

<div class="post-metadata">

**Author:** ![elomatreb](https://community.metabrainz.org/user_avatar/community.metabrainz.org/elomatreb/32/44009_2.png) [@elomatreb](https://community.metabrainz.org/u/elomatreb)\
**Post date:** [February 19, 2026, 10:10am UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/2 "2026-02-19T10:10:30Z")

</div>

Events are similar to artists in that you don’t create the annotation from the main edit form, but with a separate “Add annotation” link from the sidebar.

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 10:12am UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/3 "2026-02-19T10:12:14Z")

</div>

I did not see that, thanks

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 11:09am UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/4 "2026-02-19T11:09:32Z")

</div>

Well… I found a bug in [musicbrainzngs](https://github.com/alastair/python-musicbrainzngs/tree/master). It doesn’t think ‘annotation’ is [proper include for an event](https://musicbrainz.org/ws/2/event/ccc1314e-d367-42c2-853b-930916584a8a?inc=annotation+area-rels+place-rels) even though it is. A tiny edit later and… I still have something broke. It’s late, I’m tired..

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 12:03pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/5 "2026-02-19T12:03:12Z")

</div>

mbxml.py in musicbrainzngs needed a tiny edit, too. Ok, now I can sleep…

```python
>>> metadata = dict()
>>> perfvars.add_album_performance_metadata(metadata, '99301bda-f462-41d3-ae27-658b57772dda')
>>> pprint.pp(metadata,width=120)
{'~release_performance1_name': 'Madison Square Garden, New York, NY',
 '~release_performance1_date': '1973-07-28',
 '~release_performance1_annotation': 'part of the Song Remains the Same taping',
 '~release_performance1_location_addr': '4 Pennsylvania Plaza, New York, NY 10001',
 '~release_performance1_location_gps': '40.750556,-73.993611',
 '~release_performance1_location': 'Madison Square Garden',
 '~release_performance1_location_unwound': 'Madison Square Garden, Midtown Manhattan, Manhattan, New York, US-NY, US',
...
 '~release_performance_count': 3}
>>> 

```

---

<div class="post-metadata">

**Author:** ![reosarevok](https://community.metabrainz.org/user_avatar/community.metabrainz.org/reosarevok/32/69228_2.png) [@reosarevok](https://community.metabrainz.org/u/reosarevok)\
**Post date:** [February 19, 2026, 1:01pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/6 "2026-02-19T13:01:57Z")

</div>

That is basically abandonware by now, so I’m not surprised - I expect it has a lot more stuff missing.

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 6:02pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/7 "2026-02-19T18:02:47Z")

</div>

Hi, are there dox that describe how to use Picard’s [album.tagger.webservice.\_get\_by\_id()](https://github.com/metabrainz/picard/blob/540bce51d52331e9c608fcc8386d4573031b7682/picard/webservice/api_helpers.py#L132) for a plugin? Or is this “Use the source, Luke”? With the name starting with an underscore, that makes it private, right?

Basically, I need to redo [this file](https://github.com/davygrvy/perfvars/blob/main/cache.py) for webservice. I’m imagining something overly complex with condition waits

```python
def get_release_group (ws, mbid):
    
    # if pending condition.wait
    # if not error return release_group_cache[mbid]
    # elif timeout retry? 
    # else
    # set pending
    # ws.get_release_group_by_id(...,on_complete,...)
    #    
    # def on_complete(response, reply, error):
    # if not error
    # release_group_cache[mbid] = response['release_group']
    # unset pending
    # condition.set ?
    pass

```

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 19, 2026, 7:56pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/8 "2026-02-19T19:56:21Z")

</div>

Oh, I can get [URLs](https://musicbrainz.org/ws/2/event/ccc1314e-d367-42c2-853b-930916584a8a?inc=annotation+area-rels+place-rels+url-rels), too. This is fancy. Cover art, next? Maybe 🙂

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 20, 2026, 1:55pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/9 "2026-02-20T13:55:43Z")

</div>

Should I just build my own?

```python
from picard.webservice.api_helpers import APIHelper

class PluginCachingWebService(APIHelper):
    def __init__ (self, webservice):
       super(). __init__ (webservice)
       self.release_group_cache = dict()
       self.release_cache = dict()
       self.event_cache = dict()
       self.place_cache = dict()
       self.area_cache = dict()
    def clear_cache(self):
       del self.release_group_cache,self.release_cache,self.event_cache,self.place_cache,self.area_cache
       self.release_group_cache = dict()
       self.release_cache = dict()
       self.event_cache = dict()
       self.place_cache = dict()
       self.area_cache = dict()
    def get_release_by_id(self,mbid):
       pass
    def get_release_group_by_id(self,mbid):
       pass
    def get_event_by_id(self,mbid):
       pass
    def get_place_by_id(self,mbid):
       pass
    def get_area_by_id(self,mbid):
       pass

ourWS = PluginCachingWebService(album.tagger.webservice)
event = ourWS.get_event_by_id(mbid)

```

@Sophist I need your advice on what to do about replacing musicbrainzngs in a [plugin](https://github.com/davygrvy/perfvars/tree/main)

It’s working quite well pulling apart all the events on [this release](https://musicbrainz.org/release/18f55f2f-daae-40a1-9d5c-0842e7dc030a)

```python
davygrvy@puukukui:~/PlayArea/MB stuff$ python3
Python 3.10.12 (main, Jan 26 2026, 14:55:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pprint
>>> import perfvars
>>> metadata = dict()
>>> perfvars.add_album_performance_metadata(metadata, '18f55f2f-daae-40a1-9d5c-0842e7dc030a')
>>> pprint.pp(metadata,width=120)
{'~release_performance1_name': "Alexis Korner's Rhythm and Blues / World Service",
 '~release_performance1_date': '1969-03-19',
 '~release_performance1_homepage': 'https://www.ledzeppelin.com/show/maida-vale-bbc-studios-march-19-1969',
 '~release_performance1_location_addr': 'Delaware Road, London W9 2LG, United Kingdom',
 '~release_performance1_location_gps': '51.5258,-0.1904',
 '~release_performance1_location': 'Maida Vale Studios: Studio 4',
 '~release_performance1_location_unwound': 'Maida Vale Studios: Studio 4, Maida Vale Studios, BBC Studios, London, '
                                           'GB-ENG, GB',
 '~release_performance2_name': "Chris Grant's Tasty Pop Sundae",
 '~release_performance2_date': '1969-06-16',
 '~release_performance2_homepage': 'https://www.ledzeppelin.com/show/aeolian-hall-bbc-june-16-1969',
 '~release_performance2_location_addr': 'New Bond Street',
 '~release_performance2_location': 'Aeolian Hall Studio 2',
 '~release_performance2_location_unwound': 'Aeolian Hall Studio 2, Aeolian Hall, BBC Studios, London, GB-ENG, GB',
 '~release_performance3_name': 'In Concert with John Peel (BBC)',
 '~release_performance3_date': '1971-04-01',
 '~release_performance3_homepage': 'https://www.ledzeppelin.com/show/paris-cinema-theatre-april-1-1971',
 '~release_performance3_location_addr': '12 Lower Regent Street',
 '~release_performance3_location_gps': '51.508389,-0.133389',
 '~release_performance3_location': 'Paris Theatre',
 '~release_performance3_location_unwound': 'Paris Theatre, BBC Studios, London, GB-ENG, GB',
 '~release_performance4_name': "John Peel's Top Gear",
 '~release_performance4_date': '1969-03-03',
 '~release_performance4_homepage': 'https://www.ledzeppelin.com/show/playhouse-theatre-march-3-1969',
 '~release_performance4_location_addr': 'Northumberland Ave, London WC2N 5DE, UK',
 '~release_performance4_location_gps': '51.506944,-0.123611',
 '~release_performance4_location': 'Playhouse Theatre',
 '~release_performance4_location_unwound': 'Playhouse Theatre, BBC Studios, London, GB-ENG, GB',
 '~release_performance5_name': "John Peel's Top Gear",
 '~release_performance5_date': '1969-06-24',
 '~release_performance5_homepage': 'https://www.ledzeppelin.com/show/maida-vale-bbc-studios-june-24-1969',
 '~release_performance5_location_addr': 'Delaware Road, London W9 2LG, United Kingdom',
 '~release_performance5_location_gps': '51.5258,-0.1904',
 '~release_performance5_location': 'Maida Vale Studios: Studio 4',
 '~release_performance5_location_unwound': 'Maida Vale Studios: Studio 4, Maida Vale Studios, BBC Studios, London, '
                                           'GB-ENG, GB',
 '~release_performance6_name': 'Julie Felix Show',
 '~release_performance6_date': '1970-04-23',
 '~release_performance6_homepage': 'https://www.ledzeppelin.com/show/bbc-tv-lime-grove-studios-april-23-1970',
 '~release_performance6_location_addr': "Shepherd's Bush, West London, England",
 '~release_performance6_location_gps': '51.503611,-0.227222',
 '~release_performance6_location': 'BBC Lime Grove',
 '~release_performance6_location_unwound': 'BBC Lime Grove, BBC Studios, London, GB-ENG, GB',
 '~release_performance7_name': 'Radio One In Concert',
 '~release_performance7_date': '1969-06-27',
 '~release_performance7_homepage': 'https://www.ledzeppelin.com/show/playhouse-theatre-june-27-1969',
 '~release_performance7_location_addr': 'Northumberland Ave, London WC2N 5DE, UK',
 '~release_performance7_location_gps': '51.506944,-0.123611',
 '~release_performance7_location': 'Playhouse Theatre',
 '~release_performance7_location_unwound': 'Playhouse Theatre, BBC Studios, London, GB-ENG, GB',
 '~release_performance_count': 7}
>>> 

```

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 22, 2026, 8:45pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/10 "2026-02-22T20:45:44Z")

</div>

Oh, wow, neet. I can [do this](https://musicbrainz.org/doc/Cover_Art_Archive/API) 🙂

 ![Screenshot from 2026-02-22 12-58-18](https://community.metabrainz.org/uploads/default/original/3X/9/5/954106fcc7ec43c7be1fb39b6c57b815db939834.png)

EDIT: maybe not…

EDIT2: Gotcha! [https://eventartarchive.org/event/30f5416d-bb62-4827-9e9f-605a1368cd5c](https://eventartarchive.org/event/30f5416d-bb62-4827-9e9f-605a1368cd5c)

---

<div class="post-metadata">

**Author:** ![davygrvy](https://community.metabrainz.org/user_avatar/community.metabrainz.org/davygrvy/32/25443_2.png) [@davygrvy](https://community.metabrainz.org/u/davygrvy)\
**Post date:** [February 22, 2026, 11:34pm UTC](https://community.metabrainz.org/t/do-events-actually-have-annotations/814247/11 "2026-02-22T23:34:17Z")

</div>

does webservice do smart caching by doing a HEAD request first, then a following GET if Last-Modified is newer in the headers?
