{"adoption": {"forks": 11, "observed_at": "2026-08-28T04:04:34.892660+00:00", "stars": 1385}, "canonical_url": "https://ross.abutalabs.com/products/open-spectrometer-python", "card": {"archived": false, "artifact_type": "library", "description": "Open Source Spectrometer Python Scripts", "domain": ["education", "hardware", "data-visualization"], "enriched": true, "function": ["data-visualization", "image-processing", "developer-tools"], "health_score": 20, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["OpnTec/open-spectrometer-python"], "name": "OpnTec/open-spectrometer-python", "platform": ["python", "windows", "cross-platform"], "pushed_at": "2021-07-21T14:53:55+00:00", "repo": "OpnTec/open-spectrometer-python", "stars": 1385, "tags": ["spectrometer", "citizen-science", "open-hardware", "scientific-instrumentation", "usb", "calibration", "absorbance-spectra", "science", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["capture and plot absorbance spectra from a DIY webcam spectrometer", "calibrate a homemade spectrometer for scientific measurements", "teach students how scientific instruments and measurements work", "run citizen science spectroscopy experiments with open hardware", "assess the quality of spectral data collected with a low-cost device", "upload spectrometer samples to spectralworkbench.org"], "what_it_is": "Python scripts for the open-source webcam-based spectrometer project, enabling users to collect, calibrate, and analyze spectral measurements via USB. The two main scripts, analyse.py and calibrate.py, plot absorbance spectra and help users understand scientific measurement quality.", "when_to_avoid": ["you need a professional-grade spectrometer analysis suite with advanced spectroscopy algorithms", "your spectrometer is not compatible with the open spectrometer webcam hardware design", "you need actively maintained software with recent updates and dedicated support channels"], "when_to_choose": ["you built or use the open spectrometer hardware and need software to analyze its data", "you want an open, reproducible educational tool for teaching spectroscopy", "you need simple Python scripts to calibrate and plot absorbance spectra from USB spectrometer data"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/open-spectrometer-python", "repo": "OpnTec/open-spectrometer-python", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "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:34.892660+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:34.892660+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:39:56.078022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2f0142644ba5104392ed26e0918479206340b93dcb1e7e34721bbfd45b57c586", "fetched_at": "2026-08-28T04:04:34.892660+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpnTec/open-spectrometer-python"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3204, "days_push": 1869, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}