{"adoption": {"forks": 121, "observed_at": "2026-08-28T04:07:21.727150+00:00", "stars": 2781}, "canonical_url": "https://ross.abutalabs.com/products/nodezator", "card": {"archived": false, "artifact_type": "application", "description": "A generalist Python node editor", "domain": ["developer-tools", "desktop-applications", "cross-platform"], "enriched": true, "function": ["gui", "developer-tools", "workflow-automation", "graphics"], "health_score": 97, "homepage": "https://nodezator.com", "language": "Python", "license": "Unlicense", "license_family": "permissive", "maturity": "active", "member_repos": ["IndieSmiths/nodezator"], "name": "IndieSmiths/nodezator", "platform": ["python", "cross-platform", "windows"], "pushed_at": "2026-08-22T19:21:27+00:00", "repo": "IndieSmiths/nodezator", "stars": 2781, "tags": ["node-editor", "visual-programming", "pygame-ce", "parametric-workflows", "public-domain", "code-export", "automation", "desktop", "linux", "macos"], "topics": ["python3", "app", "application", "desktop", "desktop-app", "desktop-application", "gui", "nodes", "pygame", "pygame-application", "python", "open-source", "unlicense", "unlicense-license", "graph", "node-editor", "pygame-ce", "public-domain", "python-node-editor"], "urls": [], "use_cases": ["build visual node-based workflows from Python functions", "create parametric data pipelines without writing glue code", "turn any Python callable into a node for visual programming", "export node layouts as plain Python code to avoid vendor lock-in", "distribute custom nodes as Python packages on PyPI", "visually prototype and combine standard library functions", "export node graphs as SVG, HTML, or PNG images"], "what_it_is": "Nodezator is a generalist, multi-purpose node editor desktop application for Python, built on pygame-ce. It turns any Python callable into a visual node, letting users connect nodes into layouts that can be executed or exported back as plain Python code.", "when_to_avoid": ["you need a framework to build your own custom node-based interface", "your workflows involve very long-running AI/ML processing that the UI struggles with", "you need a web-based or collaborative node editor", "you need a node editor for languages other than Python"], "when_to_choose": ["you want a ready-to-use generalist node editor for Python callables", "you want node-based programming that stays compatible with plain Python code", "you want to define nodes simply by writing ordinary Python functions", "you want to distribute nodes via PyPI using existing Python infrastructure", "you prefer public-domain, free software with no external dependencies beyond pygame-ce"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/nodezator", "repo": "IndieSmiths/nodezator", "role": "main", "score": 82}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "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:21.727150+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:21.727150+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:16:06.004729+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9a1584b37de87020febc46997160f91fe64c879c703a61b9944fd27d834768b5", "fetched_at": "2026-08-28T04:07:21.727150+00:00", "kind": "readme", "missing": false, "url": "https://github.com/IndieSmiths/nodezator"}, {"content_hash": "d4efb9dce24e4acfa157e7532531a827fcdf2aaf4be01341962fb1d83a285f74", "fetched_at": "2026-08-29T09:55:35.043862+00:00", "kind": "homepage", "missing": false, "url": "https://nodezator.com"}, {"content_hash": "b9711e072deb29531a6ce33a37883922fc3a1144dc9d6926ce3ef45c9b7cfdf6", "fetched_at": "2026-08-29T09:55:35.067084+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/about.html"}, {"content_hash": "651104e31e19f1b2b8beb2db7fc309de2796db3f03fcb62ce0f25290c482d50c", "fetched_at": "2026-08-29T09:55:35.069661+00:00", "kind": "site_page", "missing": false, "url": "https://nodezator.com/features.html"}, {"content_hash": "9b54b488f6f5d52cd29cb064a7744d463255e3fd601b7157d61ffb12f4a930dd", "fetched_at": "2026-08-29T09:55:35.072664+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/nodezator/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 51}, "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": 1791, "days_push": 11, "days_rel": 171, "gap_med": 94.0, "n_releases_24m": 5}, "score": 82, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}