{"id":66313,"name":"Naturtag","description":"A tool for nature photographers that adds useful metadata to describe the organisms in your photos.","url":"https://github.com/pyinat/naturtag","last_synced_at":"2026-05-21T20:30:22.403Z","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":"2026-05-08T13:36:48.000Z","size":149942,"stargazers_count":53,"open_issues_count":63,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-05-08T14:10:11.272Z","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":"2026-05-04T13:02:14.000Z","dependencies_parsed_at":"2026-01-19T09:05:52.031Z","dependency_job_id":"f6bdf984-5fec-44f5-918a-b8417391aea1","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":21,"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":32946410,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"owner":{"login":"pyinat","name":"pyinat","uuid":"105503620","kind":"organization","description":"Python tools for interacting with iNaturalist","email":null,"website":"https://pyinaturalist.readthedocs.io","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/105503620?v=4","repositories_count":6,"last_synced_at":"2024-05-12T00:45:45.872Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pyinat","funding_links":[],"total_stars":173,"followers":10,"following":0,"created_at":"2022-11-14T17:10:52.763Z","updated_at":"2024-05-12T00:45:46.962Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat/repositories"},"packages":[{"id":2814147,"name":"naturtag","ecosystem":"pypi","description":"Tag your nature photos with iNat taxonomy and observation metadata","homepage":"https://github.com/pyinat/naturtag","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/pyinat/naturtag","keywords_array":[],"namespace":null,"versions_count":27,"first_release_published_at":"2020-06-11T22:08:35.000Z","latest_release_published_at":"2026-03-19T19:41:19.000Z","latest_release_number":"0.9.2","last_synced_at":"2026-05-18T19:02:15.364Z","created_at":"2022-04-10T11:42:51.264Z","updated_at":"2026-05-18T19:02:15.365Z","registry_url":"https://pypi.org/project/naturtag/","install_command":"pip install naturtag --index-url https://pypi.org/simple","documentation_url":"https://naturtag.readthedocs.io","metadata":{"funding":null,"documentation":"https://naturtag.readthedocs.io","classifiers":["Development Status :: 3 - Alpha","Environment :: Console","Environment :: MacOS X","Environment :: Win32 (MS Windows)","Environment :: X11 Applications","Intended Audience :: Developers","Intended Audience :: End Users/Desktop","Intended Audience :: Science/Research","Operating System :: MacOS","Operating System :: Microsoft :: Windows","Operating System :: POSIX","Programming Language :: Python :: 3","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Typing :: Typed"],"normalized_name":"naturtag","project_status":null},"repo_metadata":{"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":"2024-10-10T22:01:09.000Z","size":104701,"stargazers_count":37,"open_issues_count":55,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-29T19:48:46.522Z","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}},"created_at":"2020-05-10T18:52:49.000Z","updated_at":"2024-10-10T22:00:18.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":553,"total_committers":4,"mean_commits":138.25,"dds":"0.016274864376130238","last_synced_commit":"a20ff09eadfbae1f6b5c92c48e3e5e382dd38a8d"},"previous_names":["jwcook/naturtag"],"tags_count":9,"template":false,"template_full_name":null,"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","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222114661,"owners_count":16933901,"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","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"},"owner_record":{"login":"pyinat","name":"pyinat","uuid":"105503620","kind":"organization","description":"Python tools for interacting with iNaturalist","email":null,"website":"https://pyinaturalist.readthedocs.io","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/105503620?v=4","repositories_count":6,"last_synced_at":"2024-05-12T00:45:45.872Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pyinat","funding_links":[],"total_stars":173,"followers":10,"following":0,"created_at":"2022-11-14T17:10:52.763Z","updated_at":"2024-05-12T00:45:46.962Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat/repositories"},"tags":[{"name":"v0.8.0","sha":"805d31f2ec257309d6c570d1e91384b9964ef7d3","kind":"commit","published_at":"2024-10-10T21:59:56.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0/manifests"},{"name":"v0.8.0b3","sha":"8a45ac15e7b211972bcf50254d2063451a0ca035","kind":"commit","published_at":"2024-07-22T19:12:10.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b3","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b3/manifests"},{"name":"v0.8.0b2","sha":"7ef409d72fbf1e34d1ba77cb074863974fae3c99","kind":"commit","published_at":"2024-07-22T17:29:29.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b2","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b2/manifests"},{"name":"v0.8.0b1","sha":"1ada044d674565faa6673dcb0c14b324d68c2d96","kind":"commit","published_at":"2024-06-30T22:52:59.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b1/manifests"},{"name":"v0.8.0b0","sha":"bba9e8bd0010177243eb5fe214fed91f8d6d37ea","kind":"commit","published_at":"2023-06-07T19:42:31.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b0/manifests"},{"name":"v0.7.0","sha":"cae9918f1952b67695462daf326e516ca751ca09","kind":"commit","published_at":"2022-07-29T22:25:33.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.7.0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.7.0/manifests"},{"name":"v0.6","sha":"8009167432ca1533d119ec7381a7ff751619067b","kind":"commit","published_at":"2021-06-17T00:17:48.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.6","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.6/manifests"},{"name":"v0.5","sha":"2bea3cdb683ca6d897c945c508636fa7225d7135","kind":"commit","published_at":"2020-06-04T03:37:37.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.5","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.5/manifests"},{"name":"v0.4","sha":"bcbfa0cedfbe58b4407b038011772deac69cbcfa","kind":"commit","published_at":"2020-05-25T13:37:33.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.4","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.4/manifests"},{"name":"v0.3","sha":"a69abad8cc927fb0c2858918d6b8b46a378420f2","kind":"commit","published_at":"2020-05-24T17:11:48.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.3","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.3/manifests"},{"name":"v0.2","sha":"ff195081eaba24cfc7dad6e8f51b37b3187628ab","kind":"commit","published_at":"2020-05-19T20:35:17.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.2","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.2/manifests"},{"name":"v0.1","sha":"9f0ebae02479f4239050c4e6c31e60a2fb26bd87","kind":"commit","published_at":"2020-05-19T20:33:21.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.1/manifests"}]},"repo_metadata_updated_at":"2024-11-11T03:47:16.097Z","dependent_packages_count":0,"downloads":102,"downloads_period":"last-month","dependent_repos_count":1,"rankings":{"downloads":31.61023298553587,"dependent_repos_count":21.592921703686898,"dependent_packages_count":10.104988627979555,"stargazers_count":11.312612224513837,"forks_count":16.88206215362442,"docker_downloads_count":null,"average":18.300563539068115},"purl":"pkg:pypi/naturtag","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/naturtag","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pypi/naturtag","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/naturtag/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2024-11-11T03:31:25.660Z","issues_count":94,"pull_requests_count":124,"avg_time_to_close_issue":14194717.843137255,"avg_time_to_close_pull_request":1726384.4224137932,"issues_closed_count":51,"pull_requests_closed_count":116,"pull_request_authors_count":3,"issue_authors_count":6,"avg_comments_per_issue":0.3723404255319149,"avg_comments_per_pull_request":0.6048387096774194,"merged_pull_requests_count":47,"bot_issues_count":0,"bot_pull_requests_count":101,"past_year_issues_count":13,"past_year_pull_requests_count":71,"past_year_avg_time_to_close_issue":1856318.3333333333,"past_year_avg_time_to_close_pull_request":1541427.603174603,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":63,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":0.38461538461538464,"past_year_avg_comments_per_pull_request":0.5492957746478874,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":59,"past_year_merged_pull_requests_count":27,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/issues","maintainers":[{"login":"JWCook","count":108,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}],"active_maintainers":[{"login":"JWCook","count":19,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/naturtag/codemeta","maintainers":[{"uuid":"JWCook","login":"JWCook","name":null,"email":null,"url":null,"packages_count":9,"html_url":"https://pypi.org/user/JWCook/","role":null,"created_at":"2023-02-24T18:37:50.438Z","updated_at":"2023-02-24T18:37:50.438Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/JWCook/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":867606,"maintainers_count":370869,"namespaces_count":0,"keywords_count":280639,"github":"pypi","metadata":{"funded_packages_count":53810},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-05-13T05:09:37.527Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},{"id":11733539,"name":"github.com/pyinat/naturtag","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/pyinat/naturtag","keywords_array":[],"namespace":null,"versions_count":6,"first_release_published_at":"2022-07-29T22:25:33.000Z","latest_release_published_at":"2026-03-19T19:37:01.000Z","latest_release_number":"v0.9.2","last_synced_at":"2026-05-18T19:02:17.196Z","created_at":"2025-06-05T11:16:57.394Z","updated_at":"2026-05-18T19:02:17.196Z","registry_url":"https://pkg.go.dev/github.com/pyinat/naturtag","install_command":"go get github.com/pyinat/naturtag","documentation_url":"https://pkg.go.dev/github.com/pyinat/naturtag#section-documentation","metadata":{},"repo_metadata":{"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-09-06T16:01:30.000Z","size":119579,"stargazers_count":42,"open_issues_count":67,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-09T16:50:52.767Z","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}},"created_at":"2020-05-10T18:52:49.000Z","updated_at":"2025-09-06T14:34:27.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":274658294,"owners_count":25325777,"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-09-11T02:00:13.660Z","response_time":74,"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"},"owner_record":{"login":"pyinat","name":"pyinat","uuid":"105503620","kind":"organization","description":"Python tools for interacting with iNaturalist","email":null,"website":"https://pyinaturalist.readthedocs.io","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/105503620?v=4","repositories_count":6,"last_synced_at":"2024-05-12T00:45:45.872Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/pyinat","funding_links":[],"total_stars":173,"followers":10,"following":0,"created_at":"2022-11-14T17:10:52.763Z","updated_at":"2024-05-12T00:45:46.962Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyinat/repositories"},"tags":[{"name":"v0.8.2b1","sha":"1a73f4baa0754ff554669c71a3d98779e1c97a23","kind":"commit","published_at":"2025-01-07T22:36:55.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.2b1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.2b1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.2b1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.2b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.2b1/manifests"},{"name":"v0.8.1","sha":"5d06bb6b6266153cce53f208ec875e897aef93c0","kind":"commit","published_at":"2025-01-02T20:53:45.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.1/manifests"},{"name":"v0.8.0","sha":"805d31f2ec257309d6c570d1e91384b9964ef7d3","kind":"commit","published_at":"2024-10-10T21:59:56.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0/manifests"},{"name":"v0.8.0b3","sha":"8a45ac15e7b211972bcf50254d2063451a0ca035","kind":"commit","published_at":"2024-07-22T19:12:10.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b3","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.0b3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b3/manifests"},{"name":"v0.8.0b2","sha":"7ef409d72fbf1e34d1ba77cb074863974fae3c99","kind":"commit","published_at":"2024-07-22T17:29:29.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b2","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.0b2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b2/manifests"},{"name":"v0.8.0b1","sha":"1ada044d674565faa6673dcb0c14b324d68c2d96","kind":"commit","published_at":"2024-06-30T22:52:59.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.0b1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b1/manifests"},{"name":"v0.8.0b0","sha":"bba9e8bd0010177243eb5fe214fed91f8d6d37ea","kind":"commit","published_at":"2023-06-07T19:42:31.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.8.0b0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.8.0b0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.8.0b0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.8.0b0/manifests"},{"name":"v0.7.0","sha":"cae9918f1952b67695462daf326e516ca751ca09","kind":"commit","published_at":"2022-07-29T22:25:33.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.7.0","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.7.0/manifests"},{"name":"v0.6","sha":"8009167432ca1533d119ec7381a7ff751619067b","kind":"commit","published_at":"2021-06-17T00:17:48.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.6","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.6/manifests"},{"name":"v0.5","sha":"2bea3cdb683ca6d897c945c508636fa7225d7135","kind":"commit","published_at":"2020-06-04T03:37:37.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.5","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.5/manifests"},{"name":"v0.4","sha":"bcbfa0cedfbe58b4407b038011772deac69cbcfa","kind":"commit","published_at":"2020-05-25T13:37:33.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.4","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.4/manifests"},{"name":"v0.3","sha":"a69abad8cc927fb0c2858918d6b8b46a378420f2","kind":"commit","published_at":"2020-05-24T17:11:48.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.3","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.3/manifests"},{"name":"v0.2","sha":"ff195081eaba24cfc7dad6e8f51b37b3187628ab","kind":"commit","published_at":"2020-05-19T20:35:17.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.2","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.2/manifests"},{"name":"v0.1","sha":"9f0ebae02479f4239050c4e6c31e60a2fb26bd87","kind":"commit","published_at":"2020-05-19T20:33:21.000Z","download_url":"https://codeload.github.com/pyinat/naturtag/tar.gz/v0.1","html_url":"https://github.com/pyinat/naturtag/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/pyinat/naturtag@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/tags/v0.1/manifests"}]},"repo_metadata_updated_at":"2025-09-11T15:19:11.305Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/pyinat/naturtag","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/pyinat/naturtag","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/pyinat/naturtag","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/pyinat/naturtag/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-09-06T20:19:01.490Z","issues_count":93,"pull_requests_count":196,"avg_time_to_close_issue":14392099.96,"avg_time_to_close_pull_request":1617386.030487805,"issues_closed_count":50,"pull_requests_closed_count":164,"pull_request_authors_count":3,"issue_authors_count":8,"avg_comments_per_issue":0.3655913978494624,"avg_comments_per_pull_request":0.45918367346938777,"merged_pull_requests_count":61,"bot_issues_count":0,"bot_pull_requests_count":170,"past_year_issues_count":5,"past_year_pull_requests_count":52,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":2342024.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":35,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":4,"past_year_avg_comments_per_issue":0.2,"past_year_avg_comments_per_pull_request":0.4423076923076923,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":52,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/issues","maintainers":[{"login":"JWCook","count":109,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}],"active_maintainers":[{"login":"JWCook","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fpyinat%2Fnaturtag/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2145218,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":1327810,"full_name":"pyinat/naturtag","default_branch":"main","total_commits":841,"total_committers":3,"total_bot_commits":5,"total_bot_committers":1,"mean_commits":280.3333333333333,"dds":0.007134363852556502,"past_year_total_commits":228,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":228.0,"past_year_dds":0.0,"last_synced_at":"2026-05-18T19:02:04.525Z","last_synced_commit":"0ae744dcbf60c227efaa23ba943b8ef284bc6608","created_at":"2023-09-11T16:27:15.555Z","updated_at":"2026-05-18T19:02:04.373Z","committers":[{"name":"Jordan Cook","email":"jordan.cook.git@proton.me","login":"JWCook","count":835},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":5},{"name":"Kian-Meng Ang","email":"kianmeng@cpan.org","login":"kianmeng","count":1}],"past_year_committers":[{"name":"Jordan Cook","email":"jordan.cook.git@proton.me","login":"JWCook","count":228}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-20T00:00:33.744Z","repositories_count":6236310,"commits_count":884312328,"contributors_count":34882226,"owners_count":1155094,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"pyinat/naturtag","html_url":"https://github.com/pyinat/naturtag","last_synced_at":"2026-05-20T06:19:14.102Z","status":null,"issues_count":98,"pull_requests_count":221,"avg_time_to_close_issue":15075705.666666666,"avg_time_to_close_pull_request":1572233.3430232557,"issues_closed_count":51,"pull_requests_closed_count":172,"pull_request_authors_count":4,"issue_authors_count":12,"avg_comments_per_issue":0.40816326530612246,"avg_comments_per_pull_request":0.4343891402714932,"merged_pull_requests_count":63,"bot_issues_count":0,"bot_pull_requests_count":189,"past_year_issues_count":5,"past_year_pull_requests_count":32,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":575028.3333333334,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":9,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.1875,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":26,"past_year_merged_pull_requests_count":3,"created_at":"2023-05-14T18:24:11.764Z","updated_at":"2026-05-20T06:19:14.102Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyinat%2Fnaturtag/issues","issue_labels_count":{"ui":38,"data":26,"performance":12,"bug":11,"cli":10,"idea":8,"logistics":6,"enhancement":4,"docs":2,"question":1,"accessibility":1},"pull_request_labels_count":{"dependencies":173,"python":145,"github_actions":25,"ui":10,"logistics":8,"data":6,"bug":4,"enhancement":3,"python:uv":3,"performance":2,"docs":1,"cli":1},"issue_author_associations_count":{"COLLABORATOR":61,"MEMBER":24,"NONE":13},"pull_request_author_associations_count":{"CONTRIBUTOR":190,"MEMBER":19,"COLLABORATOR":11,"NONE":1},"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},"pull_request_authors":{"dependabot[bot]":189,"JWCook":30,"pete-builds":1,"kianmeng":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-20T00:00:29.037Z","repositories_count":14647940,"issues_count":34127483,"pull_requests_count":111762774,"authors_count":11267449,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"bug":3,"enhancement":2,"data":1,"performance":1},"past_year_pull_request_labels_count":{"dependencies":26,"github_actions":12,"python":11,"python:uv":3,"logistics":2,"docs":1,"data":1},"past_year_issue_author_associations_count":{"NONE":4,"MEMBER":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":26,"MEMBER":5,"NONE":1},"past_year_issue_authors":{"abubelinha":1,"baslat":1,"JWCook":1,"raduluchian":1,"theresep31":1},"past_year_pull_request_authors":{"dependabot[bot]":26,"JWCook":5,"pete-builds":1},"maintainers":[{"login":"JWCook","count":115,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}],"active_maintainers":[{"login":"JWCook","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JWCook"}]},"events":{"total":{"ReleaseEvent":6,"DeleteEvent":75,"PullRequestEvent":117,"DiscussionEvent":1,"IssuesEvent":56,"WatchEvent":4,"IssueCommentEvent":59,"PushEvent":193,"CreateEvent":69},"last_year":{"ReleaseEvent":2,"DeleteEvent":58,"PullRequestEvent":79,"DiscussionEvent":1,"IssuesEvent":49,"WatchEvent":2,"IssueCommentEvent":26,"PushEvent":183,"CreateEvent":42}},"keywords":["biodiversity","biodiversity-data","cli","darwin-core","dwc","exif","hierarchical-keywords","inaturalist","iptc","photography","taxonomy","xmp"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/build.yml","sha":null,"kind":"manifest","created_at":"2026-01-19T09:05:40.085Z","updated_at":"2026-01-19T09:05:40.085Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/.github/workflows/build.yml","dependencies":[{"id":25799683228,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v6","direct":true,"kind":"composite","optional":false},{"id":25799683229,"package_name":"astral-sh/setup-uv","ecosystem":"actions","requirements":"v7","direct":true,"kind":"composite","optional":false},{"id":25799683230,"package_name":"j178/prek-action","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"naturtag/storage/setup.py","sha":null,"kind":"manifest","created_at":"2026-01-19T09:05:42.349Z","updated_at":"2026-01-19T09:05:42.349Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/naturtag/storage/setup.py","dependencies":[]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2026-01-19T09:05:40.617Z","updated_at":"2026-01-19T09:05:40.617Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/Dockerfile","dependencies":[{"id":25799683231,"package_name":"carlonluca/qt-dev","ecosystem":"docker","requirements":"6.10.1","direct":true,"kind":"build","optional":false}]},{"ecosystem":"pypi","filepath":"uv.lock","sha":null,"kind":"lockfile","created_at":"2026-01-19T09:05:44.795Z","updated_at":"2026-01-19T09:05:44.795Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/uv.lock","dependencies":[{"id":25799683232,"package_name":"accessible-pygments","ecosystem":"pypi","requirements":"0.0.5","direct":false,"kind":"runtime","optional":false},{"id":25799683233,"package_name":"alabaster","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683234,"package_name":"altgraph","ecosystem":"pypi","requirements":"0.17.5","direct":false,"kind":"runtime","optional":false},{"id":25799683235,"package_name":"argcomplete","ecosystem":"pypi","requirements":"3.6.3","direct":false,"kind":"runtime","optional":false},{"id":25799683236,"package_name":"attrs","ecosystem":"pypi","requirements":"25.4.0","direct":false,"kind":"runtime","optional":false},{"id":25799683237,"package_name":"babel","ecosystem":"pypi","requirements":"2.17.0","direct":false,"kind":"runtime","optional":false},{"id":25799683238,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.14.3","direct":false,"kind":"runtime","optional":false},{"id":25799683239,"package_name":"cattrs","ecosystem":"pypi","requirements":"25.3.0","direct":false,"kind":"runtime","optional":false},{"id":25799683240,"package_name":"certifi","ecosystem":"pypi","requirements":"2026.1.4","direct":false,"kind":"runtime","optional":false},{"id":25799683241,"package_name":"cffi","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683242,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.4","direct":false,"kind":"runtime","optional":false},{"id":25799683243,"package_name":"click","ecosystem":"pypi","requirements":"8.3.1","direct":false,"kind":"runtime","optional":false},{"id":25799683244,"package_name":"click-help-colors","ecosystem":"pypi","requirements":"0.9.4","direct":false,"kind":"runtime","optional":false},{"id":25799683245,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":25799683246,"package_name":"colorful","ecosystem":"pypi","requirements":"0.5.8","direct":false,"kind":"runtime","optional":false},{"id":25799683247,"package_name":"colorlog","ecosystem":"pypi","requirements":"6.10.1","direct":false,"kind":"runtime","optional":false},{"id":25799683248,"package_name":"coverage","ecosystem":"pypi","requirements":"7.13.1","direct":false,"kind":"runtime","optional":false},{"id":25799683249,"package_name":"cryptography","ecosystem":"pypi","requirements":"46.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683250,"package_name":"darkdetect","ecosystem":"pypi","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":25799683251,"package_name":"dependency-groups","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25799683252,"package_name":"distlib","ecosystem":"pypi","requirements":"0.4.0","direct":false,"kind":"runtime","optional":false},{"id":25799683253,"package_name":"docutils","ecosystem":"pypi","requirements":"0.21.2","direct":false,"kind":"runtime","optional":false},{"id":25799683254,"package_name":"execnet","ecosystem":"pypi","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":25799683255,"package_name":"filelock","ecosystem":"pypi","requirements":"3.20.2","direct":false,"kind":"runtime","optional":false},{"id":25799683256,"package_name":"flatten-dict","ecosystem":"pypi","requirements":"0.4.2","direct":false,"kind":"runtime","optional":false},{"id":25799683257,"package_name":"furo","ecosystem":"pypi","requirements":"2025.12.19","direct":false,"kind":"runtime","optional":false},{"id":25799683258,"package_name":"greenlet","ecosystem":"pypi","requirements":"3.3.0","direct":false,"kind":"runtime","optional":false},{"id":25799683259,"package_name":"humanize","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"runtime","optional":false},{"id":25799683260,"package_name":"idna","ecosystem":"pypi","requirements":"3.11","direct":false,"kind":"runtime","optional":false},{"id":25799683261,"package_name":"imagesize","ecosystem":"pypi","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":25799683262,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":25799683263,"package_name":"jaraco-classes","ecosystem":"pypi","requirements":"3.4.0","direct":false,"kind":"runtime","optional":false},{"id":25799683264,"package_name":"jaraco-context","ecosystem":"pypi","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":25799683265,"package_name":"jaraco-functools","ecosystem":"pypi","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":25799683266,"package_name":"jeepney","ecosystem":"pypi","requirements":"0.9.0","direct":false,"kind":"runtime","optional":false},{"id":25799683267,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"runtime","optional":false},{"id":25799683268,"package_name":"keyring","ecosystem":"pypi","requirements":"25.7.0","direct":false,"kind":"runtime","optional":false},{"id":25799683269,"package_name":"linkify-it-py","ecosystem":"pypi","requirements":"2.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683270,"package_name":"macholib","ecosystem":"pypi","requirements":"1.16.4","direct":false,"kind":"runtime","optional":false},{"id":25799683271,"package_name":"markdown-it-py","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683272,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683273,"package_name":"mdit-py-plugins","ecosystem":"pypi","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":25799683274,"package_name":"mdurl","ecosystem":"pypi","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":25799683275,"package_name":"more-itertools","ecosystem":"pypi","requirements":"10.8.0","direct":false,"kind":"runtime","optional":false},{"id":25799683276,"package_name":"myst-parser","ecosystem":"pypi","requirements":"4.0.1","direct":false,"kind":"runtime","optional":false},{"id":25799683277,"package_name":"naturtag","ecosystem":"pypi","requirements":"0.8.2","direct":false,"kind":"runtime","optional":false},{"id":25799683278,"package_name":"nox","ecosystem":"pypi","requirements":"2025.11.12","direct":false,"kind":"runtime","optional":false},{"id":25799683279,"package_name":"packaging","ecosystem":"pypi","requirements":"25.0","direct":false,"kind":"runtime","optional":false},{"id":25799683280,"package_name":"pbr","ecosystem":"pypi","requirements":"7.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683281,"package_name":"pefile","ecosystem":"pypi","requirements":"2024.8.26","direct":false,"kind":"runtime","optional":false},{"id":25799683282,"package_name":"pillow","ecosystem":"pypi","requirements":"12.1.0","direct":false,"kind":"runtime","optional":false},{"id":25799683283,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.5.1","direct":false,"kind":"runtime","optional":false},{"id":25799683284,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":25799683285,"package_name":"prek","ecosystem":"pypi","requirements":"0.2.27","direct":false,"kind":"runtime","optional":false},{"id":25799683286,"package_name":"prettyprinter","ecosystem":"pypi","requirements":"0.18.0","direct":false,"kind":"runtime","optional":false},{"id":25799683287,"package_name":"pycparser","ecosystem":"pypi","requirements":"2.23","direct":false,"kind":"runtime","optional":false},{"id":25799683288,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"2.15.5","direct":false,"kind":"runtime","optional":false},{"id":25799683289,"package_name":"pygments","ecosystem":"pypi","requirements":"2.19.2","direct":false,"kind":"runtime","optional":false},{"id":25799683290,"package_name":"pyinaturalist","ecosystem":"pypi","requirements":"0.20.2","direct":false,"kind":"runtime","optional":false},{"id":25799683291,"package_name":"pyinaturalist-convert","ecosystem":"pypi","requirements":"0.7.2","direct":false,"kind":"runtime","optional":false},{"id":25799683292,"package_name":"pyinstaller","ecosystem":"pypi","requirements":"6.17.0","direct":false,"kind":"runtime","optional":false},{"id":25799683293,"package_name":"pyinstaller-hooks-contrib","ecosystem":"pypi","requirements":"2025.11","direct":false,"kind":"runtime","optional":false},{"id":25799683294,"package_name":"pyqtdarktheme-fork","ecosystem":"pypi","requirements":"2.3.4","direct":false,"kind":"runtime","optional":false},{"id":25799683295,"package_name":"pyrate-limiter","ecosystem":"pypi","requirements":"2.10.0","direct":false,"kind":"runtime","optional":false},{"id":25799683296,"package_name":"pyside6","ecosystem":"pypi","requirements":"6.10.1","direct":false,"kind":"runtime","optional":false},{"id":25799683297,"package_name":"pyside6-addons","ecosystem":"pypi","requirements":"6.10.1","direct":false,"kind":"runtime","optional":false},{"id":25799683298,"package_name":"pyside6-essentials","ecosystem":"pypi","requirements":"6.10.1","direct":false,"kind":"runtime","optional":false},{"id":25799683299,"package_name":"pytest","ecosystem":"pypi","requirements":"9.0.2","direct":false,"kind":"runtime","optional":false},{"id":25799683300,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"7.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683301,"package_name":"pytest-xdist","ecosystem":"pypi","requirements":"3.8.0","direct":false,"kind":"runtime","optional":false},{"id":25799683302,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":25799683303,"package_name":"pywin32-ctypes","ecosystem":"pypi","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":25799683304,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683305,"package_name":"qtawesome","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":25799683306,"package_name":"qtpy","ecosystem":"pypi","requirements":"2.4.3","direct":false,"kind":"runtime","optional":false},{"id":25799683307,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.5","direct":false,"kind":"runtime","optional":false},{"id":25799683308,"package_name":"requests-cache","ecosystem":"pypi","requirements":"1.2.1","direct":false,"kind":"runtime","optional":false},{"id":25799683309,"package_name":"requests-ratelimiter","ecosystem":"pypi","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":25799683310,"package_name":"rich","ecosystem":"pypi","requirements":"14.2.0","direct":false,"kind":"runtime","optional":false},{"id":25799683311,"package_name":"roman-numerals","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":25799683312,"package_name":"roman-numerals-py","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":25799683313,"package_name":"secretstorage","ecosystem":"pypi","requirements":"3.5.0","direct":false,"kind":"runtime","optional":false},{"id":25799683314,"package_name":"setuptools","ecosystem":"pypi","requirements":"80.9.0","direct":false,"kind":"runtime","optional":false},{"id":25799683315,"package_name":"shiboken6","ecosystem":"pypi","requirements":"6.10.1","direct":false,"kind":"runtime","optional":false},{"id":25799683316,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":25799683317,"package_name":"snowballstemmer","ecosystem":"pypi","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":25799683318,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.8.1","direct":false,"kind":"runtime","optional":false},{"id":25799683319,"package_name":"sphinx","ecosystem":"pypi","requirements":"8.2.3","direct":false,"kind":"runtime","optional":false},{"id":25799683320,"package_name":"sphinx-autodoc-typehints","ecosystem":"pypi","requirements":"3.5.2","direct":false,"kind":"runtime","optional":false},{"id":25799683321,"package_name":"sphinx-basic-ng","ecosystem":"pypi","requirements":"1.0.0b2","direct":false,"kind":"runtime","optional":false},{"id":25799683322,"package_name":"sphinx-copybutton","ecosystem":"pypi","requirements":"0.5.2","direct":false,"kind":"runtime","optional":false},{"id":25799683323,"package_name":"sphinx-design","ecosystem":"pypi","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":25799683324,"package_name":"sphinxcontrib-apidoc","ecosystem":"pypi","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":25799683325,"package_name":"sphinxcontrib-applehelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683326,"package_name":"sphinxcontrib-devhelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683327,"package_name":"sphinxcontrib-htmlhelp","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25799683328,"package_name":"sphinxcontrib-jsmath","ecosystem":"pypi","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":25799683329,"package_name":"sphinxcontrib-qthelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683330,"package_name":"sphinxcontrib-serializinghtml","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25799683331,"package_name":"sqlalchemy","ecosystem":"pypi","requirements":"2.0.45","direct":false,"kind":"runtime","optional":false},{"id":25799683332,"package_name":"tablib","ecosystem":"pypi","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":25799683333,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"runtime","optional":false},{"id":25799683334,"package_name":"uc-micro-py","ecosystem":"pypi","requirements":"1.0.3","direct":false,"kind":"runtime","optional":false},{"id":25799683335,"package_name":"url-normalize","ecosystem":"pypi","requirements":"2.2.1","direct":false,"kind":"runtime","optional":false},{"id":25799683336,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.6.3","direct":false,"kind":"runtime","optional":false},{"id":25799683337,"package_name":"virtualenv","ecosystem":"pypi","requirements":"20.36.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/deploy.yml","sha":null,"kind":"manifest","created_at":"2023-01-31T23:31:15.714Z","updated_at":"2023-01-31T23:31:15.714Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/.github/workflows/deploy.yml","dependencies":[{"id":7283436690,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7283436691,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":7283436692,"package_name":"snok/install-poetry","ecosystem":"actions","requirements":"v1.3.3","direct":true,"kind":"composite","optional":false},{"id":7283436693,"package_name":"actions/cache","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7283436694,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7283436695,"package_name":"actions/download-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7283436696,"package_name":"softprops/action-gh-release","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:31:18.846Z","updated_at":"2023-09-21T19:31:18.846Z","repository_link":"https://github.com/pyinat/naturtag/blob/main/pyproject.toml","dependencies":[{"id":13856715176,"package_name":"python","ecosystem":"pypi","requirements":"\u003e=3.10,\u003c3.11","direct":true,"kind":"runtime","optional":false},{"id":13856715177,"package_name":"attrs","ecosystem":"pypi","requirements":"\u003e=21.2","direct":true,"kind":"runtime","optional":false},{"id":13856715178,"package_name":"click","ecosystem":"pypi","requirements":"\u003e=8.0","direct":true,"kind":"runtime","optional":false},{"id":13856715179,"package_name":"click-help-colors","ecosystem":"pypi","requirements":"\u003e=0.9","direct":true,"kind":"runtime","optional":false},{"id":13856715180,"package_name":"pillow","ecosystem":"pypi","requirements":"\u003e=10.0","direct":true,"kind":"runtime","optional":false},{"id":13856715181,"package_name":"pyexiv2","ecosystem":"pypi","requirements":"\u003e=2.6.2","direct":true,"kind":"runtime","optional":false},{"id":13856715182,"package_name":"pyinaturalist","ecosystem":"pypi","requirements":"\u003e=0.18","direct":true,"kind":"runtime","optional":false},{"id":13856715183,"package_name":"pyinaturalist-convert","ecosystem":"pypi","requirements":"\u003e=0.6.1","direct":true,"kind":"runtime","optional":false},{"id":13856715184,"package_name":"pyside6","ecosystem":"pypi","requirements":"6.5.0","direct":true,"kind":"runtime","optional":false},{"id":13856715185,"package_name":"pyqtdarktheme","ecosystem":"pypi","requirements":"^2.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856715186,"package_name":"pyyaml","ecosystem":"pypi","requirements":"\u003e=6.0","direct":true,"kind":"runtime","optional":false},{"id":13856715187,"package_name":"qtawesome","ecosystem":"pypi","requirements":"^1.1.1","direct":true,"kind":"runtime","optional":false},{"id":13856715188,"package_name":"sqlalchemy","ecosystem":"pypi","requirements":"^2.0.8","direct":true,"kind":"runtime","optional":false},{"id":13856715189,"package_name":"tablib","ecosystem":"pypi","requirements":"^3.0","direct":true,"kind":"runtime","optional":false},{"id":13856715190,"package_name":"furo","ecosystem":"pypi","requirements":"^2023.3","direct":true,"kind":"runtime","optional":false},{"id":13856715191,"package_name":"linkify-it-py","ecosystem":"pypi","requirements":"^2.0","direct":true,"kind":"runtime","optional":false},{"id":13856715192,"package_name":"myst-parser","ecosystem":"pypi","requirements":"^1.0","direct":true,"kind":"runtime","optional":false},{"id":13856715193,"package_name":"sphinx","ecosystem":"pypi","requirements":"^5.2","direct":true,"kind":"runtime","optional":false},{"id":13856715194,"package_name":"sphinx-autodoc-typehints","ecosystem":"pypi","requirements":"^1.17","direct":true,"kind":"runtime","optional":false},{"id":13856715195,"package_name":"sphinx-copybutton","ecosystem":"pypi","requirements":"\u003e=0.5","direct":true,"kind":"runtime","optional":false},{"id":13856715196,"package_name":"sphinx-design","ecosystem":"pypi","requirements":"\u003e=0.2","direct":true,"kind":"runtime","optional":false},{"id":13856715197,"package_name":"sphinxcontrib-apidoc","ecosystem":"pypi","requirements":"^0.3","direct":true,"kind":"runtime","optional":false},{"id":13856715198,"package_name":"babel","ecosystem":"pypi","requirements":"\u003e=2.0","direct":true,"kind":"develop","optional":false},{"id":13856715199,"package_name":"coverage","ecosystem":"pypi","requirements":"^7.0","direct":true,"kind":"develop","optional":false},{"id":13856715200,"package_name":"nox","ecosystem":"pypi","requirements":"^2023.4","direct":true,"kind":"develop","optional":false},{"id":13856715201,"package_name":"nox-poetry","ecosystem":"pypi","requirements":"^1.0","direct":true,"kind":"develop","optional":false},{"id":13856715202,"package_name":"pre-commit","ecosystem":"pypi","requirements":"^3.1","direct":true,"kind":"develop","optional":false},{"id":13856715203,"package_name":"prettyprinter","ecosystem":"pypi","requirements":"^0.18.0","direct":true,"kind":"develop","optional":false},{"id":13856715204,"package_name":"pyinstaller","ecosystem":"pypi","requirements":"^5.12","direct":true,"kind":"develop","optional":false},{"id":13856715205,"package_name":"pytest","ecosystem":"pypi","requirements":"^7.3","direct":true,"kind":"develop","optional":false},{"id":13856715206,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"\u003e=3.0","direct":true,"kind":"develop","optional":false},{"id":13856715207,"package_name":"pytest-xdist","ecosystem":"pypi","requirements":"\u003e=2.2","direct":true,"kind":"develop","optional":false}]}],"score":10.496593378915847,"created_at":"2023-09-18T13:11:57.680Z","updated_at":"2026-05-21T20:30:22.406Z","avatar_url":"https://github.com/pyinat.png","language":"Python","category":"Biosphere","sub_category":"Biodiversity Citizen Science","monthly_downloads":102,"total_dependent_repos":1,"total_dependent_packages":0,"readme":"# Naturtag\n\n[![Build status](https://github.com/pyinat/naturtag/actions/workflows/test.yml/badge.svg)](https://github.com/pyinat/naturtag/actions)\n[![Codecov](https://codecov.io/gh/pyinat/naturtag/graph/badge.svg?token=KB6A8LPMB1)](https://codecov.io/gh/pyinat/naturtag)\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 Versions](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 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[EXIF](https://en.wikipedia.org/wiki/Exif),\n[XMP](https://en.wikipedia.org/wiki/Extensible_Metadata_Platform), and\n[Simple Darwin Core](https://dwc.tdwg.org/simple) 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![Hierarchical keyword taxonomy tree in XnView](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![Taxonomy tags displayed on a Flickr photo](assets/screenshots/flickr.png)\n\u003c/details\u003e\n\n## Installation\nPackages are available on [GitHub Releases](https://github.com/pyinat/naturtag/releases) for\nWindows, macOS, and most major Linux distributions. See\n[Installation](https://naturtag.readthedocs.io/en/stable/installation.html) for instructions.\n\nIt can also be installed from PyPI. Example with [`uv`](https://docs.astral.sh/uv):\n```sh\nuv tool 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![Image selector interface showing file browser and tagged photos](assets/screenshots/image-selector.png)\n\nAnd tools to search and browse species and observations to tag your images with:\n\n![Taxon search interface](assets/screenshots/taxon-search.png)\n\n![Observation browser interface](assets/screenshots/observation-browser.png)\n\nThe general workflow currently looks like:\n* Upload an observation to iNaturalist\n* Load your local photos in Naturtag\n* Select your observation in Naturtag and tag images\n\nAfter initial tagging, future updates are simpler:\n* Load local photos in Naturtag (optionally for multiple observations/taxa)\n* Click 'Refresh tags' to fetch any updates from iNaturalist and apply to your local photos\n\nAlternatively, without iNaturalist:\n* Load your local photos in Naturtag\n* Select a taxon in Naturtag and tag images\n\nSee [Application Guide](https://naturtag.readthedocs.io/en/stable/app.html) for more details.\n\nBulk tagging features (for handling multiple observations/taxa at a time) are planned for a future release.\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) (for more open-ended questions)\n  * Ping me (**@jcook**) on the [iNaturalist Community Forum](https://forum.inaturalist.org/c/general/14).\n* Many features of naturtag have been added upstream to other libraries I maintain. You can follow development of those projects here:\n  * [pyinaturalist](https://github.com/pyinat/pyinaturalist)\n  * [pyinaturalist-convert](https://github.com/pyinat/pyinaturalist-convert)\n  * [requests-cache](https://github.com/requests-cache/requests-cache)\n  * [requests-ratelimiter](https://github.com/JWCook/requests-ratelimiter)\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["transforms","optimize","archiving","measur","investments","generic","animals","products","humanities","compose"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/66313","html_url":"https://ost.ecosyste.ms/projects/66313"}