open-index/open-npm huggingface dataset:
npm package: @music-loopy/loops
Description: A React  component library for Music Loopy Applications and websites
Author: Namoota Engineers Zwelisha Mthethwa & Ayabonga Qwabi
Latest version: 1.0.82

![Logo](https://musicloopy.netlify.app/logo.png)

# Music Loopy Component Library

## Using the libray

**Installation**

```
npm i @music-loopy/loops
```

**Importing**

To use a component you can simply import it and place on you react component

```
import {Button} from "@music-loopy/loops"

const App = () => {
    return (
        <div>
            <p> Welcome to my World! <p>
            <Button size="large"> Visit world </Button>
        </div>
    )
}

```

You can view the list of loopy components on our chromatic storybook.

[Visit Chromatic Storybook](https://main--665f79699d07d8287d55827b.chromatic.com/)

![Mega head gif](https://media1.tenor.com/m/r6zafkpW15oAAAAC/show-me-what-you-got-rick-and-morty.gif)

## Contributing

### Get started

- `npm i`
- `npm run storybook`

### View online storybook

[On Chromatic](https://main--665f79699d07d8287d55827b.chromatic.com/)

### Deploying Storybook

- `npm run chromatic`

Then you can view your deployment at

https://(branch)--665f79699d07d8287d55827b.chromatic.com

### Our Contribution process

- Create a component
- Make sure component can function is not coupled or highly dependant on another component
- Make component modular
- Create a story for your component (Lets see it in action)
- Once satisfied push to github
- Publish Chromatic storybook
- Review process
- Publish npm package

### Publishing to npm

- `npm run build`
- `npm version patch`
- `npm publish `

Or simply run `npm run deploy` which will do all the above

### Node version issues

We currently have an issue when building the project with versions greater than Node 16 with NWB
This requires us to use version 16 to build and use 18+ to run storybook. THis will be looked into and solved but for now use version 16 to build and any version from 18 upwards to run storybook. To easily switch between versions please consider using Node Version Manager (NVM) on your system.
npm package: @music-lyric-kit/core
Description: Music Lyric Kit - Core
Author: folltoshe
Latest version: 0.7.0

## @music-lyric-kit/core

Parser & Generator engine with plugin system.

## Install

```shell
npm install @music-lyric-kit/core
```

## Usage

```js
import { Parser, Generator } from '@music-lyric-kit/core'

const parser = new Parser.Client()
const generator = new Generator.Client()
```
npm package: @music-lyric-kit/lyric
Description: Music Lyric Kit - Lyric
Author: folltoshe
Latest version: 0.4.0

## @music-lyric-kit/lyric

Lyric data structures.

## Install

```shell
npm install @music-lyric-kit/lyric
```

## Usage

```js
import { Time, LineNormal, WordNormal, Info, Type } from '@music-lyric-kit/lyric'
```
npm package: @music-lyric-kit/plugin-format-lrc
Description: Music Lyric Kit - Lrc Format Plugin
Author: folltoshe
Latest version: 0.5.1

## @music-lyric-kit/plugin-format-lrc

LRC format plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-format-lrc
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { Parser as LrcParser } from '@music-lyric-kit/plugin-format-lrc'

const parser = new Parser.Client()
parser.plugin.add(new LrcParser())
```

```js
import { Generator } from '@music-lyric-kit/core'
import { Generator as LrcGenerator } from '@music-lyric-kit/plugin-format-lrc'

const generator = new Generator.Client()
generator.plugin.add(new LrcGenerator())
```
npm package: @music-lyric-kit/plugin-format-ttml
Description: Music Lyric Kit - Ttml Format Plugin
Author: folltoshe
Latest version: 0.1.4

## @music-lyric-kit/plugin-format-ttml

TTML format plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-format-ttml
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { AmllParser } from '@music-lyric-kit/plugin-format-ttml'

const parser = new Parser.Client()
parser.plugin.add(new AmllParser())
```
npm package: @music-lyric-kit/plugin-transform-agent
Description: Music Lyric Kit - Transform Agent Plugin
Author: folltoshe
Latest version: 0.3.3

## @music-lyric-kit/plugin-transform-agent

Multi-voice support plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-agent
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { ExtractPlugin } from '@music-lyric-kit/plugin-transform-agent'

const parser = new Parser.Client()
parser.plugin.add(new ExtractPlugin())
```
npm package: @music-lyric-kit/plugin-transform-background
Description: Music Lyric Kit - Transform Background Lyric Plugin
Author: folltoshe
Latest version: 0.3.0

## @music-lyric-kit/plugin-transform-background

Background vocals plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-background
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { ExtractPlugin } from '@music-lyric-kit/plugin-transform-background'

const parser = new Parser.Client()
parser.plugin.add(new ExtractPlugin())
```
npm package: @music-lyric-kit/plugin-transform-interlude
Description: Music Lyric Kit - Transform Interlude Plugin
Author: folltoshe
Latest version: 0.3.5

## @music-lyric-kit/plugin-transform-interlude

Interlude handling plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-interlude
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { InsertPlugin } from '@music-lyric-kit/plugin-transform-interlude'

const parser = new Parser.Client()
parser.plugin.add(new InsertPlugin())
```
npm package: @music-lyric-kit/plugin-transform-pure
Description: Music Lyric Kit - Transform Pure Plugin
Author: folltoshe
Latest version: 0.5.0

## @music-lyric-kit/plugin-transform-pure

Pure lyric detection plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-pure
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { CleanPlugin, ExtractCreatorPlugin } from '@music-lyric-kit/plugin-transform-pure'

const parser = new Parser.Client()
parser.plugin.add(new CleanPlugin())
parser.plugin.add(new ExtractCreatorPlugin())
```
npm package: @music-lyric-kit/plugin-transform-space
Description: Music Lyric Kit - Transform Space Plugin
Author: folltoshe
Latest version: 0.3.0

## @music-lyric-kit/plugin-transform-space

Space normalization plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-space
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { InsertPlugin } from '@music-lyric-kit/plugin-transform-space'

const parser = new Parser.Client()
parser.plugin.add(new InsertPlugin())
```
npm package: @music-lyric-kit/plugin-transform-stress
Description: Music Lyric Kit - Transform Stress Plugin
Author: folltoshe
Latest version: 0.1.4

## @music-lyric-kit/plugin-transform-stress

Stress marks plugin.

## Install

```shell
npm install @music-lyric-kit/plugin-transform-stress
```

## Usage

```js
import { Parser } from '@music-lyric-kit/core'
import { MarkPlugin } from '@music-lyric-kit/plugin-transform-stress'

const parser = new Parser.Client()
parser.plugin.add(new MarkPlugin())
```
npm package: @music-lyric-kit/utils
Description: Music Lyric Kit - Utils
Author: folltoshe
Latest version: 0.5.0

## @music-lyric-kit/utils

Shared utilities.

## Install

```shell
npm install @music-lyric-kit/utils
```

## Usage

```js
import { ConfigManager, Xml } from '@music-lyric-kit/utils'
```
npm package: @music-metadata/test-audio
Description: Audio test data
Author: Borewit
Latest version: 0.1.0

[![Build Status](https://travis-ci.org/Borewit/test-audio.svg?branch=master)](https://travis-ci.org/Borewit/test-audio)
[![NPM version](https://badge.fury.io/js/%40test%2Faudio.svg)](https://badge.fury.io/js/%40test%2Faudio)
[![npm downloads](http://img.shields.io/npm/dm/test-audio.svg)](https://npmcharts.com/compare/test-audio?start=600)

# @music-metadata/test-audio

Development library with audio sample data.

Enumerates a list of URLs pointing to downloadable audio tracks.  

## Licence

(The MIT License)

Copyright (c) 2017 Borewit

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
npm package: @music163/ncm-cli
Description: Netease Music CLI tool - supporting music playback, search, and playlist management
Author: Netease Music
Latest version: 0.1.1

# 网易云音乐 CLI

网易云音乐命令行工具，基于网易云音乐开放平台 API，提供音乐搜索、播放控制、歌单管理、每日推荐、TUI 播放器等功能，并支持通过 AI Agent 进行自然语言操作。

## 功能特性

- 音乐搜索与播放控制
- 歌单管理与每日推荐
- TUI 播放器（旋转黑胶、歌词同步、场景切换）
- AI Agent 集成支持
- 多播放器后端支持（mpv）

## 快速开始

### 安装

```bash
npm install -g @music163/ncm-cli
ncm-cli --version
```

### 配置

前往 [网易云音乐开放平台](https://developer.music.163.com/st/developer/apply/account?type=INDIVIDUAL) 完成入驻获取 API 凭证，然后运行配置向导：

```bash
ncm-cli configure
```

配置向导会引导完成以下设置：
- App ID
- Private Key
- 播放器选择

### 登录

```bash
ncm-cli login
```

使用网易云音乐 App 扫描终端中的二维码完成登录授权。

### 基本使用

```bash
ncm-cli search song --keyword "林俊杰"        # 搜索歌曲
ncm-cli play --song --encrypted-id 加密id --original-id 原始id                             # 播放
ncm-cli tui                                     # 启动 TUI 播放器
```

## 使用方式

### AI Agent 集成（推荐）

通过 Claude Code 或 OpenClaw 等 AI Agent 工具，可以使用自然语言进行音乐操作。

**Claude Code 集成**

```bash
npx skills add https://github.com/NetEase/skills
```

**OpenClaw 集成**

```bash
npx clawhub@latest install netease-music-assistant
npx clawhub@latest install netease-music-cli
npx clawhub@latest install ncm-cli-setup（非必选，建议手动安装ncm-cli）
```

集成后支持以下对话示例：

```
> 帮我搜一下林俊杰的歌
> 播放晴天
> 推荐一些适合深夜听的歌
> 帮我创建一个跑步歌单
```

**可用 Skills**

- **netease-music-cli** — 提供搜索、播放、歌单管理等基础操作
- **netease-music-assistant** — 基于红心歌曲的智能推荐，支持定时推送

### CLI 命令行

```bash
ncm-cli search                 # 搜索音乐
ncm-cli play                   # 播放
ncm-cli pause                  # 暂停
ncm-cli resume                 # 恢复播放
ncm-cli next                   # 下一首
ncm-cli prev                   # 上一首
ncm-cli volume 60              # 设置音量（0-100）
ncm-cli state                  # 查看播放状态
ncm-cli --help                 # 查看所有可用命令
```

### TUI 播放器

```bash
ncm-cli tui
```

全屏终端播放器，支持旋转黑胶动画、歌词同步、场景切换等功能。

**快捷键**

| 快捷键 | 功能 |
|--------|------|
| `Space` | 播放 / 暂停 |
| `←` `→` | 上一首 / 下一首 |
| `↑` `↓` | 音量 +5 / -5 |
| `S` | 随机 / 顺序播放切换 / 单曲循环 |
| `L` | 歌词视图 |
| `Q` | 播放列表视图 |
| `C` | 场景选择器 |
| `H` | 收藏 / 取消收藏 |
| `Ctrl+C` | 退出 |

## 系统要求

- **Node.js** >= 18
- **mpv**（本地播放必需）
  - macOS: `brew install mpv`
  - Linux: `sudo apt install mpv`
npm package: @music163/request
Description: a request library based on axios
Author: wwsun
Latest version: 0.2.1

# `request`

> A simple axios wrapper for better async data fetching

## Usage

```jsx
import request, { createService, createServices } from '@music163/request';
```

## request

```js
request(url, configs);

request.get(url, params, configs);

request.post(url, data, configs);
```

request config documentation: <https://axios-http.com/docs/req_config>

## createService

```js
const listAll = createService({
  url: '/api/listAll',
});

const list = await listAll(payload, configs);
```

## createServices

```js
const services = createServices({
  listAll: {
    url: '/api/listAll',
  },
});

const list = await services.listAll(payload, configs);
```
npm package: @music163/tango-boot
Description: a react app framework
Author: wwsun
Latest version: 0.3.5

# TangoBoot

TangoBoot is a frontend framework that serves the NetEase Tango Low-Code applications. It provides standard data requests, state management, and routing solutions, as well as generic runtime utility functions, allowing developers to generate Single Page Applications through less codes.

Documentation: <https://netease.github.io/tango/docs/boot/intro/>

## Usage

```jsx
import { runApp, definePage, defineStore, defineServices } from '@music163/boot';
```

### defineStore

define a reactive store object

```jsx
import { defineStore } from '@music163/tango-boot';

defineStore(
  {
    number: 10,

    add() {
      this.number++;
    },

    decrement() {
      this.number--;
    },
  },
  'counter',
);
```

### defineServices

define a collection of async functions

```jsx
import { defineServices } from '@music163/tango-boot';

export default defineServices({
  list: {
    url: 'https://dog.ceo/api/breeds/list/all',
  },
});
```

### definePage

define a observable page component

```jsx
import React from 'react';
import { definePage } from '@music163/tango-boot';

class App extends React.Component {
  render() {
    return (
      <div>
        <h1>{tango.stores.counter.number}</h1>
        <button onClick={tango.stores.counter.add}>+</button>
        <button onClick={tango.stores.counter.decrement}>-</button>
      </div>
    );
  }
}

export default definePage(App);
```

### runApp

```jsx
runApp({
  boot: {
    mountElement: document.querySelector('#root'),
  },
  routes: [
    {
      path: '/',
      exact: true,
      component: IndexPage,
    },
  ],
});
```
npm package: @music163/tango-context
Description: react context for tango-apps
Author: wwsun
Latest version: 1.1.10

# tango-apps-context

> React context of tango-apps core

## Usage

install

```bash
yarn add @music163/tango-context
```

usage

```jsx
import { observer, useWorkspace } from '@music/tango-apps-context';

export const SampleWidget = observer(() => {
  const ws = useWorkspace();
  return <div></div>;
});
```
npm package: @music163/tango-designer
Description: lowcode designer
Author: wwsun
Latest version: 1.4.6

<h1 align="center">Tango LowCode Designer</h1>
<div align="center">

A source code based low-code designer from the NetEase Cloud Music Develop Team.

</div>

## 📄 Usage

Install the low-code designer

```bash
npm install @music163/tango-designer
```

Initialize the low-code designer engine

```js
import { createEngine } form '@music163/tango-designer';

// init designer engine
const engine = createEngine({
  entry: '/src/index.js',
  files: sampleFiles,
  componentPrototypes: prototypes as any,
});
```

Initialize the drag-and-drop engine

```js
import { DndQuery } form '@music163/tango-designer';

const sandboxQuery = new DndQuery({
  context: 'iframe',
});
```
npm package: @music163/tango-helpers
Description: Shared types, helpers, and hooks of tango-apps
Author: wwsun
Latest version: 1.2.4

# `@music163/tango-helpers`

> 提供 tango-apps 的公共类型定义和工具函数等等

## Usage

```ts
import { foo } from '@music163/tango-helpers';

// TODO: DEMONSTRATE API
```
npm package: @music163/tango-mail
Description: react mail components for tango
Author: wwsun
Latest version: 0.5.3

# `@music163/tango-mail`

> A email components library based on React for tango.

## Usage

```jsx
import { Html, Button } from '@music163/tango-mail';

const Email = () => {
  return (
    <Html lang="en" dir="ltr">
      <Button href="https://example.com" style={{ color: '#61dafb' }}>
        Click me
      </Button>
    </Html>
  );
};
```
npm package: @music163/tango-setting-form
Description: setting form of tango-apps
Author: wwsun
Latest version: 1.2.15

# `setting-form`

高性能属性配置表单

## Setter 规范

必须提供以下属性支持受控使用

- `value` 受控的值
- `onChange(value, detail)` 值变化时的回调
  - value 需要为简单数据类型
  - detail 可以

## Setter 选择

- actionSetter 函数设置器
- boolSetter 布尔值设置器
- choiceSetter 单选项设置器（平铺的单选项）
- expressionSetter 表达式设置器
- jsonSetter JSON 设置器
- numberSetter 数字设置器
- pickerSetter 下拉列表设置器
- textSetter 文本设置器
npm package: @musical-palm-tree/tokens
Description: ```js (async () => {   let pair = await crypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-384' }, true, [     'sign',     'verify'   ]);
Author: Tobias Herber
Latest version: 1.0.4

# Generate Key

```js
(async () => {
  let pair = await crypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-384' }, true, [
    'sign',
    'verify'
  ]);

  console.log({
    privateKey: JSON.stringify(await crypto.subtle.exportKey('jwk', pair.privateKey)),
    publicKey: JSON.stringify(await crypto.subtle.exportKey('jwk', pair.publicKey))
  });
})();
```
npm package: @musical-patterns/compiler
Description: [![Build Status](https://travis-ci.com/MusicalPatterns/compiler.svg?branch=master)](https://travis-ci.com/MusicalPatterns/compiler)
Latest version: 1.0.149
Deprecated: replaced with @musical-patterns/material

[![Build Status](https://travis-ci.com/MusicalPatterns/compiler.svg?branch=master)](https://travis-ci.com/MusicalPatterns/compiler)

# Musical Patterns - Compiler

Takes whatever amazing craziness a given pattern calls for and compiles it down into a basic format playable by the `@musical-patterns/performer`.

First it calls each of the "materialize" functions with the specs you've provided (or defaults to the pattern's initial specs).
For example, you could materialize some scales and entities using specs provided through making selections in the UI of the `@musical-patterns/playroom`.
The pattern's specs and materials are unique to each pattern, but their job is to together produce data the compiler can resolve.
So, once thus materialized, the compiler reduces the large amount of data produced down to fundamental sound instructions for the `@musical-patterns/performer`.

## usage

```
import { compilePattern } from '@musical-patterns/compiler'
import { CompiledPattern, setupPerformer, Voice } from '@musical-patterns/performer'

const material: Material = {
	materializeEntities,
}

const spec: MySpec extends StandardSpec = {
	// anything
}

const compiledPattern: CompiledPattern = await compilePattern({ material, spec })

setupPerformer({ compiledPattern })

```

## terminology

### repetend

When a voice has a section which does not specify the number of times it should repeat, it will repeat forever. 
In this case, it is the voice's repetend. A repetend is a section. Its index is the index within an array of sections.

### segno

Italian for 'sign', this is the time position a voice repeats from once it reaches its end.
The segno index is the index of a sound in the voice's sounds array.
The segno time is a position in milliseconds.
npm package: @musical-patterns/metadata
Description: ``` interface Presentable {     description?: string,     formattedName?: string,     order?: number, }
Latest version: 1.0.20

# Musical Patterns - Metadata

```
interface Presentable {
    description?: string,
    formattedName?: string,
    order?: number,
}

interface Metadata extends Presentable {
    mostRecentPublish: string,
    musicalIdeaIllustrated: string,
    originalPublish: string,
    version: string,
}
```

- `mostRecentPublish` and `version` are managed by the `@musical-patterns/cli` service when shipping the code.
- `originalPublish` is set by the `main` repo when running the `new.sh` pattern script.
- `musicalIdeaIllustrated` is a special subtitle for the pattern when displayed in the pattern list of the `@musical-patterns/playroom`.
- `description` is here used to store the HTML string for the post about the pattern which can be super long and contain images and links and all that jazz.
- `formattedName` allows you to specify exactly what you want to show up as the title of your pattern in the `@musical-patterns/playroom`. Otherwise, it will title case your pattern's Id.
- `order` allows you to override the default sorting of your pattern in the `@musical-patterns/playroom`'s pattern list. Any pattern with a provided order will come first, then the patterns are sorted by `originalPublish`.
npm package: @musical-patterns/pattern
Description: Defines the structure of patterns: `{ id, material, metadata, spec }`. - `id` uniquely identifies each pattern. - `metadata` has no "effect" per se. It's the blog post, formatted name, timestamps, etc. - `material` is the code that makes the sounds: its p
Latest version: 1.0.277

# Musical Patterns - Pattern

Defines the structure of patterns: `{ id, material, metadata, spec }`.
- `id` uniquely identifies each pattern.
- `metadata` has no "effect" per se. It's the blog post, formatted name, timestamps, etc.
- `material` is the code that makes the sounds: its properties and how they affect the output scales and voices and notes.
- `spec` is the controls for the material: configuration for how the user can adjust the properties (constraints, custom validation, etc), and presets.

A dedicated service exists for each of these properties.

Continuing in `@musical-patterns/playroom` and all pattern repos, to help organize thought, a common module structure matching this structure is used.
npm package: @musical-patterns/pattern-performer-qa
Description: [![Build Status](https://travis-ci.com/MusicalPatterns/pattern-performerQa.svg?branch=master)](https://travis-ci.com/MusicalPatterns/pattern-performerQa)
Latest version: 1.0.121
Deprecated: replaced with @musical-patterns/pattern-material-qa

[![Build Status](https://travis-ci.com/MusicalPatterns/pattern-performerQa.svg?branch=master)](https://travis-ci.com/MusicalPatterns/pattern-performerQa)

# Performer QA

minimally prove out the full potential of the performer (oscillators, samples, immersion, etc.)
npm package: @musical-patterns/pattern-tsraxcfaubdj
Description: A piece based on eschewing prime harmonics 3, 5, and 7, instead using those based on 11, 13, 17, and 19.
Latest version: 1.0.131

# Tsraxcfaubdj

A piece based on eschewing prime harmonics 3, 5, and 7, instead using those based on 11, 13, 17, and 19.
npm package: @musical-patterns/pattern-xelt
Description: [![Build Status](https://travis-ci.com/MusicalPatterns/pattern-xelt.svg?branch=master)](https://travis-ci.com/MusicalPatterns/pattern-xelt)
Latest version: 1.0.60
Deprecated: please use xenharmonic series instead

[![Build Status](https://travis-ci.com/MusicalPatterns/pattern-xelt.svg?branch=master)](https://travis-ci.com/MusicalPatterns/pattern-xelt)

# Xelt

third tritave odd harmonics
npm package: @musical-patterns/pattern-zdaubyaos
Description: fun with the superparticular series & variants, plus stepwise motion within recurring bounds
Latest version: 1.0.177

# Zdaubyaos

fun with the superparticular series & variants, plus stepwise motion within recurring bounds

## styles

**zdaub**: melodic; inherited from stepwise

**yaos**: rhythmic; inherited from oumaotcou'ao'iest

Each of these styles has its own Blocks and Renderings which create Contours mostly of length either 15 or 24. 

## development notes

`zdaubyaos` is currently the only pattern which imports another pattern. I believe this should become a common good practice, but for now, you're my guinea pig.

It imports `xenharmonic-series` for the scales it uses.

I've noticed this can cause hiccups when refactoring across Musical Patterns and all patterns need to be updated.
If you have a script iterating over all the pattern repos, it may fail on `zdaubyaos` because it won't be able to compile without the latest format of code from `xenharmonic series` 
(and because the latter immediately precedes the former alphabetically, often the code it has just shipped is not yet available).
npm package: @musical-patterns/playroom
Description: The web-based UI for playing (with) the patterns. Just call `setupPlayroom` with whichever patterns you want.
Latest version: 1.0.426

# Musical Patterns - Playroom

The web-based UI for playing (with) the patterns.
Just call `setupPlayroom` with whichever patterns you want.

Similar to the `@musical-patterns/cli` repo, upon installation, copies playroom files into the pattern repo.

These files are:

- src/start.ts
- webpack.self.js

## usage

```
import { setupPlayroom } from '@musical-patterns/playroom'
import { Patterns } from '@musical-patterns/pattern'

const patterns: Patterns = {
	// your patterns here
}

const playroom: HTMLDivElement = await setupPlayroom(patterns)

document.body.appendChild(playroom)

```

The second optional argument to `setupPlayroom` is debug mode, a boolean defaulting to false, which will log information about the compiled pattern to the developer console.

## test vs. development servers

You can start the local `playroom`server either by running `make start` or by running `make test`. The server runs on port 8082 either way.
The key difference between the two commands is that `make test` will run the test suite and leave the server running as a background process afterward.
On the other hand, `make start` stays foregrounded, and does nothing else besides start the server.
When the tests are run, if the `playroom` is already running, it will test against the already running server, to save time.
So as opposed to relying on the `test` command's backgrounded process, using `start` has the benefit of giving you a console window view into the state of the server, 
for viewing of `webpack` compilation errors during development, and a quick Ctrl-C to kill the server.
However there is a caveat. The two commands start the local server in two different modes: development, and test, respectively.
Currently there is almost no difference between the two modes. However there is one difference which is significant enough to cause one of the tests to fail.
The `playroom`'s current implementation of WebXR code is not supported in the automated browser environment, so in test mode it tricks the app into thinking it is.
If you feel confident about it, maybe just ignore this test if you find yourself having run the test suite against a development server.
npm package: @musical-patterns/registry
Description: [![Build Status](https://travis-ci.com/MusicalPatterns/registry.svg?branch=master)](https://travis-ci.com/MusicalPatterns/registry)
Latest version: 1.0.41
Deprecated: please use pattern instead. everything was merged in there

[![Build Status](https://travis-ci.com/MusicalPatterns/registry.svg?branch=master)](https://travis-ci.com/MusicalPatterns/registry)

# Musical Patterns - Registry

The place to register new patterns so they get enumerated with a `Id`.
npm package: @musical-patterns/snapshot
Description: [![Build Status](https://travis-ci.com/MusicalPatterns/snapshot.svg?branch=master)](https://travis-ci.com/MusicalPatterns/snapshot)
Latest version: 1.0.70
Deprecated: replaced with @musical-patterns/material

[![Build Status](https://travis-ci.com/MusicalPatterns/snapshot.svg?branch=master)](https://travis-ci.com/MusicalPatterns/snapshot)

# Musical Patterns - Snapshot

Similar to the `@musical-patterns/cli` repo, upon installation, copies snapshot files into the pattern repo.

These files are:

- Makefile.snapshots
- test/snapshots.test.ts

When inside the directory of a pattern for which you want to update the snapshot, run:

```
musical-patterns-snapshots
```

Or `make snapshots` since the `Makefile.snapshots` aliases it like that.

Uses the `@musical-patterns/compiler` to maintain an up-to-date copy of compiled pattern data in the repo.
This `snapshots.json` file is tested against before each shipment, ensuring your pattern doesn't change if you don't mean it to.
It tests your initial specs as well as the specs for each preset.