{"adoption": {"forks": 354, "observed_at": "2026-08-28T04:03:59.460068+00:00", "stars": 1208}, "canonical_url": "https://ross.abutalabs.com/products/artisan", "card": {"archived": false, "artifact_type": "application", "description": "artisan scope: the world's most trusted roasting software", "domain": ["hardware", "cross-platform", "analytics"], "enriched": true, "function": ["data-visualization", "monitoring", "workflow-automation", "iot", "gui"], "health_score": 100, "homepage": "https://artisan-scope.org", "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "stable", "member_repos": ["artisan-roaster-scope/artisan"], "name": "artisan-roaster-scope/artisan", "platform": ["windows", "python", "cross-platform"], "pushed_at": "2026-08-25T13:24:09+00:00", "repo": "artisan-roaster-scope/artisan", "stars": 1208, "tags": ["coffee-roasting", "roast-profiling", "thermocouple", "pid-control", "modbus", "mqtt", "hardware-integration", "automation", "real-time", "macos", "linux", "desktop"], "topics": ["coffee", "thermocouple", "fuji", "phidgets", "coffee-roasting", "probat", "modbus", "hottop", "aillio", "yoctopuce", "roasting", "acaia", "automation", "mqtt", "s7", "websockets", "roest"], "urls": [], "use_cases": ["log and chart coffee roast temperature curves", "control a coffee roaster with PID automation", "track rate-of-rise and development time ratio during roasts", "replay reference roast profiles automatically", "connect a thermocouple data logger to a computer", "manage roast profiles for a small coffee roasting business", "import and export roast data from Cropster or IKAWA"], "what_it_is": "Artisan scope is a free, open-source desktop application for coffee roasters to record, visualize, analyze, and control roast profiles. It connects to 200+ roasting machines and 50+ data-logging devices (thermocouples, PID controllers) and supports automation, alarms, and profile replay.", "when_to_avoid": ["you need a general-purpose data logger unrelated to coffee roasting", "you want a cloud-only or mobile solution", "you need a lightweight library to embed in another app rather than a standalone GUI application"], "when_to_choose": ["you roast coffee and want to profile, analyze, or automate roasts", "you need hardware support for many roasting machines and temperature devices", "you want a free, cross-platform, actively maintained roasting tool", "you need event detection, alarms, and between-batch protocols"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/artisan", "repo": "artisan-roaster-scope/artisan", "role": "main", "score": 92}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "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:03:59.460068+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:59.460068+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:18:38.890348+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bf2d0849746a73d08518ebd1b7fd4714e5388ed2156c918d10dae8ee033be005", "fetched_at": "2026-08-28T04:03:59.460068+00:00", "kind": "readme", "missing": false, "url": "https://github.com/artisan-roaster-scope/artisan"}, {"content_hash": "5f05dc4f092ece71b43e2186914a2f5f3d812506216b029c26372074f7aa47cf", "fetched_at": "2026-08-29T12:26:40.076929+00:00", "kind": "homepage", "missing": false, "url": "https://artisan-scope.org"}, {"content_hash": "36274b093281715219405be0283d69dc7630bd40367cce7a965f6afab21f0967", "fetched_at": "2026-08-29T12:26:40.086439+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/about"}, {"content_hash": "86178280ceef7db50ee661c8d51fe97b6d0718e781fa43813387bfe8b426d05d", "fetched_at": "2026-08-29T12:26:40.088487+00:00", "kind": "site_page", "missing": false, "url": "https://artisan-scope.org/docs"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 78}, "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": 4191, "days_push": 8, "days_rel": 64, "gap_med": 87, "n_releases_24m": 8}, "score": 92, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}