@collabhut/plugin-sdk 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -54,7 +54,7 @@ Key design decisions:
54
54
  | **Language** | TypeScript 5+ (strict mode required) |
55
55
  | **Runtime** | Sandboxed Web Worker inside CollabDAW |
56
56
  | **Audio API** | Web Audio API (`AudioContext`) — injected via `PluginContext` |
57
- | **Network** | Only `cdn.collabhut.com` — via `context.fetchAsset()` |
57
+ | **Network** | Only `cdn.storage.collabhut.com` — via `context.fetchAsset()` |
58
58
  | **No DOM access** | `document`, `window`, `localStorage` are unmounted |
59
59
  | **Licensing** | Server-side only — no user key-entry friction |
60
60
 
@@ -264,9 +264,9 @@ export default mod
264
264
 
265
265
  ```ts
266
266
  const factory: AudioEffectFactory = async (context, _params) => {
267
- // Only cdn.collabhut.com URLs are permitted
267
+ // Only cdn.storage.collabhut.com URLs are permitted
268
268
  const irBuffer = await context.fetchAsset(
269
- "https://cdn.collabhut.com/ir/hall-large.wav"
269
+ "https://cdn.storage.collabhut.com/ir/hall-large.wav"
270
270
  )
271
271
  const decoded = await context.audioContext.decodeAudioData(irBuffer)
272
272
 
@@ -278,7 +278,7 @@ const factory: AudioEffectFactory = async (context, _params) => {
278
278
  ```
279
279
 
280
280
  > `context.fetchAsset()` throws `TypeError` for any URL not on
281
- > `cdn.collabhut.com`. The restriction is enforced in the sandbox.
281
+ > `cdn.storage.collabhut.com`. The restriction is enforced in the sandbox.
282
282
 
283
283
  ---
284
284
 
@@ -707,7 +707,7 @@ lerp(0, 100, 0.5) // 50
707
707
  ### What plugins can do
708
708
 
709
709
  - Use the Web Audio API through `context.audioContext`
710
- - Fetch binary assets from `cdn.collabhut.com` via `context.fetchAsset()`
710
+ - Fetch binary assets from `cdn.storage.collabhut.com` via `context.fetchAsset()`
711
711
  - Use `SharedArrayBuffer` for lock-free transport reads (provided by the host)
712
712
  - Use standard Web APIs available in Workers: `crypto`, `TextEncoder`,
713
713
  `URL`, `Math`, `JSON`, `console`
@@ -716,7 +716,7 @@ lerp(0, 100, 0.5) // 50
716
716
 
717
717
  | Blocked | Reason |
718
718
  |---|---|
719
- | `fetch()` to arbitrary URLs | Prevented at the sandbox level; only `context.fetchAsset()` is available and it checks `cdn.collabhut.com` |
719
+ | `fetch()` to arbitrary URLs | Prevented at the sandbox level; only `context.fetchAsset()` is available and it checks `cdn.storage.collabhut.com` |
720
720
  | `XMLHttpRequest` | Not available in Workers by default |
721
721
  | DOM access (`document`, `window`) | Workers have no DOM |
722
722
  | `localStorage`, `sessionStorage`, `IndexedDB` | Storage isolation |
@@ -731,7 +731,7 @@ lerp(0, 100, 0.5) // 50
731
731
  direct `fetch`) cause the build to be rejected.
732
732
  2. **Runtime**: The plugin Worker is created with a strict
733
733
  `Content-Security-Policy` that blocks all network access except
734
- `cdn.collabhut.com`.
734
+ `cdn.storage.collabhut.com`.
735
735
  3. **CDN fetch proxy**: All asset fetches go through `context.fetchAsset()`
736
736
  which validates the URL before making the request on the main thread.
737
737
 
@@ -1007,7 +1007,7 @@ Use a bundler like `esbuild` or `rollup` before upload.
1007
1007
 
1008
1008
  Yes — load your `.wasm` module via `context.fetchAsset()` and instantiate with
1009
1009
  `WebAssembly.instantiate()`. The `.wasm` file must be hosted on
1010
- `cdn.collabhut.com`; contact support to have assets uploaded there.
1010
+ `cdn.storage.collabhut.com`; contact support to have assets uploaded there.
1011
1011
 
1012
1012
  **Can I access the microphone?**
1013
1013
 
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
- export type { PluginManifest, PluginType, PluginPricing, SemVer, PluginAuthor } from "./types/manifest";
1
+ export type { PluginManifest, PluginType, PluginPricing, SemVer, PluginAuthor, PluginIconRef } from "./types/manifest";
2
2
  export type { PluginParam, RangeParam, BoolParam, ChoiceParam, ParamCurve, ParamValues } from "./types/parameters";
3
3
  export type { PluginContext, InstrumentContext } from "./types/context";
4
+ export type { PluginUIDescriptor, UISection, UIControl, UIKnob, UISlider, UIToggle, UIDropdown, UIMeter, UILabel, UIXYPad, UISpacer, } from "./types/ui";
5
+ export type { ShareablePreset, ShareableVocalPreset, } from "./types/preset";
4
6
  export type { AudioEffectIO, AudioEffectFactory, AudioEffectModule, } from "./types/audio-effect";
5
7
  export type { MidiEvent, MidiEventType, MidiNoteOnEvent, MidiNoteOffEvent, MidiControlChangeEvent, MidiPitchBendEvent, MidiAftertouchEvent, MidiPolyAftertouchEvent, MidiProgramChangeEvent, MidiEffectPlugin, MidiEffectFactory, MidiEffectModule, } from "./types/midi-effect";
6
8
  export type { InstrumentVoice, InstrumentPlugin, InstrumentFactory, InstrumentModule, } from "./types/instrument";
7
- export type { EqBand, EqBandType, VocalEqSettings, VocalCompressorSettings, VocalDeEsserSettings, VocalSaturationSettings, VocalPitchCorrectionSettings, VocalChorusSettings, VocalReverbSettings, VocalDelaySettings, VocalPreset, VocalPresetModule, } from "./types/vocal-preset";
9
+ export type { EqBand, EqBandType, VocalEqSettings, VocalCompressorSettings, VocalDeEsserSettings, VocalSaturationSettings, VocalPitchCorrectionSettings, VocalPopFilterSettings, VocalGateSettings, VocalExciterSettings, VocalFeedbackProtectionSettings, VocalLimiterSettings, VocalChorusSettings, VocalReverbSettings, VocalDelaySettings, VocalPreset, VocalPresetModule, } from "./types/vocal-preset";
8
10
  export type { UniformType, ShaderUniform, ShaderDefinition, ShaderModule, } from "./types/shader";
9
11
  export type { CollaborationAccess, LicenseToken, LicenseGranted, LicenseDenied, LicenseCheckResult, LicenseChecker, } from "./types/licensing";
10
12
  export type { HostToPluginMessage, HostToPluginExtended, PluginToHostEvent, PluginInitMessage, PluginParamsUpdateMessage, PluginProcessMessage, PluginMidiMessage, PluginNoteOnMessage, PluginNoteOffMessage, PluginDisposeMessage, PluginReadyEvent, PluginAudioOutputEvent, PluginMidiOutputEvent, PluginErrorEvent, PluginFetchRequestEvent, PluginFetchResponseMessage, } from "./types/events";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACvG,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAClH,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,YAAY,EACR,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EACR,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,qBAAqB,CAAA;AAG5B,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,oBAAoB,CAAA;AAG3B,YAAY,EACR,MAAM,EACN,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GACpB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,GACf,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACR,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,cAAc,GACjB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EACR,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACH,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,IAAI,GACP,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACtH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAClH,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,YAAY,EACR,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,EACP,OAAO,EACP,QAAQ,GACX,MAAM,YAAY,CAAA;AAGnB,YAAY,EACR,eAAe,EACf,oBAAoB,GACvB,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACR,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EACR,SAAS,EACT,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,qBAAqB,CAAA;AAG5B,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACnB,MAAM,oBAAoB,CAAA;AAG3B,YAAY,EACR,MAAM,EACN,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GACpB,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,YAAY,GACf,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACR,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,cAAc,GACjB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EACR,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACH,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,IAAI,GACP,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
@@ -23,7 +23,7 @@ export interface PluginContext {
23
23
  readonly isPlaying: boolean;
24
24
  /**
25
25
  * Fetch a resource from CollabHut CDN.
26
- * Only HTTPS URLs on `cdn.collabhut.com` are allowed.
26
+ * Only HTTPS URLs on `cdn.storage.collabhut.com` are allowed.
27
27
  * Arbitrary network access is blocked inside the plugin sandbox.
28
28
  */
29
29
  fetchAsset(url: string): Promise<ArrayBuffer>;
@@ -102,7 +102,7 @@ export interface PluginErrorEvent {
102
102
  export interface PluginFetchRequestEvent {
103
103
  readonly type: "fetch-request";
104
104
  readonly requestId: string;
105
- /** Must be a URL on cdn.collabhut.com — rejected otherwise */
105
+ /** Must be a URL on cdn.storage.collabhut.com — rejected otherwise */
106
106
  readonly url: string;
107
107
  }
108
108
  /** Host response to a `fetch-request` */
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { PluginParam } from "./parameters";
2
+ import type { PluginUIDescriptor } from "./ui";
2
3
  /** Semantic version string, e.g. "1.2.3" */
3
4
  export type SemVer = `${number}.${number}.${number}`;
4
5
  /** Plugin type identifier */
@@ -86,5 +87,24 @@ export interface PluginManifest {
86
87
  * @default false
87
88
  */
88
89
  readonly shadertoyCompatible?: boolean;
90
+ /**
91
+ * Custom SVG icon (64×64 viewBox string) or a reference to an icon pack.
92
+ * Falls back to a type-based default icon if omitted.
93
+ */
94
+ readonly icon?: string | PluginIconRef;
95
+ /**
96
+ * UI layout descriptor for the device editor panel.
97
+ * If omitted, the DAW auto-generates a knob layout from `params`.
98
+ */
99
+ readonly ui?: PluginUIDescriptor;
100
+ }
101
+ /** Reference to an icon from a named icon pack */
102
+ export interface PluginIconRef {
103
+ /** Icon pack name */
104
+ readonly pack: "lucide" | "collabhut" | "custom";
105
+ /** Icon identifier within the pack */
106
+ readonly name: string;
107
+ /** Optional hex colour for the icon tint */
108
+ readonly color?: string;
89
109
  }
90
110
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/C,4CAA4C;AAC5C,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAA;AAEpD,6BAA6B;AAC7B,MAAM,MAAM,UAAU,GAChB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,cAAc,GACd,QAAQ,CAAA;AAEd,2BAA2B;AAC3B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3C,qCAAqC;AACrC,MAAM,WAAW,YAAY;IACzB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IAEzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAE7B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAEjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAE/B;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CACzC"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/types/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAA;AAE9C,4CAA4C;AAC5C,MAAM,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAA;AAEpD,6BAA6B;AAC7B,MAAM,MAAM,UAAU,GAChB,cAAc,GACd,aAAa,GACb,YAAY,GACZ,cAAc,GACd,QAAQ,CAAA;AAEd,2BAA2B;AAC3B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3C,qCAAqC;AACrC,MAAM,WAAW,YAAY;IACzB,mBAAmB;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,gCAAgC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IAEzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAE7B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAEjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAE/B;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAE9B;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAA;IAEtC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAA;CACnC;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC1B,qBAAqB;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;IAChD,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAC1B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shareable preset — a snapshot of parameter values for a specific plugin.
3
+ *
4
+ * Presets can be stored locally, synced to CollabHut, and shared with other
5
+ * users via the marketplace.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import type { ShareablePreset } from "@collabhut/plugin-sdk"
10
+ *
11
+ * const preset: ShareablePreset = {
12
+ * pluginId: "com.collabhut.harmonic-exciter",
13
+ * name: "Warm Presence",
14
+ * author: "CollabHut",
15
+ * description: "Gentle harmonic enhancement for acoustic instruments",
16
+ * tags: ["warm", "acoustic", "gentle"],
17
+ * values: { drive: 0.3, presenceFreq: 2500, presenceGain: 3, airGain: 2, mix: 0.6 },
18
+ * version: "1.0.0",
19
+ * }
20
+ * ```
21
+ */
22
+ export interface ShareablePreset {
23
+ /** manifestId of the target plugin */
24
+ readonly pluginId: string;
25
+ /** Human-readable preset name */
26
+ readonly name: string;
27
+ /** Author display name */
28
+ readonly author: string;
29
+ /** Optional description of the preset's character */
30
+ readonly description?: string;
31
+ /** Tags for search and filtering */
32
+ readonly tags?: readonly string[];
33
+ /** Parameter values keyed by param ID */
34
+ readonly values: Readonly<Record<string, number | boolean | string>>;
35
+ /** Plugin version this preset was created with */
36
+ readonly version: string;
37
+ }
38
+ /**
39
+ * A vocal preset bundled with metadata for sharing.
40
+ * Contains the full VocalPreset data plus display information.
41
+ */
42
+ export interface ShareableVocalPreset {
43
+ /** Unique identifier */
44
+ readonly id?: string;
45
+ /** Human-readable name */
46
+ readonly name: string;
47
+ /** Author display name */
48
+ readonly author: string;
49
+ /** Optional description */
50
+ readonly description?: string;
51
+ /** Genre classification */
52
+ readonly genre?: string;
53
+ /** Tags for search */
54
+ readonly tags?: readonly string[];
55
+ /** Whether this is an official CollabHut preset */
56
+ readonly isOfficial?: boolean;
57
+ /** The actual vocal chain configuration */
58
+ readonly preset: import("./vocal-preset").VocalPreset;
59
+ }
60
+ //# sourceMappingURL=preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/types/preset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IACpE,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,mDAAmD;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,WAAW,CAAA;CACxD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,116 @@
1
+ /**
2
+ * UI layout descriptor for plugin device editors.
3
+ *
4
+ * Plugins can optionally declare a `ui` property in their manifest to
5
+ * describe how the device editor should render their controls. If omitted,
6
+ * the DAW auto-generates a layout from the `params` array.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import type { PluginUIDescriptor } from "@collabhut/plugin-sdk"
11
+ *
12
+ * const ui: PluginUIDescriptor = {
13
+ * layout: "column",
14
+ * sections: [
15
+ * {
16
+ * label: "Dynamics",
17
+ * controls: [
18
+ * { type: "knob", paramId: "threshold", size: "large", bipolar: true },
19
+ * { type: "knob", paramId: "ratio" },
20
+ * { type: "slider", paramId: "mix", orientation: "horizontal" },
21
+ * { type: "meter", channel: "gain-reduction" },
22
+ * ],
23
+ * },
24
+ * {
25
+ * label: "Options",
26
+ * controls: [
27
+ * { type: "toggle", paramId: "softClip", onLabel: "On", offLabel: "Off" },
28
+ * { type: "dropdown", paramId: "mode" },
29
+ * ],
30
+ * },
31
+ * ],
32
+ * }
33
+ * ```
34
+ */
35
+ export interface PluginUIDescriptor {
36
+ /** Top-level layout direction for sections */
37
+ readonly layout: "row" | "column" | "grid";
38
+ /** Ordered sections of controls */
39
+ readonly sections: readonly UISection[];
40
+ }
41
+ /** A named group of controls rendered together */
42
+ export interface UISection {
43
+ /** Optional heading shown above the section */
44
+ readonly label?: string;
45
+ /** Controls within this section, rendered in order */
46
+ readonly controls: readonly UIControl[];
47
+ /** Optional number of grid columns (only applies when parent layout is "grid") */
48
+ readonly columns?: number;
49
+ }
50
+ /** Union of all supported UI control types */
51
+ export type UIControl = UIKnob | UISlider | UIToggle | UIDropdown | UIMeter | UILabel | UIXYPad | UISpacer;
52
+ /** Rotary knob control bound to a range parameter */
53
+ export interface UIKnob {
54
+ readonly type: "knob";
55
+ /** Must match a `RangeParam.id` from the manifest */
56
+ readonly paramId: string;
57
+ /** Visual size — affects both the knob diameter and label font size */
58
+ readonly size?: "small" | "medium" | "large";
59
+ /** Hex colour for the value arc, e.g. `"#3b82f6"` */
60
+ readonly color?: string;
61
+ /** If true, the knob is centred at 12-o'clock (for params where 0 is the centre) */
62
+ readonly bipolar?: boolean;
63
+ }
64
+ /** Linear slider control bound to a range parameter */
65
+ export interface UISlider {
66
+ readonly type: "slider";
67
+ /** Must match a `RangeParam.id` from the manifest */
68
+ readonly paramId: string;
69
+ readonly orientation?: "horizontal" | "vertical";
70
+ /** Show numeric value next to the slider */
71
+ readonly showValue?: boolean;
72
+ }
73
+ /** On/off toggle button bound to a boolean parameter */
74
+ export interface UIToggle {
75
+ readonly type: "toggle";
76
+ /** Must match a `BoolParam.id` from the manifest */
77
+ readonly paramId: string;
78
+ readonly onLabel?: string;
79
+ readonly offLabel?: string;
80
+ }
81
+ /** Dropdown selector bound to a choice parameter */
82
+ export interface UIDropdown {
83
+ readonly type: "dropdown";
84
+ /** Must match a `ChoiceParam.id` from the manifest */
85
+ readonly paramId: string;
86
+ }
87
+ /** Real-time level meter (peak + RMS) */
88
+ export interface UIMeter {
89
+ readonly type: "meter";
90
+ /** Which signal to meter */
91
+ readonly channel: "input" | "output" | "gain-reduction";
92
+ readonly orientation?: "horizontal" | "vertical";
93
+ }
94
+ /** Static text label or heading */
95
+ export interface UILabel {
96
+ readonly type: "label";
97
+ readonly text: string;
98
+ readonly style?: "heading" | "caption" | "value";
99
+ }
100
+ /** Two-dimensional pad that controls two parameters simultaneously */
101
+ export interface UIXYPad {
102
+ readonly type: "xy-pad";
103
+ /** Must match a `RangeParam.id` for the X axis */
104
+ readonly xParamId: string;
105
+ /** Must match a `RangeParam.id` for the Y axis */
106
+ readonly yParamId: string;
107
+ /** Pixel size of the pad (default 120) */
108
+ readonly size?: number;
109
+ }
110
+ /** Empty spacer for layout alignment */
111
+ export interface UISpacer {
112
+ readonly type: "spacer";
113
+ /** Width in pixels (horizontal layouts) or height (vertical layouts) */
114
+ readonly size?: number;
115
+ }
116
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/types/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -100,6 +100,62 @@ export interface VocalPitchCorrectionSettings {
100
100
  readonly strength: number;
101
101
  /** Correction speed in seconds (lower = faster) */
102
102
  readonly speed: number;
103
+ /** Musical key root note, e.g. "C", "F#" */
104
+ readonly key?: string;
105
+ /** Preserve natural formant character when shifting pitch */
106
+ readonly formantPreservation?: boolean;
107
+ /** 0–1, amount of natural vibrato to pass through */
108
+ readonly vibratoAmount?: number;
109
+ /** 0–1, micro-pitch randomisation for natural feel */
110
+ readonly humanize?: number;
111
+ /** Retune speed in milliseconds (0 = instant T-Pain, 50 = natural) */
112
+ readonly retuneSpeed?: number;
113
+ }
114
+ /** Pop filter / subsonic cut to eliminate plosives and rumble */
115
+ export interface VocalPopFilterSettings {
116
+ readonly enabled: boolean;
117
+ /** Cutoff frequency in Hz (typically 60–120) */
118
+ readonly frequency: number;
119
+ /** Filter slope in dB/octave (12, 24, or 48) */
120
+ readonly slope: 12 | 24 | 48;
121
+ }
122
+ /** Noise gate to suppress bleed and background noise */
123
+ export interface VocalGateSettings {
124
+ readonly enabled: boolean;
125
+ /** Threshold in dB below which audio is gated */
126
+ readonly threshold: number;
127
+ /** Attack time in seconds */
128
+ readonly attack: number;
129
+ /** Hold time in seconds — gate stays open after signal drops below threshold */
130
+ readonly hold: number;
131
+ /** Release time in seconds */
132
+ readonly release: number;
133
+ }
134
+ /** Harmonic exciter / air control for presence and sparkle */
135
+ export interface VocalExciterSettings {
136
+ readonly enabled: boolean;
137
+ /** Centre frequency for presence band in Hz (typically 2–5 kHz) */
138
+ readonly frequency: number;
139
+ /** Presence amount 0–1 */
140
+ readonly amount: number;
141
+ /** High-shelf air sparkle amount 0–1 (above 10 kHz) */
142
+ readonly airAmount: number;
143
+ }
144
+ /** Feedback protection — auto-detects and notch-filters feedback frequencies */
145
+ export interface VocalFeedbackProtectionSettings {
146
+ readonly enabled: boolean;
147
+ /** Detection sensitivity 0–1 (lower = more aggressive detection) */
148
+ readonly sensitivity: number;
149
+ /** Maximum number of simultaneous notch filters (1–5) */
150
+ readonly maxNotches: number;
151
+ }
152
+ /** Brick-wall limiter for output protection */
153
+ export interface VocalLimiterSettings {
154
+ readonly enabled: boolean;
155
+ /** Ceiling in dB (typically -0.1 to -1.0) */
156
+ readonly ceiling: number;
157
+ /** Release time in milliseconds */
158
+ readonly release: number;
103
159
  }
104
160
  /** Chorus effect settings */
105
161
  export interface VocalChorusSettings {
@@ -129,14 +185,19 @@ export interface VocalDelaySettings {
129
185
  export interface VocalPreset {
130
186
  readonly inputGain: number;
131
187
  readonly outputGain: number;
188
+ readonly popFilter?: VocalPopFilterSettings;
189
+ readonly gate?: VocalGateSettings;
132
190
  readonly eq: VocalEqSettings;
133
- readonly compressor: VocalCompressorSettings;
134
191
  readonly deEsser: VocalDeEsserSettings;
192
+ readonly compressor: VocalCompressorSettings;
135
193
  readonly saturation: VocalSaturationSettings;
194
+ readonly exciter?: VocalExciterSettings;
136
195
  readonly pitchCorrection: VocalPitchCorrectionSettings;
137
196
  readonly chorus: VocalChorusSettings;
138
197
  readonly reverb: VocalReverbSettings;
139
198
  readonly delay: VocalDelaySettings;
199
+ readonly feedbackProtection?: VocalFeedbackProtectionSettings;
200
+ readonly limiter?: VocalLimiterSettings;
140
201
  }
141
202
  import type { PluginManifest } from "./manifest";
142
203
  /** Full vocal-preset module shape */
@@ -1 +1 @@
1
- {"version":3,"file":"vocal-preset.d.ts","sourceRoot":"","sources":["../../src/types/vocal-preset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vocal-preset.d.ts","sourceRoot":"","sources":["../../src/types/vocal-preset.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@collabhut/plugin-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Type-safe SDK for building, publishing, and licensing CollabDAW plugins on CollabHut Marketplace",
5
5
  "license": "MIT",
6
6
  "type": "module",