{"adoption": {"forks": 69, "observed_at": "2026-08-28T04:05:10.940208+00:00", "stars": 1610}, "canonical_url": "https://ross.abutalabs.com/products/petrichor", "card": {"archived": false, "artifact_type": "application", "description": "An offline macOS music player", "domain": ["media", "desktop-applications", "apple-ecosystem"], "enriched": true, "function": ["audio-processing", "gui"], "health_score": 100, "homepage": "https://petrichor.page", "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["kushalpandya/Petrichor"], "name": "kushalpandya/Petrichor", "platform": [], "pushed_at": "2026-08-24T19:19:48+00:00", "repo": "kushalpandya/Petrichor", "stars": 1610, "tags": ["music-player", "offline-music", "audio-playback", "playlists", "lyrics", "lastfm-scrobbling", "equalizer", "swift", "native-app", "macos", "desktop"], "topics": ["audio-player", "desktop-app", "macos", "macos-app", "macos-application", "macos-swift", "mp3-player", "music-player", "ogg-vorbis"], "urls": [], "use_cases": ["play local mp3 and flac files on mac without streaming", "organize a large offline music library by artist album and genre", "create smart playlists with rules based on genre year and play count", "view synced lyrics while listening to tracks", "scrobble plays to last.fm from a local library", "play obscure audio formats like ape wavpack and dsd on mac", "control music playback with siri and shortcuts", "use an equalizer and gapless playback for local music"], "what_it_is": "Petrichor is a free, open-source, native macOS music player for offline local music libraries, supporting over 20 audio formats including MP3, FLAC, ALAC, Ogg Vorbis, and DSD. It offers library organization by metadata, smart playlists, synced lyrics, a 10-band equalizer, gapless playback, Last.fm scrobbling, and Siri/Shortcuts integration.", "when_to_avoid": ["you want streaming services like Spotify or Apple Music built in", "you need a cross-platform player for Windows or Linux", "your tracks have poor or missing metadata, since the library relies heavily on tags", "you need extensive tag editing, as the app never writes to files"], "when_to_choose": ["you have a local music collection and want a native, offline macOS player", "you need broad audio format support including lossless and exotic formats", "you want streaming-app-like features (smart playlists, lyrics, go-to navigation) without a subscription", "you care about privacy and an app that never modifies your files"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/petrichor", "repo": "kushalpandya/Petrichor", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "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:05:10.940208+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:10.940208+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:51:14.939686+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6805fcf382d4c9215ba022e96a79f84abc32ec4a2a4ff0217aed5143dba6c8bb", "fetched_at": "2026-08-28T04:05:10.940208+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kushalpandya/Petrichor"}, {"content_hash": "eb5edbf17c0a1b8a65c2d324f3a19af04168cad36a49a92f5b2377c1543445ed", "fetched_at": "2026-08-29T11:23:19.317442+00:00", "kind": "homepage", "missing": false, "url": "https://petrichor.page"}, {"content_hash": "8c8ede0d2ca0eb59162e34abf40136e5749322a98ac857bb0be28f8328754ac4", "fetched_at": "2026-08-29T11:23:19.326534+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/features"}, {"content_hash": "938bcae15628aeeaaa8f0afc485e1893901be2a7552d12658e1e8988564ea19a", "fetched_at": "2026-08-29T11:23:19.328523+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/faq"}, {"content_hash": "542226f5ea9a61a4d4c64cef6b1ac530e626dcbd558e56411f92ab24fcde6848", "fetched_at": "2026-08-29T11:23:19.330479+00:00", "kind": "site_page", "missing": false, "url": "https://petrichor.page/changelog"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 35, "rhythm": 94}, "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": 501, "days_push": 9, "days_rel": 42, "gap_med": 8, "n_releases_24m": 28}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}