Article :: xeno-canto

10 min read Original article ↗

Annotations in Xeno-canto

By

March 25, 2026

Annotations on XC!

It has been a plan since forever: annotate individual sounds in Xeno-canto. We are making it possible now.

Recordings on XC are usually attributed to a single species, the "foreground" species. Extra information ("metadata") on sound type, sex etc. can be given.

But many recordings on XC contain more than one type of vocalisation, and quite often by more than one species. The single “label” for the recording (ID+type+sex for example) does not quite cut it then. Moreover this label does not explicitly state where the sound it describes occurs in time and in frequency: it is a "weak" label.

For a limited number of recordings more than one such "weak label" is stored in the database, where the recordist has indicated a "foreground" species and any number of “background species”. (This is one of the features that we copied from Sjoerd Maijer's Birds of Bolivia DVD back in the day.)

The lack of precise temporal and frequency information, and accompanying metadata for sounds within each recording means that a lot of potentially interesting detail in the collection is hidden now.

It is also problematic for all kinds of analysis, particularly of course when multiple species are audible within a recording. In fact, this lack of detailed information on the exact presence in time and frequency of vocalising species in recordings is currently the main obstacle to develop high-throughput automated analysis (e.g. modelling sequences of calls, automated recognition in large sound scape datasets, and so on).

But that situation can change from now on because XC now allows the upload of annotations of individual sounds in recordings. We have added functionality to upload annotations to XC, download annotations from XC (also using the API), search for annotations on XC, and view annotations in a new recording player.

At this moment everyone can upload annotations for their own recordings.

New sound player

We are not launching all aspects at once. There has already been a very visible change in the last week: a new sound player on XC, replacing the old large spectrogram. The player allows viewing and interacting with the annotations. Instead of static sonograms and oscillograms of the first 10 seconds all recordings will eventually have scrolling spectrograms and oscillograms that show the first 2 minutes of the recording. The annotations can be viewed there, and additional information about each annotation can be found by clicking on one of the annotation boxes. Check out this one, or this one.

Searching for annotations

To find all recordings having annotations, you can use the tag ann:yes. (You can also use ann:no to find recordings without annotations). Annotations can also be searched indirectly, as part of recordings. This allows searches for annotation properties in combination with the properties for the recording.

There are two limitations for annotation searches:

Firstly: only tag-based searches are allowed, (hopefully) preventing slow searches.

Secondly: they cannot be combined with searches for background species (also:). A search for background species automatically includes annotated species. This means you can either search for background species and find both these and annotated species, or just search for annotated species.

The following tags can be used:

  1. 'ann_ann' (annotator)
  2. 'ann_frq_high' (highest frequency) . Example ann_frq_high:"<10000"
  3. 'ann_frq_low' (lowest frequency)
  4. 'ann_gen' (genus) . Example ann_gen:Grallaria
  5. 'ann_rmk' (remark) . Example ann_rmk:rain
  6. 'ann_sex' (sex)
  7. 'ann_sp' (species) . Example ann_sp:merula
  8. 'ann_ssp' (subspecies)
  9. 'ann_stage' (life stage)
  10. 'ann_type' (sound type)

Preparing annotations

XC itself has not been set up to annotate recordings. Other tools specifically designed for that can be used. XC have communicated with a number of teams to make exchange of sounds and annotations between XC and their tool possible. These are in active development at the moment.

At the moment these two tools allows export of metadata in the XC Annota-JSON format:

Spectrolipi (Web, see also this article )

Signavis (Web, see also this article )

Spectrolipi and Signavis are set up to allow quite smooth interaction with XC: downloading recordings, annotating and uploading to XC is smoothless from these platforms.

Other possibilities are in the works, we'll keep you posted.

Communication between these tools and XC uses a specific JSON format, Annota-JSON that XC has defined. See this article on Annota-JSON. If you have old annotations lying around you can write your own code to convert them to this format. The schema allows a lot of detail, but it only has a few required fields.

Sharing annotations through XC

Just as with the recordings themselves, the annotations can be uploaded as well as downloaded. Annotations are shared with a Creative Commons license associated with them. The choice of licenses is limited because we want them to be able to be shared through GBIF.

Uploading annotations

Everyone can upload annotations for their own recordings. The easiest way is to use the platforms mentioned above. But a direct way is also possible using this form that allows you to upload an Annota-JSON file regardless of where it came from. After uploading the json, hit the "Verify" button, to check if the format of your file is ok, and if all the obligatory entries are there. You'll probably be shown some warnings and errors. If all is well, no errors, the file can be uploaded and the annotations are added to your account and are shown in the recording page and below the scrolling sono. If all is not well (errors!) you'll have to mend the file and try again.

An alternative uploading route for developers

XC have set up a dedicated API endpoint to accept annotation sets as JSON data. This will allow developers to fetch recordings from Xeno-canto into their application, let users annotate the recording and directly push the resulting annotation set back to the user's account. This is the feature used by Spectrolipi and Signavis.

The general API offers the option to search for specific recordings, but it may be more practical to use the endpoint for individual recordings:

curl "https://xeno-canto.org/api/3/recording/[XC number]?key=[your XC API key]&group_properties"

The additional group_properties parameter will return the group-related properties (under group-sound-properties) for the main species in the recording. This will allow developers to create dynamic selects in their application for the pre-determined values of life stage, recording method, sex and sound type. A reliable way to push the resulting JSON to XC is to cat the JSON (to avoid potential encoding errors) and pipe this to curl:

cat /path/to/annotation_set.json | curl -X POST \
-H "key:[your XC API key]" \
-H "Content-Type: application/json" \
--data-binary @- \
https://xeno-canto.org/api/3/upload/annotation-set

The annotation set will be saved to the user's account, from where it can be verified and imported.

Editing annotations

Annotations cannot be edited. It is possible though to delete a set and re-upload an adapted set of annotations.

Downloading annotations

Recordings with annotations show a Download annotations link, pointing to a Annota-JSON file containing the annotation data.

This article was last updated on June 4, 2026 at 13:41

How was this made? View the text

I think, on-line tutorials and workshops could be very helpful.

And explanations of the aim(s) of all of these efforts.

I support the public service logic of XC. But, what about the other stakeholders on this new process?

All the best,

Hi guys, I'm not sure if I understand this correctly. Is this exclusively for annotating the different species in a recording? Or can you also include things like male/female/juvenile, different call types of a species within a recording, mimicry within the song, behavioral changes within a recording, etc.? Cheers, Frank

Hi Frank, the json schema we developed (see the other article) allows quite a wide variety of settings including the ones you mention. The annotation tools need to be developed to accommodate this and we’re not there yet. Spectrolipi should soon allow annotation of song type, life stage, etc, following xc’s standard lists. The aim is that other programs will do the same.

Is it important to annotate all calls of a recording and species completely? How should the Reed Warbler be annotated here? With one annotation covering the almost continuous sequence, or with many shorter ones that leave out the gaps? https://xeno-canto.org/735417

  • play
  • pause
  • stop

Hi Brickegickel, as usual on XC, this is free to interpretation. Different projects will annotate recordings for different reasons in mind, and thus have different strategies. Recordings may also be annotated by more than person, for more than one project. Over time, I'm sure we will have to come up with strategies to navigate this, e.g. allowing a user to show annotations from one set (project) or another, or allowing users to filter on groups (birds, frogs, etc). We'll have to see.

Thanks for the explanation, Bob! This is definitely stretching the abilities of a tech dinosaur like me. But I think that by the time everything’s up and running, I’ll have figured it out. Fingers crossed!

Hello all, Provision is now made in Spectrolipi to update Sex, Life stage & Sound type to each annotation, folllowing Xc's standard list.

Hi! Es gibt einen Link zu einem Artikel über SignaVis, aber die zugehörige Seite ist nicht erreichbar:

https://xeno-canto.org/article/324

Hi! There is a link to an article about SignaVis, but the corresponding page is inaccessible:

https://xeno-canto.org/article/324

As suggested by someone before me (1st comment actually) a explanatory video on how things work with spectrolipi would be extremely helpfull. I am a nitwit when it comes to such difficult-to-understand software.. It's obviously built by a technician who had no plan of trying to make it intuitively or maybe even idiot-proof. And by doing so, i think, you've lost the vast majority in possible users (without intention ofcourse). I tried it, on and off, for three days. it doesn't work for me, a lot of frustration (as you noticed no doubt) and now I will ignore it.

hi Joost, you did check the article on Spectrolipi?

"The technician" is called Nishant and in our book he is the best, totally focussed on making things easy to work with :-)

That being said, new things often have a steeplearning curve. What may help is the link to the Youtube explanations by Nishant, in the article he wrote on Spectrolipi. Did you see that?

Here is the link : https://www.youtube.com/@spectrolipi

You can do it Joost! :-) Give it another try.

We're also debating a Zoom call where he explains things, have to set a date though.

Willem-Pier

Thanks for the feedback, Joost. I really appreciate you taking the time to try Spectrolipi and to share your experience honestly.

If you are open to it, it would help a lot if you could point out the specific parts that didn’t work for you — which step, which button, which screen, or what you expected to happen. You can share your feedback in whichever way is easiest:

*log an issue / suggestion / feature request here: https://github.com/nishantnnb/spectrolipi/issues *or email: spectrolipi@gmail.com *or let me know if you prefer to connect some other way.

And just to reassure you: we are actively improving Spectrolipi. The progress is visible — over the past few months there have been 100+ GitHub commits focused purely on usability and workflow improvements. Suggestions from users are taken seriously, and whenever something is feasible and useful for most users, I implement it.

Regards, Nishant

... the other week Nishant released a new version of SpecroLipi, see this article. Nishant will give a demo this friday 15.30 CEST. Drop us a line at the XC contact email address if interested!

What helped me the most were Nishant's YouTube videos and ChatGPT, which somehow managed to stay remarkably patient despite all my admittedly silly questions. It took a while, but in the end, I finally got it working. Cheers, Frank

Add your comments

Log in to reply to this topic.

About the author

co-founder and admin of xeno-canto. using my physics and materials science background ( as specialist in materials selection and failure analysis: infoMateria. a researcher at heart, check out some of my old & new papers of all types here and here). I do take pride in the large number of papers that have used xeno-canto.