{"id":13724509,"url":"https://github.com/pyinat/naturtag","last_synced_at":"2026-03-02T03:12:54.232Z","repository":{"id":37253309,"uuid":"262854345","full_name":"pyinat/naturtag","owner":"pyinat","description":"Tag your nature photos with iNat taxonomy and observation metadata","archived":false,"fork":false,"pushed_at":"2025-12-29T18:00:23.000Z","size":119613,"stargazers_count":43,"open_issues_count":69,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-29T19:51:24.407Z","etag":null,"topics":["biodiversity","biodiversity-data","cli","darwin-core","dwc","exif","hierarchical-keywords","inaturalist","iptc","photography","taxonomy","xmp"],"latest_commit_sha":null,"homepage":"https://naturtag.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyinat.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-05-10T18:52:49.000Z","updated_at":"2025-12-29T17:59:00.000Z","dependencies_parsed_at":"2023-09-21T19:31:20.141Z","dependency_job_id":"5ba876b0-3d0c-4477-843a-16b1eea7cde0","html_url":"https://github.com/pyinat/naturtag","commit_stats":{"total_commits":606,"total_committers":4,"mean_commits":151.5,"dds":0.01650165016501648,"last_synced_commit":"805d31f2ec257309d6c570d1e91384b9964ef7d3"},"previous_names":["jwcook/naturtag"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/pyinat/naturtag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28122127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-29T02:00:07.021Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["biodiversity","biodiversity-data","cli","darwin-core","dwc","exif","hierarchical-keywords","inaturalist","iptc","photography","taxonomy","xmp"],"created_at":"2024-08-03T01:01:58.459Z","updated_at":"2026-02-15T01:16:14.741Z","avatar_url":"https://github.com/pyinat.png","language":"Python","funding_links":[],"categories":["Biosphere"],"sub_categories":["Biodiversity Citizen Science"],"readme":"# Naturtag\n\n[![Build status](https://github.com/pyinat/naturtag/actions/workflows/build.yml/badge.svg)](https://github.com/pyinat/naturtag/actions)\n[![Documentation status](https://readthedocs.org/projects/naturtag/badge/?version=stable)](https://naturtag.readthedocs.io/en/stable/)\n[![GitHub issues](https://img.shields.io/github/issues/pyinat/naturtag)](https://github.com/pyinat/naturtag/issues)\n[![PyPI](https://img.shields.io/pypi/v/naturtag?color=blue)](https://pypi.org/project/naturtag)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/naturtag)](https://pypi.org/project/naturtag)\n\n\n\u003c!-- RTD-IGNORE --\u003e\n\u003cbr /\u003e\n\n[![](assets/icons/naturtag-gh-preview.png)](https://naturtag.readthedocs.io)\n\n## Contents\n- [Summary](#summary)\n- [Use Cases](#use-cases)\n- [Installation](#installation)\n- [Usage](#usage)\n  - [GUI](#gui)\n  - [CLI](#cli)\n  - [Library](#library)\n- [Development Status](#development-status)\n\u003c!-- END-RTD-IGNORE --\u003e\n\n## Summary\nNaturtag is a tool for nature photographers that adds useful metadata to describe the organisms in\nyour photos. It includes a **desktop application**, a **command-line interface**, and can also be\nused as a **python library**. It is mainly intended for use with [iNaturalist](https://www.inaturalist.org), but can also be used independently.\n\nNaturtag gathers complete observation metadata (for iNaturalist observation photos), or just taxonomy metadata (for everything else). It then embeds this information in your local photo collection using\n[XMP](https://en.wikipedia.org/wiki/Extensible_Metadata_Platform) and\n[EXIF](https://en.wikipedia.org/wiki/Exif) metadata.\n\n## Use Cases\nThis image metadata has a variety of uses, including:\n\n### Local photo organization\nNaturtag can tag your photos with **hierarchical keywords** (aka structured keywords), which\nare supported by some photo viewers/editors like\n[**Lightroom**](https://millennialdiyer.com/articles/photography/lightroom-keyword-hierarchy/),\n[**FastPictureViewer**](https://www.fastpictureviewer.com),\n[**Photo Mechanic**](https://www.photometadata.org/META-Tutorials-Photo-Mechanic-Applying-Keywords),\n[**digiKam**](https://www.digikam.org), and\n[**XnViewMP**](https://www.xnview.com/en/xnviewmp).\n\nThis basically gives you a taxonomic tree for browsing and filtering your photos.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eExample in XnView\u003c/b\u003e\u003c/summary\u003e\n\n![screenshot](assets/screenshots/xnview.png)\n\u003c/details\u003e\n\n### Photo hosting\nNaturtag can also simplify tagging photos for photo hosting sites like Flickr. For that use case, this\ntool generates semi-structured keywords in the same format as\n[iNaturalist's Flickr Tagger](https://www.inaturalist.org/taxa/flickr_tagger).\n\nExample search using these tags: https://www.flickr.com/photos/tags/taxonomy:class=arachnida\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eExample of taxonomy tags on Flickr\u003c/b\u003e\u003c/summary\u003e\n\n![screenshot](assets/screenshots/flickr.png)\n\u003c/details\u003e\n\n### Other biodiversity tools\nFinally, naturtag can improve interoperability with other tools and systems that interact with biodiversity\ndata. For example, in addition to iNaturalist you might submit some observations to another\nplatform with a more specific focus, such as **eBird**, **BugGuide**, or **Mushroom Observer**.\nFor that use case, this tool supports [Simple Darwin Core](https://dwc.tdwg.org/simple).\n\n## Installation\nSee [GitHub Releases](https://github.com/pyinat/naturtag/releases) for downloads and\n[Installation](https://naturtag.readthedocs.io/en/stable/installation.html)\nfor platform-specific instructions.\n\nTo just install naturtag as a python package, run:\n```bash\npip install naturtag\n```\n\n## Usage\n\n### GUI\nNaturtag is primarily a desktop application. It includes an interface for selecting and tagging images:\n\n![Screenshot](assets/screenshots/image-selector.png)\n\nAnd tools to search and browse species to tag your images with:\n\n![Screenshot](assets/screenshots/taxon-search.png)\n\nSee [Application Guide](https://naturtag.readthedocs.io/en/stable/app.html) for more details.\n\n### CLI\nNaturtag also includes a command-line interface. It takes an observation or species, plus some image\nfiles, and generates EXIF and XMP metadata to write to those images.\n\nExample:\n```bash\n# Tag images with metadata from observation ID 5432\nnt tag -o 5432 img1.jpg img2.jpg\n\n# Refresh previously tagged images with latest observation and taxonomy metadata\nnt refresh -r ~/observations\n```\nYou can see it in action here:\n[![asciicast](https://asciinema.org/a/0a6gzpt7AI9QpGoq0OGMDOxqi.svg)](https://asciinema.org/a/0a6gzpt7AI9QpGoq0OGMDOxqi)\n\nSee [CLI documentation](https://naturtag.readthedocs.io/en/stable/cli.html) for more details.\n\n### Library\nYou can also import `naturtag` as a python library, and use its main features in your own scripts or\napplications. Basic example:\n```python\nfrom naturtag import tag_images, refresh_tags\n\n# Tag images with full observation metadata\ntag_images(['img1.jpg', 'img2.jpg'], observation_id=5432)\n\n# Refresh previously tagged images with latest observation and taxonomy metadata\nrefresh_tags(['~/observations/'], recursive=True)\n```\n\nSee [API Reference](https://naturtag.readthedocs.io/en/stable/reference.html) for more details.\n\n## Development Status\n* See [Issues](https://github.com/pyinat/naturtag/issues) for planned features and current progress.\n* If you have any problems, suggestions, or questions about naturtag, you can:\n  * [Create an issue](https://github.com/pyinat/naturtag/issues/new/choose)\n  * [Create a discussion](https://github.com/orgs/pyinat/discussions)\n  * Ping me (**@jcook**) on the [iNaturalist Community Forum](https://forum.inaturalist.org/c/general/14).\n* When I'm not working on this, I'm often working on other libraries that naturtag benefits from, including\n  [pyinaturalist](https://pyinaturalist.readthedocs.io),\n  [pyinaturalist-convert](https://github.com/pyinat/pyinaturalist-convert), and\n  [requests-cache](https://requests-cache.readthedocs.io).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyinat%2Fnaturtag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyinat%2Fnaturtag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyinat%2Fnaturtag/lists"}