Naturtag

A tool for nature photographers that adds useful metadata to describe the organisms in your photos.
https://github.com/pyinat/naturtag

Category: Biosphere
Sub Category: Biodiversity Citizen Science

Keywords

biodiversity biodiversity-data cli darwin-core dwc exif hierarchical-keywords inaturalist iptc photography taxonomy xmp

Keywords from Contributors

transforms optimize archiving measur investments generic animals products humanities compose

Last synced: about 1 hour ago
JSON representation

Repository metadata

Tag your nature photos with iNat taxonomy and observation metadata

README.md

Naturtag

Build status
Codecov
Documentation status
GitHub issues
PyPI
PyPI - Python Versions

Contents

Summary

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.

Use Cases

This image metadata has a variety of uses, including:

Local photo organization

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.

Hierarchical keyword taxonomy tree in XnView

Photo hosting

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

Taxonomy tags displayed on a Flickr photo

Installation

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 naturtag

Usage

GUI

Naturtag is primarily a desktop application. It includes an interface for selecting and tagging images:

Image selector interface showing file browser and tagged photos

And tools to search and browse species and observations to tag your images with:

Taxon search interface

Observation browser interface

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.

CLI

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 ~/observations

You can see it in action here:
asciicast

See CLI documentation for more details.

Library

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.

Development Status


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 1 day ago

Total Commits: 841
Total Committers: 3
Avg Commits per committer: 280.333
Development Distribution Score (DDS): 0.007

Commits in past year: 228
Committers in past year: 1
Avg Commits per committer in past year: 228.0
Development Distribution Score (DDS) in past year: 0.0

Name Email Commits
Jordan Cook j****t@p****e 835
dependabot[bot] 4****] 5
Kian-Meng Ang k****g@c****g 1

Committer domains:


Issue and Pull Request metadata

Last synced: 3 days ago

Total issues: 98
Total pull requests: 214
Average time to close issues: 6 months
Average time to close pull requests: 18 days
Total issue authors: 12
Total pull request authors: 4
Average comments per issue: 0.41
Average comments per pull request: 0.44
Merged pull request: 63
Bot issues: 0
Bot pull requests: 182

Past year issues: 5
Past year pull requests: 33
Past year average time to close issues: N/A
Past year average time to close pull requests: 4 days
Past year issue authors: 5
Past year pull request authors: 3
Past year average comments per issue: 1.2
Past year average comments per pull request: 0.12
Past year merged pull request: 7
Past year bot issues: 0
Past year bot pull requests: 27

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/pyinat/naturtag

Top Issue Authors

  • JWCook (85)
  • lsaffre (2)
  • nevilamos (2)
  • baslat (1)
  • mihow (1)
  • andrew-taylor (1)
  • raduluchian (1)
  • synrg (1)
  • yobboh (1)
  • arky (1)
  • abubelinha (1)
  • theresep31 (1)

Top Pull Request Authors

  • dependabot[bot] (182)
  • JWCook (30)
  • pete-builds (1)
  • kianmeng (1)

Top Issue Labels

  • ui (38)
  • data (26)
  • performance (12)
  • bug (11)
  • cli (10)
  • idea (8)
  • logistics (6)
  • enhancement (4)
  • docs (2)
  • question (1)
  • accessibility (1)

Top Pull Request Labels

  • dependencies (166)
  • python (143)
  • github_actions (22)
  • ui (10)
  • logistics (8)
  • data (6)
  • bug (4)
  • enhancement (3)
  • performance (2)
  • cli (1)
  • docs (1)
  • python:uv (1)

Package metadata

proxy.golang.org: github.com/pyinat/naturtag

  • Homepage:
  • Documentation: https://pkg.go.dev/github.com/pyinat/naturtag#section-documentation
  • Licenses: mit
  • Latest release: v0.9.2 (published about 1 month ago)
  • Last Synced: 2026-04-24T07:03:38.596Z (5 days ago)
  • Versions: 6
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 5.395%
    • Average: 5.576%
    • Dependent repos count: 5.758%
pypi.org: naturtag

Tag your nature photos with iNat taxonomy and observation metadata

  • Homepage: https://github.com/pyinat/naturtag
  • Documentation: https://naturtag.readthedocs.io
  • Licenses: MIT
  • Latest release: 0.9.2 (published about 1 month ago)
  • Last Synced: 2026-04-24T07:03:30.500Z (5 days ago)
  • Versions: 27
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 65 Last month
  • Rankings:
    • Dependent packages count: 10.105%
    • Stargazers count: 11.313%
    • Forks count: 16.882%
    • Average: 18.301%
    • Dependent repos count: 21.593%
    • Downloads: 31.61%
  • Maintainers (1)

Dependencies

.github/workflows/build.yml actions
  • actions/checkout v6 composite
  • astral-sh/setup-uv v7 composite
  • j178/prek-action v1 composite
naturtag/storage/setup.py pypi
Dockerfile docker
  • carlonluca/qt-dev 6.10.1 build
uv.lock pypi
  • 106 dependencies
.github/workflows/deploy.yml actions
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • actions/download-artifact v3 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
  • snok/install-poetry v1.3.3 composite
  • softprops/action-gh-release v1 composite
pyproject.toml pypi
  • babel >=2.0 develop
  • coverage ^7.0 develop
  • nox ^2023.4 develop
  • nox-poetry ^1.0 develop
  • pre-commit ^3.1 develop
  • prettyprinter ^0.18.0 develop
  • pyinstaller ^5.12 develop
  • pytest ^7.3 develop
  • pytest-cov >=3.0 develop
  • pytest-xdist >=2.2 develop
  • attrs >=21.2
  • click >=8.0
  • click-help-colors >=0.9
  • furo ^2023.3
  • linkify-it-py ^2.0
  • myst-parser ^1.0
  • pillow >=10.0
  • pyexiv2 >=2.6.2
  • pyinaturalist >=0.18
  • pyinaturalist-convert >=0.6.1
  • pyqtdarktheme ^2.1.0
  • pyside6 6.5.0
  • python >=3.10,<3.11
  • pyyaml >=6.0
  • qtawesome ^1.1.1
  • sphinx ^5.2
  • sphinx-autodoc-typehints ^1.17
  • sphinx-copybutton >=0.5
  • sphinx-design >=0.2
  • sphinxcontrib-apidoc ^0.3
  • sqlalchemy ^2.0.8
  • tablib ^3.0

Score: 10.003785273851491