@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 +8 -8
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/types/context.d.ts +1 -1
- package/dist/types/events.d.ts +1 -1
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/manifest.d.ts +20 -0
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/preset.d.ts +60 -0
- package/dist/types/preset.d.ts.map +1 -0
- package/dist/types/preset.js +1 -0
- package/dist/types/ui.d.ts +116 -0
- package/dist/types/ui.d.ts.map +1 -0
- package/dist/types/ui.js +1 -0
- package/dist/types/vocal-preset.d.ts +62 -1
- package/dist/types/vocal-preset.d.ts.map +1 -1
- package/package.json +1 -1
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/types/context.d.ts
CHANGED
|
@@ -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>;
|
package/dist/types/events.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/types/manifest.d.ts
CHANGED
|
@@ -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;
|
|
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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"}
|
package/dist/types/ui.js
ADDED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,0BAA0B;AAC1B,MAAM,MAAM,UAAU,GAChB,SAAS,GACT,UAAU,GACV,WAAW,GACX,SAAS,GACT,UAAU,GACV,OAAO,CAAA;AAEb,kCAAkC;AAClC,MAAM,WAAW,MAAM;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAC5B;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpE;AAED,kCAAkC;AAClC,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAwB;AACxB,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACzB;AAED,oCAAoC;AACpC,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACvB;AAED,gCAAgC;AAChC,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,MAAM,EAAE,CAAA;IAClF,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"vocal-preset.d.ts","sourceRoot":"","sources":["../../src/types/vocal-preset.ts"],"names":[],"mappings":"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"}
|