Naturtag is a tool for nature photographers that adds useful metadata to describe the organisms in your photos. It includes a desktop application, a command-line interface, and can also be used as a python library. It is mainly intended for use with iNaturalist, but can also be used independently.
Naturtag gathers observation metadata (for iNaturalist observation photos), or just taxonomy metadata (for everything else). It then embeds this information in your local photo collection using EXIF, XMP, and Simple Darwin Core metadata.
This image metadata has a variety of uses, including:
Naturtag can tag your photos with hierarchical keywords (aka structured keywords), which are supported by some photo viewers/editors like Lightroom, FastPictureViewer, Photo Mechanic, digiKam, and XnViewMP.
This basically gives you a taxonomic tree for browsing and filtering your photos.
Naturtag can also simplify tagging photos for photo hosting sites like Flickr. For that use case, this tool generates semi-structured keywords in the same format as iNaturalist's Flickr Tagger.
Example search using these tags: https://www.flickr.com/photos/tags/taxonomy:class=arachnida
Packages are available on GitHub Releases for Windows, macOS, and most major Linux distributions. See Installation for instructions.
It can also be installed from PyPI. Example with uv:
uv tool install naturtagNaturtag is primarily a desktop application. It includes an interface for selecting and tagging images:
And tools to search and browse species and observations to tag your images with:
The general workflow currently looks like:
- Upload an observation to iNaturalist
- Load your local photos in Naturtag
- Select your observation in Naturtag and tag images
After initial tagging, future updates are simpler:
- Load local photos in Naturtag (optionally for multiple observations/taxa)
- Click 'Refresh tags' to fetch any updates from iNaturalist and apply to your local photos
Alternatively, without iNaturalist:
- Load your local photos in Naturtag
- Select a taxon in Naturtag and tag images
See Application Guide for more details.
Bulk tagging features (for handling multiple observations/taxa at a time) are planned for a future release.
Naturtag also includes a command-line interface. It takes an observation or species, plus some image files, and generates EXIF and XMP metadata to write to those images.
Example:
# Tag images with metadata from observation ID 5432
nt tag -o 5432 img1.jpg img2.jpg
# Refresh previously tagged images with latest observation and taxonomy metadata
nt refresh -r ~/observationsYou can see it in action here:
See CLI documentation for more details.
You can also import naturtag as a python library, and use its main features in your own scripts or
applications. Basic example:
from naturtag import tag_images, refresh_tags
# Tag images with full observation metadata
tag_images(['img1.jpg', 'img2.jpg'], observation_id=5432)
# Refresh previously tagged images with latest observation and taxonomy metadata
refresh_tags(['~/observations/'], recursive=True)See API Reference for more details.
- See Issues for planned features and current progress.
- If you have any problems, suggestions, or questions about naturtag, you can:
- Create an issue
- Create a discussion (for more open-ended questions)
- Ping me (@jcook) on the iNaturalist Community Forum.
- Many features of naturtag have been added upstream to other libraries I maintain. You can follow development of those projects here:




