{"adoption": {"forks": 159, "observed_at": "2026-08-28T04:08:18.347402+00:00", "stars": 3781}, "canonical_url": "https://ross.abutalabs.com/products/osxphotos", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Python app to work with pictures and associated metadata from Apple Photos on macOS. Also includes a package to provide programmatic access to the Photos library, pictures, and metadata. ", "domain": ["photography", "apple-ecosystem", "files", "media"], "enriched": true, "function": ["image-processing", "cli", "file-system", "developer-tools"], "health_score": 95, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["RhetTbull/osxphotos"], "name": "RhetTbull/osxphotos", "platform": ["python", "cli"], "pushed_at": "2026-07-22T12:32:11+00:00", "repo": "RhetTbull/osxphotos", "stars": 3781, "tags": ["apple-photos", "photos-export", "photo-library", "metadata", "exif", "iphoto", "command-line", "macos", "linux"], "topics": ["apple-photos", "photos-export", "library-photos", "photos-database", "apple-photos-export", "python", "photos", "pictures", "macos", "macosx", "osx", "apple"], "urls": [], "use_cases": ["export photos from Apple Photos library", "query Apple Photos database for keywords and albums", "bulk export photos with metadata from Photos.app", "access Photos library programmatically from Python", "migrate photos out of Apple Photos", "export faces and person metadata from Photos"], "what_it_is": "A Python CLI tool and library for querying and exporting photos and metadata from Apple's Photos.app library on macOS (with partial Linux support). It exposes file paths, keywords, faces, albums, and export capabilities both via command line and a Python API.", "when_to_avoid": ["you need a cross-platform photo manager independent of Apple Photos", "you primarily work on Windows or Linux without a Photos library copy", "you need shared album support on macOS 26.x"], "when_to_choose": ["you use Apple Photos on macOS and need scripted access to your library", "you want to export originals and edited versions with full metadata", "you need to query albums, keywords, or faces from the Photos database"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/osxphotos", "repo": "RhetTbull/osxphotos", "role": "main", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.347402+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:27:44.841867+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "adf540a2c32531405628513107c45b417ca644501e21e305ed31a3266b8336b2", "fetched_at": "2026-08-28T04:08:18.347402+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhetTbull/osxphotos"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 88}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2635, "days_push": 42, "days_rel": 80, "gap_med": 14, "n_releases_24m": 28}, "score": 93, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}