{"adoption": {"forks": 237, "observed_at": "2026-08-28T04:08:18.070529+00:00", "stars": 3767}, "canonical_url": "https://ross.abutalabs.com/products/scribbletune", "card": {"archived": false, "artifact_type": "library", "description": "Create music with JavaScript", "domain": ["audio", "media", "developer-tools", "web-development"], "enriched": true, "function": ["audio-processing", "cli", "sdk"], "health_score": 96, "homepage": "https://scribbletune.com", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["scribbletune/scribbletune"], "name": "scribbletune/scribbletune", "platform": ["browser", "cli", "cross-platform"], "pushed_at": "2026-08-20T07:08:53+00:00", "repo": "scribbletune/scribbletune", "stars": 3767, "tags": ["midi", "music-theory", "tone-js", "web-audio", "chord-progressions", "music-generation", "ableton-live", "daw", "nodejs"], "topics": ["javascript", "chords", "midi", "scale", "music", "nodejs", "webaudio", "webaudioapi", "ableton-live", "ableton", "live", "webmidi"], "urls": [], "use_cases": ["generate midi files with javascript", "create chord progressions programmatically", "make music in the browser with web audio", "generate melodies from scales and patterns", "export midi clips for ableton live", "generate drum and riff patterns from the terminal"], "what_it_is": "Scribbletune is a JavaScript/TypeScript library for generating music programmatically using simple string and array patterns for rhythms, melodies, and chord progressions. It exports MIDI files, plays live in the browser via Tone.js, and includes a CLI for generating MIDI from the terminal.", "when_to_avoid": ["you need real-time audio synthesis on the server rather than MIDI file generation", "you want a full GUI music production environment rather than a code-based tool", "you need the companion VST3/AU plugins, which are closed-source"], "when_to_choose": ["you want to compose music or generate MIDI programmatically in JavaScript or Node.js", "you need a simple pattern language for rhythms, scales, and chord progressions", "you want to prototype musical ideas quickly and import them into a DAW"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/scribbletune", "repo": "scribbletune/scribbletune", "role": "main", "score": 78}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "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:08:18.070529+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:18.070529+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:28:35.591703+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "896fc0177b05477896b47a7476adc1b2bfd49cd03b94f86a065c0129e45f9e7a", "fetched_at": "2026-08-28T04:08:18.070529+00:00", "kind": "readme", "missing": false, "url": "https://github.com/scribbletune/scribbletune"}, {"content_hash": "f99b9f7ecd1e55f5ab4fdf443aa9c35825372dbc43819c5aedff3c65529f30f9", "fetched_at": "2026-08-29T09:23:02.641107+00:00", "kind": "homepage", "missing": false, "url": "https://scribbletune.com"}, {"content_hash": "8850e1799afd2174ae95c991487cff95c28bf2ac5c734c9dbef9c78703147e86", "fetched_at": "2026-08-29T09:23:02.650640+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/documentation"}, {"content_hash": "39fd7813c15bd63b6e3de34b6ec5b8a297f69ba7e53b7f9a29ed069b79d85ae2", "fetched_at": "2026-08-29T09:23:02.652738+00:00", "kind": "site_page", "missing": false, "url": "https://scribbletune.com/about"}, {"content_hash": "981c771c19c11e552a2cd7a88b93dbc5803ba9e035b7e41eb881433d6f7b4e7d", "fetched_at": "2026-08-29T09:23:02.654683+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/scribbletune"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 40}, "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": 4664, "days_push": 13, "days_rel": 186, "gap_med": null, "n_releases_24m": 1}, "score": 78, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}