Naturtag - Organize your photo collection with iNat metadata

Here’s a fun little project I’ve been working on for a couple years that I’d like to share: https://github.com/pyinat/naturtag

It’s an open source desktop application, and its main goal is to let you use your own iNaturalist data to add useful tags to your local photos, including taxonomy and observation details.

I’ve been using this myself for awhile now, and while it’s far from complete, I think it’s in a good enough state for others to try it out.

Wait but why

Why would you want to use this? Short version:

  • If you don’t use keywords or other image metadata: It’s a really nice way to organize your photos (and later search them) without messing with folders and filenames. See this thread for an interesting discussion on the topic.
  • If you already add metadata to your photos: This app will make the process faster and more thorough.

Using the app

With Naturtag, you pick some photos, pick a taxon (or an observation, if you have one), and it will add scientific and common name keywords for its full ancestry, plus a bunch of other useful metadata fields.

Using tagged photos

For example, after tagging your photos, if you want to find all your Canada Goose photos in whatever photo organizer you use, you can search by 'Canada Goose', 'Geese', 'Waterfowl', 'Birds', Branta canadensis', 'Branta', 'Anatidae', 'Anseriformes', 'Aves', etc.

To take it a step further, you can even browse your photos with a taxonomic tree using tools that support hierarchical keywords, like Lightroom, digiKam, or XnViewMP. With a few photos tagged, it will look something like this; and with lots of photos tagged, it will basically start to look like your dynamic life list on iNat.

How does it work?

Naturtag stores your data in standard EXIF and XMP metadata formats that most image organizers/editors/viewers support, and doesn’t require any extra databases or proprietary formats. You can uninstall the app and still use your data with whatever tools you want.

Observation data is stored in Darwin Core, which is a standard for biodiversity data used by platforms like GBIF. You can see a complete example here.

Links

Docs: https://naturtag.readthedocs.io/en/stable/
Downloads: https://github.com/pyinat/naturtag/releases

Notes

I realize this may only appeal to a small subset of iNat users, but I think it has a lot of potential to be a useful part of a nature photographer’s workflow.

Feedback would be appreciated! In the unlikely possible inevitable event that you encounter bugs, you can either send me a bug report on GitHub, or post details here.

I would also be interested to hear from anyone who already makes use of image metadata with your iNat photos: What details do you usually add, and what tools (if any) do you use to search / filter / organize your photos based on those details?

15 Likes

interesting. what happens when there’s a taxonomy change?

for example, if some photos were previously labeled as Dracopis Amplexicaulis, but then the taxon in iNat’s taxonomy changes to Rudbeckia Amplexicaulis, do you have to load the new taxonomy and then go back and relabel all the previously labeled photos for that taxon?

Good point. There’s currently a “Refresh” feature that will take any images previously tagged with an observation ID and update it with the current observation info. If the user has “Automatically update my content for taxon changes” enabled in their iNat settings, the image will be updated with the new taxon.

That won’t currently work for images tagged with only a taxon ID, but I’ll add that as a feature idea.

The other limitation is that loading a large number of images at once in the UI isn’t fast enough to be convenient, but I’ll be working on that (and other batch processing features) in the near future.

@pisum I’m taking a look at this now. It looks like in results from GET /taxa/{id}, I would look for is_active=false, and then check current_synonymous_taxon_ids for the updated taxon. Does that sound right? And do you happen to know in what cases current_synonymous_taxon_ids might contain multiple IDs? I thought that iNat didn’t have multiple synonymous taxa active at the same time, but I could be wrong.

generally, yes, except:

when there’s a 1:M taxon split. (maybe M:M, too, if those exist.)

for example, see:

1 Like

Thanks for the example! In that case, an automatic taxon update is probably only reasonable to do if it’s a simple 1:1 taxonomy change. Some changes for that are now in the main branch.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.

are you manually adding keywords in your Lightroom catalog? with as many observations as you have, that seems like a massive expenditure of time.

Yes, I am.

I assumed the first time I added them would consume a big chunk of time, but afterwards as I observe the same species, or species belonging to the same Order, Family, etc, it would get easier (I could just assign the species keyword, and it would fetch the whole taxonomic arrangement).

Could lightroom fetch the taxonomic arrangement of a given photo if I provided the observation link?

you might be able to use another tool to do this. see: https://forum.inaturalist.org/t/naturtag-organize-your-photo-collection-with-inat-metadata/33959

1 Like

Wow, that might fix it all. I’ll give it a try whenever I get some free time, and update you on the result. Thank you very much for the help!

@jcook is the one to thank for making the tool and might be able to provide more information about how to use it most effectively to handle your cases. (i think the key to handle your cases is to tie your images to observations first, but i’m not sure.)

(i didn’t realize you were manually updating stuff in Lightroom. otherwise, i would have pointed you to naturtag earlier.)

1 Like

I just tried it. With Naturtag, I still have to tag each observation individually. That means, uploading the photos 1 observation at a time, tagging, and then uploading the next ones.

Not sure if it will be very time effective

yes, the link between image file and observation has to be established, but once it is, it should allow the taxonomy to be updated automatically thereafter.

that said, the iNat API was recently updated to allow GET /observations to respond with original photo filename. i wonder if that could be used to more automatically link files with observations? @jcook might be able to say if that’s even on the radar for development.

That’s right, unfortunately it currently only handles tagging a single observation at a time; but once a photo has been tagged (with at least an observation ID), it can automatically sync local tags with any updates made on iNat (including taxonomy changes).

Making use of the original filename to help with the initial observation/photo associations is definitely on my radar. I noticed the API feature request for that awhile back, but wasn’t aware it had been implemented already. Thanks for the heads up!

I’m fairly busy at the moment, but I’ll have some time in the coming weeks to look into this some more and see how much work it will be to integrate this into Naturtag.

I’m organizing my photos on a taxonomically ordered Lightroom catalog (maybe a foolish enterprise, but I’m trying to see where it takes me)

This is a fun idea in general, and what started me down this same rabbit hole a few years back. Once you have a sizeable collection of nature photos, it’s a very appealing idea to be able to organize and browse them taxonomically. This is kind of doable when browsing your observations on iNat, but my problems with that are:

  1. iNat doesn’t store original resolution, RAW files, sidecar files, or full image metadata (which is expected, since the site explicitly states it’s not intended as a photo backup solution)
  2. I don’t upload all my nature photos to iNat (some are just for photography’s sake, or are otherwise not useful for identification)
  3. I don’t always have access to fast internet

So, it’s a long-term goal of mine to be able to work with my iNat data offline, using only my own computer and local photo collection, and extending that same information/tooling to non-iNat nature photos.

so then do you have to download and iterate through all your observations each time you want to sync? is that currently the only way in naturtag to address cases where an ancestor taxon changes but the observation taxon is not directly affected?

(above, when i thought joaolemoslima was coding something, i described a combination of GET /observations?updated_since=[last sync date] and GET /observations/taxonomy to address observation updates and potential ancestor changes.)

Oh, no, I meant for initial tagging. With the sync/refresh feature, you point it to a directory, it will find all previously tagged photos, and update their tags with any updates from iNaturalist.

(moved the above 11 posts from Is it possible to be notified whenever any taxonomic change occurs on one of my observed species?)