{"adoption": {"forks": 80, "observed_at": "2026-08-28T04:04:07.672294+00:00", "stars": 1247}, "canonical_url": "https://ross.abutalabs.com/products/exifr", "card": {"archived": false, "artifact_type": "library", "description": "📷 The fastest and most versatile JS EXIF reading library.", "domain": ["image-processing", "photography", "files", "web-development"], "enriched": true, "function": ["parser", "image-processing", "file-system"], "health_score": 20, "homepage": "https://mutiny.cz/exifr/", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["MikeKovarik/exifr"], "name": "MikeKovarik/exifr", "platform": ["browser", "cross-platform"], "pushed_at": "2024-03-29T18:47:15+00:00", "repo": "MikeKovarik/exifr", "stars": 1247, "tags": ["exif", "metadata", "jpg", "heic", "tiff", "xmp", "gps", "iptc", "icc", "isomorphic", "zero-dependency", "nodejs", "javascript"], "topics": ["exif", "metadata", "jpg", "parser", "tiff", "heic", "icc", "iptc", "xmp", "jfif", "photo", "gps", "orientation", "png"], "urls": [], "use_cases": ["extract exif data from photos in the browser", "read gps coordinates from jpeg images in node", "parse image orientation to auto-rotate photos", "get xmp and iptc metadata from heic files", "extract thumbnails from images", "read image metadata without loading the whole file"], "what_it_is": "exifr is a fast, dependency-free JavaScript library for reading EXIF and other image metadata (TIFF, XMP, ICC, IPTC, GPS, JFIF) from JPG, PNG, HEIC, AVIF, and TIFF files. It works isomorphically in browsers and Node.js, parsing only the bytes needed for speed.", "when_to_avoid": ["you need to write or edit EXIF metadata, not just read it", "you need metadata for non-image file types like video or raw camera formats beyond those supported", "you're outside the JavaScript ecosystem"], "when_to_choose": ["you need fast, dependency-free EXIF/metadata parsing in JavaScript", "you need isomorphic support for browser and Node.js", "you work with multiple formats like JPG, HEIC, PNG, TIFF, AVIF", "you need GPS, XMP, ICC, or IPTC segments, not just basic EXIF"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/exifr", "repo": "MikeKovarik/exifr", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "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:04:07.672294+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:07.672294+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:07:55.743188+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "deaf68f1c842133a3128ed3f85ea61cf70f64f6a0f0fa3fe65531901f815f42a", "fetched_at": "2026-08-28T04:04:07.672294+00:00", "kind": "readme", "missing": false, "url": "https://github.com/MikeKovarik/exifr"}, {"content_hash": "192d21a4621a6600e06f5ce5a99a67fa062b39b2d0752c5f3bc5e88597bc0b34", "fetched_at": "2026-08-29T12:19:14.750517+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/exifr"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 2954, "days_push": 887, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}