{"adoption": {"forks": 223, "observed_at": "2026-08-28T04:03:20.140049+00:00", "stars": 1040}, "canonical_url": "https://ross.abutalabs.com/products/klipper_tmc_autotune", "card": {"archived": false, "artifact_type": "plugin", "description": "TMC stepper driver autotuning Klipper python extra", "domain": ["hardware", "self-hosted"], "enriched": true, "function": ["configuration-management", "developer-tools"], "health_score": 80, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["andrewmcgr/klipper_tmc_autotune"], "name": "andrewmcgr/klipper_tmc_autotune", "platform": ["python", "embedded"], "pushed_at": "2026-08-22T02:37:45+00:00", "repo": "andrewmcgr/klipper_tmc_autotune", "stars": 1040, "tags": ["klipper", "3d-printing", "tmc-stepper-drivers", "autotuning", "firmware-extension", "moonraker", "automation", "linux"], "topics": [], "urls": [], "use_cases": ["automatically tune TMC stepper drivers in Klipper", "reduce stepper motor noise and power consumption on a 3D printer", "enable StealthChop and CoolStep without manual register configuration", "set up sensorless homing with autotuned TMC2209, TMC2240, or TMC5160 drivers", "optimize driver registers from motor datasheet values", "keep 3D printer motors running cooler with automatic driver tuning"], "what_it_is": "A Klipper python extra that automatically calculates and tunes TMC stepper motor driver register values based on motor datasheet information and a user-selected tuning goal. It enables modes like StealthChop and CoolStep, optimizes for low power and quiet operation, and supports sensorless homing on supported drivers.", "when_to_avoid": ["you use TMC2130, TMC2208, or TMC2660 drivers, which are untested", "you need full manual control over every TMC register value", "your printer cannot provide adequate cooling for hotter-running drivers", "you don't use Klipper firmware"], "when_to_choose": ["you run Klipper firmware with TMC2209, TMC2240, or TMC5160 stepper drivers and want automatic tuning", "you want quieter, more efficient stepper operation without manually calculating register values", "you want sensorless homing combined with autotuned driver settings", "you use KIAUH or Moonraker and want a community extension with automatic updates"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/klipper_tmc_autotune", "repo": "andrewmcgr/klipper_tmc_autotune", "role": "main", "score": 64}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "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:20.140049+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:20.140049+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:03:08.303212+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e7d74c239cc516383e8e7943078847b6787bda1b31a83c67ffa10cf0b08c87d", "fetched_at": "2026-08-28T04:03:20.140049+00:00", "kind": "readme", "missing": false, "url": "https://github.com/andrewmcgr/klipper_tmc_autotune"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 84, "rhythm": 8}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1187, "days_push": 12, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 64, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}