{"adoption": {"forks": 168, "observed_at": "2026-08-28T04:07:06.655707+00:00", "stars": 2644}, "canonical_url": "https://ross.abutalabs.com/products/exifcleaner", "card": {"archived": false, "artifact_type": "application", "description": "Cross-platform desktop GUI app to clean image metadata", "domain": ["privacy", "image-processing", "desktop-applications", "security", "pdf"], "enriched": true, "function": ["image-processing", "privacy", "gui", "pdf", "security"], "health_score": 100, "homepage": "https://exifcleaner.com", "language": "Perl", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["szTheory/exifcleaner"], "name": "szTheory/exifcleaner", "platform": ["windows", "cross-platform"], "pushed_at": "2026-08-24T13:03:41+00:00", "repo": "szTheory/exifcleaner", "stars": 2644, "tags": ["exif", "metadata-removal", "exiftool", "electron", "batch-processing", "drag-and-drop", "dark-mode", "no-telemetry", "macos", "linux", "desktop"], "topics": ["exif", "exiftool", "electron", "javascript", "nodejs", "desktop-app", "macos", "windows", "linux", "parallel", "image-processing", "privacy", "security", "open-source", "gui", "dark-mode", "pdf", "video", "image", "concurrency"], "urls": [], "use_cases": ["remove exif data from photos before sharing", "strip gps location from images", "batch clean metadata from hundreds of files", "remove metadata from pdfs", "inspect what metadata a photo contains", "clean camera info from videos", "scrub metadata for privacy before uploading"], "what_it_is": "ExifCleaner is a free, open-source cross-platform desktop GUI app that strips EXIF and other metadata from images, videos, and PDFs using ExifTool under the hood. It supports fast batch processing via drag and drop, metadata inspection with before/after diffs, and privacy controls, with zero telemetry or network access.", "when_to_avoid": ["you need programmatic or CLI-based metadata manipulation in a script or pipeline", "you require code-signed binaries to avoid OS warnings on first launch", "you need to edit or add metadata rather than remove it", "you want a lightweight native app and refuse to run Electron software"], "when_to_choose": ["you want a simple GUI for removing metadata without using the exiftool command line", "you need batch processing of images, videos, or PDFs across macOS, Windows, or Linux", "you care about privacy and want an app with no telemetry or network access", "you want to see exactly which metadata fields were removed from each file"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/exifcleaner", "repo": "szTheory/exifcleaner", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "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:07:06.655707+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:06.655707+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:19:01.228460+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e334436634c975f27f2a7b2726ca558753f937156332181dd2fa7c7efbb74a45", "fetched_at": "2026-08-28T04:07:06.655707+00:00", "kind": "readme", "missing": false, "url": "https://github.com/szTheory/exifcleaner"}, {"content_hash": "dcc6bc96abb1ba63d17e2ee673904492c34a1da1879bc743cc2ee8a74059b352", "fetched_at": "2026-08-29T10:01:51.248315+00:00", "kind": "homepage", "missing": false, "url": "https://exifcleaner.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 98}, "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": 2463, "days_push": 9, "days_rel": 12, "gap_med": 2.0, "n_releases_24m": 5}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}