@thijshakkenberg/valkyrie-mom-mcp 2.5.2 → 2.6.0

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.
@@ -8,7 +8,7 @@
8
8
  "plugins": [
9
9
  {
10
10
  "name": "valkyrie-mom",
11
- "description": "AI-assisted Mansions of Madness scenario editor for Valkyrie — MCP server, 7 skills, and scenario designer agent",
11
+ "description": "AI-assisted Mansions of Madness scenario editor for Valkyrie — MCP server, 10 skills, and scenario designer agent",
12
12
  "version": "1.0.1",
13
13
  "author": {
14
14
  "name": "Thijs Hakkenberg"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valkyrie-mom",
3
- "version": "2.5.2",
3
+ "version": "2.6.0",
4
4
  "description": "AI-assisted Mansions of Madness scenario editor for Valkyrie",
5
5
  "author": {
6
6
  "name": "Thijs Hakkenberg"
package/README.md CHANGED
@@ -8,7 +8,7 @@ MCP (Model Context Protocol) server and Claude Code plugin for AI-assisted Mansi
8
8
 
9
9
  This server exposes Valkyrie scenario editing as MCP tools, enabling AI assistants (Claude, etc.) to create, modify, validate, and build complete MoM scenarios. It auto-detects the Valkyrie editor directory so scenarios appear directly in the app.
10
10
 
11
- The plugin bundles 9 skills covering advanced patterns (event loops, mythos scaling, tile placement chains, custom puzzles, generated artwork, spoken narration, etc.) and an autonomous scenario designer agent.
11
+ The plugin bundles 10 skills covering advanced patterns (event loops, mythos scaling, tile placement chains, custom puzzles, generated artwork, spoken narration, generated sound effects, etc.) and an autonomous scenario designer agent.
12
12
 
13
13
  ## Install
14
14
 
@@ -21,7 +21,7 @@ claude plugin install valkyrie-mom
21
21
 
22
22
  This gives you:
23
23
  - **MCP server** with 25 tools for scenario editing (auto-started)
24
- - **9 skills**: `/scenario`, `/event-patterns`, `/tile-placement`, `/variables-and-mythos`, `/custom-monsters`, `/ui-and-puzzles`, `/items-and-distribution`, `/artwork`, `/narration`
24
+ - **10 skills**: `/scenario`, `/event-patterns`, `/tile-placement`, `/variables-and-mythos`, `/custom-monsters`, `/ui-and-puzzles`, `/items-and-distribution`, `/artwork`, `/narration`, `/sound-effects`
25
25
  - **Scenario designer agent** for autonomous scenario creation
26
26
  - **5 MCP resources** for format documentation
27
27
 
@@ -85,6 +85,7 @@ npx tsx src/index.ts # Run MCP server via stdio
85
85
  | `/items-and-distribution` | Random items, unique items, starting items, inspection events |
86
86
  | `/artwork` | Generate pictures with a local ComfyUI (FLUX.2 [klein] 4B) and show them: cover, intro cutscene, handouts, scenes, monsters, tokens, image puzzles |
87
87
  | `/narration` | Read story text aloud with a local Kokoro voice: what to narrate, voices, pronunciations, how Valkyrie plays event audio |
88
+ | `/sound-effects` | Generate sound effects with a local ComfyUI (Stable Audio 3): prompts, lengths, stock sound or generated, an effect and narration on one moment |
88
89
 
89
90
  ## MCP Tools
90
91
 
@@ -155,6 +156,22 @@ On NVIDIA GPUs with less VRAM, the fp8 model (`black-forest-labs/FLUX.2-klein-4b
155
156
 
156
157
  Narration is optional and runs entirely on your machine, on the CPU: [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) (Apache 2.0) through [kokoro-js](https://github.com/hexgrad/kokoro/tree/main/kokoro.js), with OGG Vorbis encoding in WebAssembly, so no Python or ffmpeg is needed. `narration_status install=true` installs the engine once (about 450 MB, in `~/.cache/valkyrie-mom-mcp/kokoro`, or `VALKYRIE_TTS_DIR`); the first narration downloads the model (about 330 MB). English voices only. The default voice, `af_nicole` at speed 0.9, was picked by ear from 15 voices for horror (`bf_isabella`, `bm_lewis` and `bm_daniel` also fit); the model's quality grades didn't predict the fit. The `/narration` skill covers what to narrate and how Valkyrie plays the clips.
157
158
 
159
+ ### Sound effects
160
+ | Tool | Description |
161
+ |------|-------------|
162
+ | `sound_status` | Check a local ComfyUI server, the Stable Audio 3 Small SFX model files and the `--fp32-vae` flag; prints setup and download commands for anything missing |
163
+ | `generate_sound_effect` | Generate a sound from a description (8 steps, about 1 s per clip) into an OGG clip in the scenario folder (`audio/sfx/<Event>.ogg`) and set the events' `audio=`. Peak-normalised, silent tail cut; narration on an event is kept unless `assign=true` |
164
+
165
+ Sound effects are optional and run on the same ComfyUI as artwork, with [Stable Audio 3 Small SFX](https://huggingface.co/stabilityai/stable-audio-3-small-sfx) (Stability AI Community License), small enough for the CPU:
166
+
167
+ ```bash
168
+ comfy model download --url https://huggingface.co/Comfy-Org/stable-audio-3/resolve/main/checkpoints/stable_audio_3_small_sfx.safetensors --relative-path models/checkpoints
169
+ comfy model download --url https://huggingface.co/Comfy-Org/stable-audio-3/resolve/main/text_encoders/t5gemma_b_b_ul2.safetensors --relative-path models/text_encoders
170
+ comfy launch --background -- --fp32-vae
171
+ ```
172
+
173
+ Start ComfyUI with `--fp32-vae`: by default it decodes the audio in bfloat16, and every clip comes out as noise. Other flags (such as `--force-fp16` for FLUX) can stay. ComfyUI saves FLAC; the server converts it to OGG Vorbis in WebAssembly, so no ffmpeg is needed. The `/sound-effects` skill covers prompts and when a stock sound will do.
174
+
158
175
  ### Reference
159
176
  | Tool | Description |
160
177
  |------|-------------|
@@ -259,6 +276,7 @@ src/
259
276
  story/ Storyline graph: outline, Mermaid, HTML
260
277
  artwork/ ComfyUI (FLUX.2 [klein]) artwork generation
261
278
  narration/ Kokoro text-to-speech, dialog text to speech text
279
+ audio/ Stable Audio 3 sound effects through ComfyUI, FLAC to OGG Vorbis
262
280
  resources/ Format documentation resources
263
281
  catalogs/ 846-entry game content catalog
264
282
  diagnostics/ Bug report builder, session trace, ring buffer
@@ -93,7 +93,10 @@ export declare function recommendedSampling(diffusionModel: string): {
93
93
  };
94
94
  /** ComfyUI API-format workflow: FLUX.2 [klein] text-to-image */
95
95
  export declare function buildFlux2KleinWorkflow(s: Flux2KleinSettings): Record<string, unknown>;
96
- type Fetch = typeof fetch;
96
+ export type Fetch = typeof fetch;
97
+ export declare function getJson(fetchFn: Fetch, url: string): Promise<unknown>;
98
+ /** Picks the preferred file: the distilled model over "base", then the first match */
99
+ export declare function pickModel(files: string[], match: RegExp): string | undefined;
97
100
  export interface ArtworkStatus {
98
101
  reachable: boolean;
99
102
  url: string;
@@ -111,6 +114,28 @@ export interface ArtworkStatus {
111
114
  export declare function getArtworkStatus(url?: string, fetchFn?: Fetch): Promise<ArtworkStatus>;
112
115
  /** Human-readable setup instructions for what getArtworkStatus found missing */
113
116
  export declare function setupInstructions(status: ArtworkStatus): string;
117
+ /** A file a ComfyUI save node wrote, as listed in /history */
118
+ export interface ComfyOutputFile {
119
+ filename: string;
120
+ subfolder: string;
121
+ type: string;
122
+ }
123
+ /** One node's outputs in /history: SaveImage lists images, the SaveAudio nodes list audio */
124
+ export interface ComfyNodeOutput {
125
+ images?: ComfyOutputFile[];
126
+ audio?: ComfyOutputFile[];
127
+ }
128
+ /**
129
+ * Queues an API-format workflow and waits until ComfyUI has run it. The first job of a
130
+ * session also loads the models, which can take minutes, hence the long default timeout.
131
+ */
132
+ export declare function runWorkflow(url: string, workflow: Record<string, unknown>, opts?: {
133
+ fetchFn?: Fetch;
134
+ timeoutMs?: number;
135
+ pollMs?: number;
136
+ }): Promise<ComfyNodeOutput[]>;
137
+ /** Fetches a file a save node wrote; extra adds query options such as &preview=jpeg;80 */
138
+ export declare function downloadOutput(url: string, file: ComfyOutputFile, fetchFn?: Fetch, extra?: string): Promise<Buffer>;
114
139
  export interface GenerateArtworkOptions {
115
140
  prompt: string;
116
141
  /** Where to save the image; .jpg/.jpeg saves a JPEG (much smaller in the package), otherwise PNG */
@@ -142,5 +167,4 @@ export interface GenerateArtworkResult {
142
167
  }
143
168
  /** Generates one image with FLUX.2 [klein] on a running ComfyUI and saves it to outputFile */
144
169
  export declare function generateArtwork(opts: GenerateArtworkOptions): Promise<GenerateArtworkResult>;
145
- export {};
146
170
  //# sourceMappingURL=comfyui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"comfyui.d.ts","sourceRoot":"","sources":["../../src/artwork/comfyui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comfyui.d.ts","sourceRoot":"","sources":["../../src/artwork/comfyui.ts"],"names":[],"mappings":"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"}
@@ -71,14 +71,14 @@ export function buildFlux2KleinWorkflow(s) {
71
71
  '13': { class_type: 'SaveImage', inputs: { images: ['12', 0], filename_prefix: s.filenamePrefix } },
72
72
  };
73
73
  }
74
- async function getJson(fetchFn, url) {
74
+ export async function getJson(fetchFn, url) {
75
75
  const res = await fetchFn(url, { signal: AbortSignal.timeout(10_000) });
76
76
  if (!res.ok)
77
77
  throw new Error(`${url} answered ${res.status}`);
78
78
  return res.json();
79
79
  }
80
80
  /** Picks the preferred file: the distilled model over "base", then the first match */
81
- function pickModel(files, match) {
81
+ export function pickModel(files, match) {
82
82
  const candidates = files.filter(f => match.test(f));
83
83
  return candidates.find(f => !/base/i.test(f)) ?? candidates[0];
84
84
  }
@@ -128,6 +128,48 @@ export function setupInstructions(status) {
128
128
  }
129
129
  return lines.join('\n');
130
130
  }
131
+ /**
132
+ * Queues an API-format workflow and waits until ComfyUI has run it. The first job of a
133
+ * session also loads the models, which can take minutes, hence the long default timeout.
134
+ */
135
+ export async function runWorkflow(url, workflow, opts = {}) {
136
+ const fetchFn = opts.fetchFn ?? fetch;
137
+ const started = Date.now();
138
+ const submit = await fetchFn(`${url}/prompt`, {
139
+ method: 'POST',
140
+ headers: { 'Content-Type': 'application/json' },
141
+ body: JSON.stringify({ prompt: workflow }),
142
+ signal: AbortSignal.timeout(30_000),
143
+ });
144
+ const submitted = await submit.json();
145
+ if (!submit.ok || !submitted.prompt_id) {
146
+ throw new Error(`ComfyUI rejected the workflow: ${submitted.error?.message ?? submit.status} ${JSON.stringify(submitted.node_errors ?? {})}`);
147
+ }
148
+ const timeoutMs = opts.timeoutMs ?? 15 * 60_000;
149
+ const pollMs = opts.pollMs ?? 2000;
150
+ for (;;) {
151
+ if (Date.now() - started > timeoutMs)
152
+ throw new Error(`ComfyUI did not finish within ${Math.round(timeoutMs / 1000)} s (prompt ${submitted.prompt_id})`);
153
+ await new Promise(r => setTimeout(r, pollMs));
154
+ const history = await getJson(fetchFn, `${url}/history/${submitted.prompt_id}`);
155
+ const entry = history[submitted.prompt_id];
156
+ if (!entry)
157
+ continue;
158
+ if (entry.status?.status_str === 'error') {
159
+ throw new Error(`ComfyUI failed: ${JSON.stringify(entry.status.messages ?? []).slice(0, 1000)}`);
160
+ }
161
+ const outputs = Object.values(entry.outputs ?? {});
162
+ if (outputs.some(o => o.images?.length || o.audio?.length) || entry.status?.status_str === 'success')
163
+ return outputs;
164
+ }
165
+ }
166
+ /** Fetches a file a save node wrote; extra adds query options such as &preview=jpeg;80 */
167
+ export async function downloadOutput(url, file, fetchFn = fetch, extra = '') {
168
+ const res = await fetchFn(`${url}/view?filename=${encodeURIComponent(file.filename)}&subfolder=${encodeURIComponent(file.subfolder)}&type=${file.type}${extra}`, { signal: AbortSignal.timeout(60_000) });
169
+ if (!res.ok)
170
+ throw new Error(`Could not download ${file.filename} from ComfyUI (${res.status})`);
171
+ return Buffer.from(await res.arrayBuffer());
172
+ }
131
173
  function roundTo16(n) {
132
174
  return Math.max(256, Math.round(n / 16) * 16);
133
175
  }
@@ -158,45 +200,13 @@ export async function generateArtwork(opts) {
158
200
  filenamePrefix: `valkyrie_${path.basename(opts.outputFile, path.extname(opts.outputFile)).replace(/[^\w-]/g, '_')}`,
159
201
  };
160
202
  const started = Date.now();
161
- const submit = await fetchFn(`${url}/prompt`, {
162
- method: 'POST',
163
- headers: { 'Content-Type': 'application/json' },
164
- body: JSON.stringify({ prompt: buildFlux2KleinWorkflow(settings) }),
165
- signal: AbortSignal.timeout(30_000),
166
- });
167
- const submitted = await submit.json();
168
- if (!submit.ok || !submitted.prompt_id) {
169
- throw new Error(`ComfyUI rejected the workflow: ${submitted.error?.message ?? submit.status} ${JSON.stringify(submitted.node_errors ?? {})}`);
170
- }
171
- // The first image of a session also loads the models, which can take minutes
172
- const timeoutMs = opts.timeoutMs ?? 15 * 60_000;
173
- const pollMs = opts.pollMs ?? 2000;
174
- let image;
175
- while (!image) {
176
- if (Date.now() - started > timeoutMs)
177
- throw new Error(`ComfyUI did not finish within ${Math.round(timeoutMs / 1000)} s (prompt ${submitted.prompt_id})`);
178
- await new Promise(r => setTimeout(r, pollMs));
179
- const history = await getJson(fetchFn, `${url}/history/${submitted.prompt_id}`);
180
- const entry = history[submitted.prompt_id];
181
- if (!entry)
182
- continue;
183
- if (entry.status?.status_str === 'error') {
184
- throw new Error(`ComfyUI failed: ${JSON.stringify(entry.status.messages ?? []).slice(0, 1000)}`);
185
- }
186
- image = Object.values(entry.outputs ?? {}).flatMap(o => o.images ?? [])[0];
187
- if (!image && entry.status?.status_str === 'success')
188
- throw new Error('ComfyUI finished without an image');
189
- }
190
- const view = (extra = '') => `${url}/view?filename=${encodeURIComponent(image.filename)}&subfolder=${encodeURIComponent(image.subfolder)}&type=${image.type}${extra}`;
191
- const download = async (u) => {
192
- const res = await fetchFn(u, { signal: AbortSignal.timeout(60_000) });
193
- if (!res.ok)
194
- throw new Error(`Could not download the image from ComfyUI (${res.status})`);
195
- return Buffer.from(await res.arrayBuffer());
196
- };
203
+ const outputs = await runWorkflow(url, buildFlux2KleinWorkflow(settings), { fetchFn, timeoutMs: opts.timeoutMs, pollMs: opts.pollMs });
204
+ const image = outputs.flatMap(o => o.images ?? [])[0];
205
+ if (!image)
206
+ throw new Error('ComfyUI finished without an image');
197
207
  const jpeg = /\.jpe?g$/i.test(opts.outputFile);
198
- const full = await download(view(jpeg ? '&preview=jpeg;90' : ''));
199
- const preview = jpeg ? full : await download(view('&preview=jpeg;80'));
208
+ const full = await downloadOutput(url, image, fetchFn, jpeg ? '&preview=jpeg;90' : '');
209
+ const preview = jpeg ? full : await downloadOutput(url, image, fetchFn, '&preview=jpeg;80');
200
210
  fs.mkdirSync(path.dirname(opts.outputFile), { recursive: true });
201
211
  fs.writeFileSync(opts.outputFile, full);
202
212
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"comfyui.js","sourceRoot":"","sources":["../../src/artwork/comfyui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comfyui.js","sourceRoot":"","sources":["../../src/artwork/comfyui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Generated sound to an OGG Vorbis clip for Valkyrie. ComfyUI saves audio as FLAC, MP3 or
3
+ * Opus, but Valkyrie's editor lists only .ogg files and Unity plays Vorbis in them, so the
4
+ * FLAC is decoded and re-encoded here. Both codecs run in WebAssembly (no ffmpeg).
5
+ */
6
+ /** Float samples per channel, -1..1 */
7
+ export interface Pcm {
8
+ channels: Float32Array[];
9
+ sampleRate: number;
10
+ }
11
+ export declare function decodeFlac(bytes: Uint8Array): Promise<Pcm>;
12
+ /** Vorbis VBR quality 0..10; 4 is about 128 kb/s for stereo, 3 s of sound is about 50 KB */
13
+ export declare function encodeOggVorbis(pcm: Pcm, quality?: number): Promise<Uint8Array>;
14
+ export interface FinishOptions {
15
+ /** Peak level after normalising, in dBFS (default -1) */
16
+ peakDb?: number;
17
+ /** Trailing sound quieter than this, relative to the peak, is cut (default -50 dB) */
18
+ trimDb?: number;
19
+ /** Fade at the end so the clip does not stop with a click, in seconds (default 0.05) */
20
+ fadeOut?: number;
21
+ }
22
+ export declare function lengthSeconds(pcm: Pcm): number;
23
+ /**
24
+ * Peak-normalises a generated clip, cuts its silent tail and fades out the last moment.
25
+ * Diffusion models fill the whole requested length, so a 4 s door creak often ends in
26
+ * near-silence; Valkyrie plays clips on top of each other, so dead air is worth cutting.
27
+ */
28
+ export declare function finishClip(pcm: Pcm, opts?: FinishOptions): Pcm;
29
+ //# sourceMappingURL=clip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip.d.ts","sourceRoot":"","sources":["../../src/audio/clip.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,uCAAuC;AACvC,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAYhE;AAED,4FAA4F;AAC5F,wBAAsB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAYhF;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAE,aAAkB,GAAG,GAAG,CA0BlE"}
@@ -0,0 +1,68 @@
1
+ import { FLACDecoder } from '@wasm-audio-decoders/flac';
2
+ import { createOggEncoder } from 'wasm-media-encoders';
3
+ export async function decodeFlac(bytes) {
4
+ const decoder = new FLACDecoder();
5
+ await decoder.ready;
6
+ try {
7
+ const decoded = await decoder.decodeFile(bytes);
8
+ if (decoded.samplesDecoded === 0) {
9
+ throw new Error(`Could not decode the FLAC from ComfyUI${decoded.errors.length ? `: ${decoded.errors[0].message}` : ''}`);
10
+ }
11
+ return { channels: decoded.channelData, sampleRate: decoded.sampleRate };
12
+ }
13
+ finally {
14
+ decoder.free();
15
+ }
16
+ }
17
+ /** Vorbis VBR quality 0..10; 4 is about 128 kb/s for stereo, 3 s of sound is about 50 KB */
18
+ export async function encodeOggVorbis(pcm, quality = 4) {
19
+ // The encoder takes mono or stereo
20
+ const channels = pcm.channels.slice(0, 2);
21
+ const encoder = await createOggEncoder();
22
+ encoder.configure({ channels: channels.length, sampleRate: pcm.sampleRate, vbrQuality: quality });
23
+ // encode() and finalize() return views into the encoder's memory, so copy each one
24
+ const body = encoder.encode(channels).slice();
25
+ const tail = encoder.finalize().slice();
26
+ const out = new Uint8Array(body.length + tail.length);
27
+ out.set(body);
28
+ out.set(tail, body.length);
29
+ return out;
30
+ }
31
+ export function lengthSeconds(pcm) {
32
+ return (pcm.channels[0]?.length ?? 0) / pcm.sampleRate;
33
+ }
34
+ /**
35
+ * Peak-normalises a generated clip, cuts its silent tail and fades out the last moment.
36
+ * Diffusion models fill the whole requested length, so a 4 s door creak often ends in
37
+ * near-silence; Valkyrie plays clips on top of each other, so dead air is worth cutting.
38
+ */
39
+ export function finishClip(pcm, opts = {}) {
40
+ const { channels, sampleRate } = pcm;
41
+ const length = channels[0]?.length ?? 0;
42
+ let peak = 0;
43
+ for (const c of channels)
44
+ for (let i = 0; i < length; i++)
45
+ peak = Math.max(peak, Math.abs(c[i]));
46
+ if (peak === 0)
47
+ throw new Error('The generated sound is silent');
48
+ // Last sample above the trim threshold, plus a short tail so a decay is not cut mid-breath
49
+ const threshold = peak * 10 ** ((opts.trimDb ?? -50) / 20);
50
+ let last = length - 1;
51
+ while (last > 0 && channels.every(c => Math.abs(c[last]) < threshold))
52
+ last--;
53
+ const end = Math.min(length, last + 1 + Math.round(0.1 * sampleRate));
54
+ const gain = 10 ** ((opts.peakDb ?? -1) / 20) / peak;
55
+ const fade = Math.min(end, Math.round((opts.fadeOut ?? 0.05) * sampleRate));
56
+ return {
57
+ sampleRate,
58
+ channels: channels.map(c => {
59
+ const out = new Float32Array(end);
60
+ for (let i = 0; i < end; i++) {
61
+ const fromEnd = end - i;
62
+ out[i] = c[i] * gain * (fromEnd <= fade ? fromEnd / fade : 1);
63
+ }
64
+ return out;
65
+ }),
66
+ };
67
+ }
68
+ //# sourceMappingURL=clip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../src/audio/clip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { type Fetch } from '../artwork/comfyui.js';
2
+ /**
3
+ * Sound effects with Stable Audio 3 Small SFX on a local ComfyUI. The distilled model needs
4
+ * 8 steps at CFG 1 and takes about 1.5 s per clip on an M1 Pro once loaded (the first clip
5
+ * also loads ~3.5 GB of weights, about 20 s). It is small enough to run on the CPU.
6
+ */
7
+ /** The two files of the Stable Audio 3 Small SFX setup and where to get them */
8
+ export declare const STABLE_AUDIO_SFX_MODELS: {
9
+ readonly checkpoint: {
10
+ readonly folder: "checkpoints";
11
+ readonly match: RegExp;
12
+ readonly downloads: readonly [{
13
+ readonly file: "stable_audio_3_small_sfx.safetensors";
14
+ readonly note: "2.3 GB, distilled: 8 steps";
15
+ readonly url: "https://huggingface.co/Comfy-Org/stable-audio-3/resolve/main/checkpoints/stable_audio_3_small_sfx.safetensors";
16
+ }];
17
+ };
18
+ readonly textEncoder: {
19
+ readonly folder: "text_encoders";
20
+ readonly match: RegExp;
21
+ readonly downloads: readonly [{
22
+ readonly file: "t5gemma_b_b_ul2.safetensors";
23
+ readonly note: "1.2 GB";
24
+ readonly url: "https://huggingface.co/Comfy-Org/stable-audio-3/resolve/main/text_encoders/t5gemma_b_b_ul2.safetensors";
25
+ }];
26
+ };
27
+ };
28
+ type ModelKey = keyof typeof STABLE_AUDIO_SFX_MODELS;
29
+ /** Valkyrie plays event audio on top of everything and does not stop it, so effects stay short */
30
+ export declare const MAX_SFX_SECONDS = 30;
31
+ export declare const DEFAULT_SFX_SECONDS = 3;
32
+ /**
33
+ * ComfyUI's VAEDecodeAudio scales every clip to the same loudness (standard deviation 0.2),
34
+ * and Stable Audio 3's transients reach 11-14 dB above full scale at that level, so they were
35
+ * clipped when the FLAC was written. Lowering the level first keeps them; finishClip()
36
+ * normalises the peak afterwards.
37
+ */
38
+ export declare const HEADROOM_DB = -20;
39
+ export interface StableAudioSettings {
40
+ checkpoint: string;
41
+ textEncoder: string;
42
+ prompt: string;
43
+ seconds: number;
44
+ seed: number;
45
+ steps: number;
46
+ cfg: number;
47
+ filenamePrefix: string;
48
+ }
49
+ /** Recommended sampling: the distilled model is built for 8 steps at CFG 1, "base" for 50 at CFG 7 */
50
+ export declare function recommendedAudioSampling(checkpoint: string): {
51
+ steps: number;
52
+ cfg: number;
53
+ };
54
+ /** ComfyUI API-format workflow: Stable Audio 3 text-to-audio, as in ComfyUI's SA3 template */
55
+ export declare function buildStableAudioWorkflow(s: StableAudioSettings): Record<string, unknown>;
56
+ /**
57
+ * ComfyUI decodes the SA3 audio VAE in bfloat16 by default (seen on Apple Silicon), and that
58
+ * turns every clip into broadband noise: a gunshot sounded like static. --fp32-vae fixes it at
59
+ * no real cost (the VAE is ~200 MB), and the diffusion model can stay in fp16 (same output).
60
+ */
61
+ export declare const FP32_VAE_FLAG = "--fp32-vae";
62
+ export interface SoundStatus {
63
+ reachable: boolean;
64
+ url: string;
65
+ error?: string;
66
+ comfyuiVersion?: string;
67
+ device?: string;
68
+ models: Partial<Record<ModelKey, string>>;
69
+ missing: ModelKey[];
70
+ /** ComfyUI was started with --fp32-vae; undefined when it does not report its arguments */
71
+ fp32Vae?: boolean;
72
+ }
73
+ /** Ready to generate: reachable, all models present, and the VAE not known to run in reduced precision */
74
+ export declare function soundReady(status: SoundStatus): boolean;
75
+ /** Checks the ComfyUI server and which of the Stable Audio 3 SFX files it can load */
76
+ export declare function getSoundStatus(url?: string, fetchFn?: Fetch): Promise<SoundStatus>;
77
+ /** Human-readable setup instructions for what getSoundStatus found missing */
78
+ export declare function soundSetupInstructions(status: SoundStatus): string;
79
+ export interface GenerateSoundOptions {
80
+ /** What the sound is: source, material, space, how it evolves */
81
+ prompt: string;
82
+ /** Where to save the clip (.ogg) */
83
+ outputFile: string;
84
+ /** Requested length in seconds; a silent tail is trimmed afterwards */
85
+ seconds?: number;
86
+ seed?: number;
87
+ steps?: number;
88
+ /** Fade at the end in seconds (default 0.05) */
89
+ fadeOut?: number;
90
+ url?: string;
91
+ timeoutMs?: number;
92
+ pollMs?: number;
93
+ fetchFn?: Fetch;
94
+ }
95
+ export interface GenerateSoundResult {
96
+ file: string;
97
+ /** Length of the saved clip after trimming */
98
+ duration: number;
99
+ bytes: number;
100
+ seed: number;
101
+ steps: number;
102
+ checkpoint: string;
103
+ /** Time taken, including loading the model on the first call */
104
+ seconds: number;
105
+ }
106
+ /** Generates one sound effect with Stable Audio 3 on a running ComfyUI and saves it as OGG Vorbis */
107
+ export declare function generateSound(opts: GenerateSoundOptions): Promise<GenerateSoundResult>;
108
+ export {};
109
+ //# sourceMappingURL=stable-audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-audio.d.ts","sourceRoot":"","sources":["../../src/audio/stable-audio.ts"],"names":[],"mappings":"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"}