Adding per-channel metadata and displaying it in OMERO.web

Hi OME team,

Following up on a topic I touched on at the community meeting, I’m trying to add per-channel metadata to images with many channels where each channel has its own important set of properties. There are a number of ways to go but none of them are very functional:

  1. the proper OME-XML model way: i.e. each channel can have annotations so I can add my MapAnnotations per channel and that works fine. Alas, there is nothing in OMERO at this time to display that information in any way. So I feel good for doing the right thing but it helps nobody.
  2. Upload that info as a OMERO Table to the image and it will show up as a Attachment that can be displayed with the “eye”. That works but it’s ugly, not very obvious to the user, and requires the user to figure out what matches up with what.
  3. Similarly, upload a csv table into Attachments and it will open with Excel so you have pretty much the same as 2).

So a few questions:

  1. is there any way to make the table or csv file in options 2 or 3 show up in the Tables tab so it’s at least immediately visible?
  2. Is there anything I’m missing for option 1 to display such annotations?
  3. if not, is there some simple example code how to make a tiny web plugin that I could hack around with to create such a metadata display module. I looked at and that is a bit daunting for me.


Hi Damir,


  1. If you create an OMERO.table with columns e.g Channel_1, Channel_2 etc and an Image column (with Image ID - 1 row per Image) and attach the Table to the parent Dataset or Project, it will show the Row data under the Tables tab for that Image. The metadata plugin can be used to create the table from csv using the Image Name (see
  2. I’m afraid you’re correct about the lack of Channel Annotations display.
  3. Actually the amount of code you’d need to create an OMERO.web app to show the channel annotations in the right panel of webclient wouldn’t be too much. You’d need to start with “Create an App”

If you’re interested in this approach, please create an app from the template, and I’d be happy to help you with the next steps.


Hi Will,

Thanks for the detailed answer. Looks like option 1 is easy so I’ll try that for sure. I only see the problem that with our workflow of one metadata csv file per image, I’ll need to upload a new csv file to the Dataset for each image in it which will become quite a mess with many images in a Dataset.

I’ll do some reading on option 3 and will try. Thanks much for your offer of help.


Hi Damir,

I don’t think 1 OMERO.table per image is going to work. The logic expects just 1 table on a parent object (if there’s many, it just picks the most recent). The Table gets opened and then queried for the correct Image. But if you have multiple tables there’s no way to know which to open.
However, it would seem that Map Annotations would be suitable for storing channel metadata as Key-Value pairs on each Image?
Do you need a way to work with CSV files? We have workflows for CSV -> OMERO.table -> Map Annotations, but it seems kinda painful to create a single-row table for each Image so there might be ways you can go direct.