@nodetool-ai/agents 0.8.4 → 0.8.6

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.
Files changed (44) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/_skills/api-sketches/SKILL.md +6 -3
  3. package/dist/_skills/nodetool-sketch/SKILL.md +24 -6
  4. package/dist/analysis/audio-dsp.d.ts +1 -60
  5. package/dist/analysis/audio-dsp.d.ts.map +1 -1
  6. package/dist/analysis/audio-dsp.js +3 -190
  7. package/dist/analysis/audio-dsp.js.map +1 -1
  8. package/dist/capabilities/analysis.d.ts.map +1 -1
  9. package/dist/capabilities/analysis.js +9 -35
  10. package/dist/capabilities/analysis.js.map +1 -1
  11. package/dist/capabilities/assets.d.ts.map +1 -1
  12. package/dist/capabilities/assets.js +10 -6
  13. package/dist/capabilities/assets.js.map +1 -1
  14. package/dist/capabilities/project-scope.d.ts +8 -0
  15. package/dist/capabilities/project-scope.d.ts.map +1 -1
  16. package/dist/capabilities/project-scope.js +16 -0
  17. package/dist/capabilities/project-scope.js.map +1 -1
  18. package/dist/capabilities/sketches.d.ts +8 -1
  19. package/dist/capabilities/sketches.d.ts.map +1 -1
  20. package/dist/capabilities/sketches.js +100 -2
  21. package/dist/capabilities/sketches.js.map +1 -1
  22. package/dist/capabilities/sketches.specs.d.ts +2 -0
  23. package/dist/capabilities/sketches.specs.d.ts.map +1 -1
  24. package/dist/capabilities/sketches.specs.js +61 -0
  25. package/dist/capabilities/sketches.specs.js.map +1 -1
  26. package/dist/codeact/nodetool-api.d.ts +1 -1
  27. package/dist/codeact/nodetool-api.d.ts.map +1 -1
  28. package/dist/codeact/nodetool-api.js +23 -5
  29. package/dist/codeact/nodetool-api.js.map +1 -1
  30. package/dist/sketch-render/render.d.ts +50 -0
  31. package/dist/sketch-render/render.d.ts.map +1 -0
  32. package/dist/sketch-render/render.js +191 -0
  33. package/dist/sketch-render/render.js.map +1 -0
  34. package/dist/tools/asset-persist.d.ts.map +1 -1
  35. package/dist/tools/asset-persist.js +1 -0
  36. package/dist/tools/asset-persist.js.map +1 -1
  37. package/dist/tools/builtin-tools.d.ts.map +1 -1
  38. package/dist/tools/builtin-tools.js +1 -0
  39. package/dist/tools/builtin-tools.js.map +1 -1
  40. package/dist/tools/external-mcp-tools.d.ts +6 -0
  41. package/dist/tools/external-mcp-tools.d.ts.map +1 -1
  42. package/dist/tools/external-mcp-tools.js +15 -4
  43. package/dist/tools/external-mcp-tools.js.map +1 -1
  44. package/package.json +26 -20
@@ -1 +1 @@
1
- 2026-10-17T11:16:45.392Z
1
+ 2026-10-18T07:14:03.375Z
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: api-sketches
3
- description: "Call nodetool.sketches from a code action: create a sketch (layered image document), read it, add, arrange and restyle layers, place images on layers, resize the canvas, validate it, and manage its versions. Load before the first call into nodetool.sketches."
3
+ description: "Call nodetool.sketches from a code action: create a sketch (layered image document), read it, add, arrange and restyle layers, place images on layers, resize the canvas, validate it, render it to a PNG or PSD, and manage its versions. Load before the first call into nodetool.sketches."
4
4
  ---
5
5
 
6
6
  # nodetool.sketches
@@ -17,6 +17,7 @@ layers to keep is `nodetool.media.generateImage`, not a sketch.
17
17
  | `get(id)` | Reads the document: canvas, background, layers, bindings. Layer bitmaps stay opaque. | The document |
18
18
  | `edit(id, ops)` | Applies layer ops in order and saves. An open editor picks the change up live. | The result of each op |
19
19
  | `validate(idOrDocument, {width, height, background_color})` | Checks the structure without a render. For an inline document, pass the canvas it is stored against so a mismatch is reported. | `{ok, issues}` |
20
+ | `render(idOrDocument, {format, width, height, background, layer_id, mask})` | Composites the sketch as the editor does and saves it. `format` is `"png"` (default) or `"psd"`. One of `width` and `height` alone keeps the aspect ratio. `layer_id` renders one layer alone, `mask` the inpainting mask. The PNG is transparent unless `background` is set. | `{image, width, height, layers}`. `image.uri` is the saved asset. Each layer row says whether it was drawn and, if not, why |
20
21
  | `versions(id, {save_type, limit})`, `getVersion(id, n)` | Lists and reads whole-document snapshots. | Version rows, newest first |
21
22
  | `snapshot(id, {name})` | Saves a manual version. | The version number |
22
23
  | `restore(id, n)` | Rolls back. The state it replaces is snapshotted first. | The findings of the validation after the restore |
@@ -46,8 +47,9 @@ layers to keep is `nodetool.media.generateImage`, not a sketch.
46
47
  Pass the dimensions of the image when you know them.
47
48
  - `use_case` is `product`, `portrait`, `key-art`, `social`, `logo`, `concept`
48
49
  or `texture`, and it also sets the canvas size.
49
- - Pixels are never read or written here. Painting and generation happen in an
50
- open editor or a workflow run.
50
+ - Ops never paint. Painting and generation happen in an open editor or a
51
+ workflow run. `render` is the one call that reads pixels, and it writes only
52
+ the output asset.
51
53
 
52
54
  ```js
53
55
  const { image_document_id: id } = await nodetool.sketches.create("Poster",
@@ -58,4 +60,5 @@ await nodetool.sketches.edit(id, [
58
60
  { op: "set_layer_props", target: "Product", blendMode: "normal", opacity: 1 }
59
61
  ]);
60
62
  const check = await nodetool.sketches.validate(id);
63
+ const { image } = await nodetool.sketches.render(id, { width: 540 });
61
64
  ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: nodetool-sketch
3
- description: "Build or edit a NodeTool sketch (image document): layers, blend modes, placed images, generation briefs, version history."
3
+ description: "Build, edit or render a NodeTool sketch (image document): layers, blend modes, placed images, generation briefs, PNG and PSD output, version history."
4
4
  featured: true
5
5
  ---
6
6
 
@@ -11,10 +11,11 @@ that say where a layer's picture comes from. It is the surface for composited
11
11
  stills, masks, overlays and the guided image brief. One finished image with no
12
12
  layers to keep is `generate_image`, not a sketch.
13
13
 
14
- The document is layers and references. **Headless tools never read or write
15
- pixels.** Painting happens in an open editor (the `ui_sketch_*` tools below),
16
- generation happens in a workflow run or through the image tools. An image lands
17
- on a layer by reference, so nothing inlines a bitmap.
14
+ The document is layers and references. **Headless tools never paint.**
15
+ Painting happens in an open editor (the `ui_sketch_*` tools below), generation
16
+ happens in a workflow run or through the image tools. An image lands on a layer
17
+ by reference, so nothing inlines a bitmap. `render_sketch` is the one headless
18
+ tool that reads pixels: it composites the document and saves the result.
18
19
 
19
20
  ## The loop
20
21
 
@@ -25,7 +26,8 @@ on a layer by reference, so nothing inlines a bitmap.
25
26
  run in order against the stored document and the result is saved. An open
26
27
  editor picks the change up live.
27
28
  3. **Validate.** `validate_sketch {image_document_id}` or an inline `document`.
28
- 4. **Snapshot** before a destructive pass with `create_sketch_version`.
29
+ 4. **Look.** `render_sketch {image_document_id}` and `view_image` the result.
30
+ 5. **Snapshot** before a destructive pass with `create_sketch_version`.
29
31
 
30
32
  ## `edit_sketch` ops
31
33
 
@@ -83,6 +85,18 @@ then `edit_sketch` with `add_layer {image}` or `set_layer_image {target, image}`
83
85
  places it. Generation spends provider money, so confirm the count with the user
84
86
  before rendering several `variations`.
85
87
 
88
+ ## Rendering
89
+
90
+ `render_sketch {image_document_id | document, format?, width?, height?,
91
+ background?, layer_id?, mask?}` composites the sketch with the editor's own
92
+ rules (visibility and groups, opacity, blend modes, transforms, effects, vector
93
+ layers, placed images) and saves an asset. `format: "png"` (the default) is the
94
+ flattened image, transparent unless `background` is set. `layer_id` renders one
95
+ layer alone, without its opacity or blend mode, and `mask: true` renders the
96
+ inpainting mask. `format: "psd"` is a layered Photoshop file at the canvas size,
97
+ one layer per sketch layer with groups kept. Each row of `layers` says whether
98
+ the layer was drawn and, when an image could not be read, why.
99
+
86
100
  To use the finished composite in a workflow, `nodetool.sketch.RenderSketch`
87
101
  takes a `sketch` and flattens it to an `image` and a `mask`.
88
102
 
@@ -116,12 +130,15 @@ nodetool sketch debug sketch.json \
116
130
  --interact '[{"tool":"add_layer","input":{"name":"Shadow"}},
117
131
  {"tool":"set_layer_props","input":{"target":"Shadow","opacity":0.4,"blendMode":"multiply"}}]'
118
132
  nodetool sketch versions list <id> --save-type manual --limit 10
133
+ nodetool sketch render <image_document_id|sketch.json> -o out.png --width 512
134
+ nodetool sketch render sketch.json --format psd -o out.psd
119
135
  ```
120
136
 
121
137
  A path on disk wins over an id. `debug` runs the static check, then each
122
138
  `--interact` step against the headless `ui_sketch_*` bridge, and validates what
123
139
  the session left behind. A failing step is recorded and the script continues.
124
140
  Pixels, painting, rendering, generation and asset I/O are not simulated.
141
+ `render` writes the PNG or PSD that `render_sketch` would save.
125
142
 
126
143
  ## Where a sketch is used
127
144
 
@@ -136,3 +153,4 @@ In a NodeTool checkout, these repository sources go further:
136
153
 
137
154
  - `docs/harnesses.md` § nodetool sketch validate / debug
138
155
  - `docs/harnesses.md` § nodetool sketch versions
156
+ - `docs/harnesses.md` § nodetool sketch render
@@ -12,6 +12,7 @@
12
12
  * streaming target is specified in. dBFS peak/RMS is kept alongside it because
13
13
  * clipping and headroom are peak questions, not loudness questions.
14
14
  */
15
+ export { detectOnsets, estimateTempo, fftInPlace, hannWindow, magnitudeSpectrum, spectralFlux, type TempoEstimate } from "@nodetool-ai/timeline";
15
16
  /** Amplitude floor reported instead of -Infinity for digital silence. */
16
17
  export declare const SILENT_DB = -120;
17
18
  /** Interleaved PCM plus the format needed to interpret it. */
@@ -63,20 +64,6 @@ export interface PeakSummary {
63
64
  export declare function peakSummary(mono: Float32Array, clipThreshold?: number): PeakSummary;
64
65
  /** Largest power of two at or below `value`, at least 2. */
65
66
  export declare function floorPowerOfTwo(value: number): number;
66
- /** A periodic Hann window of length `size`. */
67
- export declare function hannWindow(size: number): Float32Array;
68
- /**
69
- * In-place radix-2 Cooley-Tukey FFT. `re`/`im` must have the same
70
- * power-of-two length; the transform overwrites both.
71
- */
72
- export declare function fftInPlace(re: Float32Array, im: Float32Array): void;
73
- /**
74
- * The magnitude spectrum of one windowed frame — bins 0..size/2 inclusive.
75
- *
76
- * `signal` is read from `offset`; a frame that runs past the end is
77
- * zero-padded, which is what makes the last window of a clip analysable.
78
- */
79
- export declare function magnitudeSpectrum(signal: Float32Array, offset: number, window: Float32Array): Float32Array;
80
67
  /** What one spectrum says about the sound's colour. */
81
68
  export interface SpectralFeatures {
82
69
  /** Energy-weighted mean frequency — "brightness". */
@@ -158,21 +145,6 @@ export interface LoudnessResult {
158
145
  * number nobody measured.
159
146
  */
160
147
  export declare function measureLoudness(planar: readonly Float32Array[], sampleRate: number): LoudnessResult;
161
- /**
162
- * Half-wave rectified spectral flux between two frames, normalized by the
163
- * current frame's total magnitude.
164
- *
165
- * The normalization is what makes the number mean something. Raw flux scales
166
- * with how loud the passage is, so one threshold cannot serve a quiet verse
167
- * and a loud chorus. Worse, a *stationary* tone does not produce zero raw
168
- * flux: at a hop that is not a whole number of cycles the sinusoid's leakage
169
- * pattern shifts between frames, so its bin magnitudes wobble by a few percent
170
- * forever. Measured against the frame's own magnitude that wobble is ~0.02 and
171
- * a real onset is a large fraction of 1, which is a difference a threshold can
172
- * act on. Against raw flux the two are indistinguishable, and a held note
173
- * reads as a stream of onsets at a confident tempo.
174
- */
175
- export declare function spectralFlux(magnitude: Float32Array, previous: Float32Array): number;
176
148
  /** A stretch of the timeline classified as silent or as sound. */
177
149
  export interface AudioSegment {
178
150
  readonly start: number;
@@ -190,35 +162,4 @@ export interface AudioSegment {
190
162
  export declare function silenceSegments(frames: readonly EnergyFrame[], thresholdDb: number, minDurationSeconds: number, frameDuration: number): AudioSegment[];
191
163
  /** The gaps between silences: everything that is not silent. */
192
164
  export declare function invertSegments(segments: readonly AudioSegment[], duration: number): AudioSegment[];
193
- /**
194
- * Onset times from a normalized spectral-flux novelty curve.
195
- *
196
- * A peak is an onset when it is a local maximum, clears an adaptive threshold
197
- * (the local mean plus `sensitivity` local standard deviations), and clears
198
- * `minStrength` outright. Both halves are needed. The adaptive half handles
199
- * dynamics — a fixed threshold finds every hit in a loud passage and none in a
200
- * quiet one. The absolute half handles the opposite failure: where the curve
201
- * is essentially flat the local standard deviation collapses, every ripple
202
- * clears mean + 1.5σ, and a held note reports dozens of onsets. `minStrength`
203
- * is in the units {@link spectralFlux} returns — a fraction of the frame's own
204
- * magnitude — so 0.04 means "at least 4% of this frame's energy is new".
205
- */
206
- export declare function detectOnsets(flux: readonly number[], times: readonly number[], sensitivity?: number, windowFrames?: number, minGapSeconds?: number, minStrength?: number): number[];
207
- /** A tempo estimate, and how strongly the novelty curve supports it. */
208
- export interface TempoEstimate {
209
- readonly bpm: number;
210
- /** Normalized autocorrelation at the winning lag, 0..1. */
211
- readonly confidence: number;
212
- }
213
- /**
214
- * Tempo from the autocorrelation of the novelty curve.
215
- *
216
- * Only lags inside `minBpm`..`maxBpm` are considered, so the classic
217
- * half/double-time ambiguity is bounded rather than unbounded. Confidence is
218
- * the autocorrelation at the winning lag over the curve's own energy; a
219
- * non-rhythmic signal scores near zero, and the caller is expected to say so
220
- * instead of printing a BPM for speech.
221
- */
222
- export declare function estimateTempo(novelty: readonly number[], hopSeconds: number, minBpm?: number, maxBpm?: number): TempoEstimate;
223
- export {};
224
165
  //# sourceMappingURL=audio-dsp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-dsp.d.ts","sourceRoot":"","sources":["../../src/analysis/audio-dsp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio-dsp.d.ts","sourceRoot":"","sources":["../../src/analysis/audio-dsp.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@
12
12
  * streaming target is specified in. dBFS peak/RMS is kept alongside it because
13
13
  * clipping and headroom are peak questions, not loudness questions.
14
14
  */
15
+ // The onset detector lives in `@nodetool-ai/timeline` so the editor's "Detect
16
+ // beats" and `detect_audio_events` share one implementation.
17
+ export { detectOnsets, estimateTempo, fftInPlace, hannWindow, magnitudeSpectrum, spectralFlux } from "@nodetool-ai/timeline";
15
18
  /** Amplitude floor reported instead of -Infinity for digital silence. */
16
19
  export const SILENT_DB = -120;
17
20
  /** dBFS for a linear amplitude, floored so silence is a number. */
@@ -132,84 +135,6 @@ export function floorPowerOfTwo(value) {
132
135
  size *= 2;
133
136
  return size;
134
137
  }
135
- /** A periodic Hann window of length `size`. */
136
- export function hannWindow(size) {
137
- const window = new Float32Array(size);
138
- for (let index = 0; index < size; index += 1) {
139
- window[index] = 0.5 * (1 - Math.cos((2 * Math.PI * index) / size));
140
- }
141
- return window;
142
- }
143
- /**
144
- * In-place radix-2 Cooley-Tukey FFT. `re`/`im` must have the same
145
- * power-of-two length; the transform overwrites both.
146
- */
147
- export function fftInPlace(re, im) {
148
- const size = re.length;
149
- if (size < 2 || (size & (size - 1)) !== 0) {
150
- throw new Error("fftInPlace: length must be a power of two");
151
- }
152
- // Bit-reversal permutation.
153
- for (let i = 1, j = 0; i < size; i += 1) {
154
- let bit = size >> 1;
155
- for (; j & bit; bit >>= 1)
156
- j ^= bit;
157
- j ^= bit;
158
- if (i < j) {
159
- const tr = re[i];
160
- re[i] = re[j];
161
- re[j] = tr;
162
- const ti = im[i];
163
- im[i] = im[j];
164
- im[j] = ti;
165
- }
166
- }
167
- for (let len = 2; len <= size; len <<= 1) {
168
- const angle = (-2 * Math.PI) / len;
169
- const wRe = Math.cos(angle);
170
- const wIm = Math.sin(angle);
171
- for (let start = 0; start < size; start += len) {
172
- let curRe = 1;
173
- let curIm = 0;
174
- for (let offset = 0; offset < len / 2; offset += 1) {
175
- const a = start + offset;
176
- const b = a + len / 2;
177
- const evenRe = re[a];
178
- const evenIm = im[a];
179
- const oddRe = re[b] * curRe - im[b] * curIm;
180
- const oddIm = re[b] * curIm + im[b] * curRe;
181
- re[a] = evenRe + oddRe;
182
- im[a] = evenIm + oddIm;
183
- re[b] = evenRe - oddRe;
184
- im[b] = evenIm - oddIm;
185
- const nextRe = curRe * wRe - curIm * wIm;
186
- curIm = curRe * wIm + curIm * wRe;
187
- curRe = nextRe;
188
- }
189
- }
190
- }
191
- }
192
- /**
193
- * The magnitude spectrum of one windowed frame — bins 0..size/2 inclusive.
194
- *
195
- * `signal` is read from `offset`; a frame that runs past the end is
196
- * zero-padded, which is what makes the last window of a clip analysable.
197
- */
198
- export function magnitudeSpectrum(signal, offset, window) {
199
- const size = window.length;
200
- const re = new Float32Array(size);
201
- const im = new Float32Array(size);
202
- for (let index = 0; index < size; index += 1) {
203
- re[index] = (signal[offset + index] ?? 0) * window[index];
204
- }
205
- fftInPlace(re, im);
206
- const bins = size / 2 + 1;
207
- const magnitude = new Float32Array(bins);
208
- for (let bin = 0; bin < bins; bin += 1) {
209
- magnitude[bin] = Math.hypot(re[bin], im[bin]) / size;
210
- }
211
- return magnitude;
212
- }
213
138
  /** Centroid, rolloff, flatness, bandwidth and peak bin of one spectrum. */
214
139
  export function spectralFeatures(magnitude, sampleRate, fftSize, rolloffFraction = 0.85) {
215
140
  const binHz = sampleRate / fftSize;
@@ -481,33 +406,6 @@ export function measureLoudness(planar, sampleRate) {
481
406
  momentary
482
407
  };
483
408
  }
484
- // ---------------------------------------------------------------------------
485
- // Events: silence, onsets, tempo
486
- // ---------------------------------------------------------------------------
487
- /**
488
- * Half-wave rectified spectral flux between two frames, normalized by the
489
- * current frame's total magnitude.
490
- *
491
- * The normalization is what makes the number mean something. Raw flux scales
492
- * with how loud the passage is, so one threshold cannot serve a quiet verse
493
- * and a loud chorus. Worse, a *stationary* tone does not produce zero raw
494
- * flux: at a hop that is not a whole number of cycles the sinusoid's leakage
495
- * pattern shifts between frames, so its bin magnitudes wobble by a few percent
496
- * forever. Measured against the frame's own magnitude that wobble is ~0.02 and
497
- * a real onset is a large fraction of 1, which is a difference a threshold can
498
- * act on. Against raw flux the two are indistinguishable, and a held note
499
- * reads as a stream of onsets at a confident tempo.
500
- */
501
- export function spectralFlux(magnitude, previous) {
502
- let rise = 0;
503
- let total = 0;
504
- for (let bin = 0; bin < magnitude.length; bin += 1) {
505
- const value = magnitude[bin] ?? 0;
506
- rise += Math.max(0, value - (previous[bin] ?? 0));
507
- total += value;
508
- }
509
- return total > 0 ? rise / total : 0;
510
- }
511
409
  /**
512
410
  * Runs where the envelope stays under `thresholdDb`, at least
513
411
  * `minDurationSeconds` long.
@@ -557,89 +455,4 @@ export function invertSegments(segments, duration) {
557
455
  push(cursor, duration);
558
456
  return out;
559
457
  }
560
- /**
561
- * Onset times from a normalized spectral-flux novelty curve.
562
- *
563
- * A peak is an onset when it is a local maximum, clears an adaptive threshold
564
- * (the local mean plus `sensitivity` local standard deviations), and clears
565
- * `minStrength` outright. Both halves are needed. The adaptive half handles
566
- * dynamics — a fixed threshold finds every hit in a loud passage and none in a
567
- * quiet one. The absolute half handles the opposite failure: where the curve
568
- * is essentially flat the local standard deviation collapses, every ripple
569
- * clears mean + 1.5σ, and a held note reports dozens of onsets. `minStrength`
570
- * is in the units {@link spectralFlux} returns — a fraction of the frame's own
571
- * magnitude — so 0.04 means "at least 4% of this frame's energy is new".
572
- */
573
- export function detectOnsets(flux, times, sensitivity = 1.5, windowFrames = 10, minGapSeconds = 0.05, minStrength = 0.04) {
574
- const onsets = [];
575
- if (flux.length < 3)
576
- return onsets;
577
- let lastOnset = Number.NEGATIVE_INFINITY;
578
- for (let index = 1; index < flux.length - 1; index += 1) {
579
- const value = flux[index] ?? 0;
580
- if (value < minStrength)
581
- continue;
582
- if (value <= (flux[index - 1] ?? 0) || value < (flux[index + 1] ?? 0)) {
583
- continue;
584
- }
585
- const from = Math.max(0, index - windowFrames);
586
- const to = Math.min(flux.length, index + windowFrames + 1);
587
- let sum = 0;
588
- for (let n = from; n < to; n += 1)
589
- sum += flux[n] ?? 0;
590
- const mean = sum / (to - from);
591
- let variance = 0;
592
- for (let n = from; n < to; n += 1) {
593
- const delta = (flux[n] ?? 0) - mean;
594
- variance += delta * delta;
595
- }
596
- const deviation = Math.sqrt(variance / (to - from));
597
- if (value < mean + sensitivity * deviation || value <= 0)
598
- continue;
599
- const time = times[index] ?? 0;
600
- if (time - lastOnset < minGapSeconds)
601
- continue;
602
- onsets.push(time);
603
- lastOnset = time;
604
- }
605
- return onsets;
606
- }
607
- /**
608
- * Tempo from the autocorrelation of the novelty curve.
609
- *
610
- * Only lags inside `minBpm`..`maxBpm` are considered, so the classic
611
- * half/double-time ambiguity is bounded rather than unbounded. Confidence is
612
- * the autocorrelation at the winning lag over the curve's own energy; a
613
- * non-rhythmic signal scores near zero, and the caller is expected to say so
614
- * instead of printing a BPM for speech.
615
- */
616
- export function estimateTempo(novelty, hopSeconds, minBpm = 50, maxBpm = 200) {
617
- if (novelty.length < 4 || hopSeconds <= 0)
618
- return { bpm: 0, confidence: 0 };
619
- const mean = novelty.reduce((sum, value) => sum + value, 0) / novelty.length;
620
- const centred = novelty.map((value) => value - mean);
621
- const energy = centred.reduce((sum, value) => sum + value * value, 0);
622
- if (energy <= 0)
623
- return { bpm: 0, confidence: 0 };
624
- const minLag = Math.max(1, Math.floor(60 / (maxBpm * hopSeconds)));
625
- const maxLag = Math.min(centred.length - 1, Math.ceil(60 / (minBpm * hopSeconds)));
626
- let bestLag = 0;
627
- let bestScore = 0;
628
- for (let lag = minLag; lag <= maxLag; lag += 1) {
629
- let sum = 0;
630
- for (let index = 0; index + lag < centred.length; index += 1) {
631
- sum += centred[index] * centred[index + lag];
632
- }
633
- if (sum > bestScore) {
634
- bestScore = sum;
635
- bestLag = lag;
636
- }
637
- }
638
- if (bestLag === 0)
639
- return { bpm: 0, confidence: 0 };
640
- return {
641
- bpm: 60 / (bestLag * hopSeconds),
642
- confidence: Math.min(1, bestScore / energy)
643
- };
644
- }
645
458
  //# sourceMappingURL=audio-dsp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-dsp.js","sourceRoot":"","sources":["../../src/analysis/audio-dsp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC;AAS9B,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAC7C,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,MAAM,CAAC,OAAqB,EAAE,QAAgB;IAC5D,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACvD,GAAG,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,QAAQ,CACtB,OAAqB,EACrB,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAcD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAqB,EACrB,UAAkB,EAClB,YAAoB,EACpB,UAAkB,EAClB,QAAQ,GAAG,CAAC;IAEZ,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;QAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC;QACtE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,UAAU,IAAI,KAAK,GAAG,KAAK,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,SAAS,GAAG,IAAI,EAAE,CAAC;gBACrB,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,KAAK,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;YACrC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,IAAkB,EAClB,aAAa,GAAG,KAAK;IAErB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,SAAS,GAAG,IAAI;YAAE,IAAI,GAAG,SAAS,CAAC;QACvC,IAAI,SAAS,IAAI,aAAa;YAAE,OAAO,IAAI,CAAC,CAAC;QAC7C,UAAU,IAAI,KAAK,GAAG,KAAK,CAAC;QAC5B,GAAG,IAAI,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;IAC1C,OAAO;QACL,IAAI;QACJ,GAAG;QACH,QAAQ,EAAE,GAAG,GAAG,KAAK;QACrB,cAAc,EAAE,OAAO;QACvB,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK;QAAE,IAAI,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EAAgB,EAAE,EAAgB;IAC3D,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC;IACvB,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,4BAA4B;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;YAAE,CAAC,IAAI,GAAG,CAAC;QACpC,CAAC,IAAI,GAAG,CAAC;QACT,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjB,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACd,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjB,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACd,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IACD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC;YAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC5C,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC5C,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;gBACvB,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;gBACvB,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;gBACvB,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;gBACvB,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;gBACzC,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;gBAClC,KAAK,GAAG,MAAM,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAoB,EACpB,MAAc,EACd,MAAoB;IAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACvC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAkBD,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAC9B,SAAuB,EACvB,UAAkB,EAClB,OAAe,EACf,eAAe,GAAG,IAAI;IAEtB,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,wEAAwE;IACxE,0DAA0D;IAC1D,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,IAAI,KAAK,CAAC;QACf,QAAQ,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;QAChC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAC;YAClB,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO;YACL,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;SACV,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,OAAO,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;YACvC,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC;YACxB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,UAAU,CAAC;QACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IACpD,CAAC;IACD,OAAO;QACL,UAAU;QACV,SAAS;QACT,QAAQ,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACjE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxC,MAAM,EAAE,OAAO,GAAG,KAAK;QACvB,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAC3C,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;IACxC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACnD,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAC/C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACjD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAC9C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE;CAChE,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAC1B,SAAuB,EACvB,UAAkB,EAClB,OAAe;IAEf,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;IAC/B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,SAAS,CAAC,MAAM,GAAG,CAAC,EACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CACnD,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAcD,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CACzB,MAAoB,EACpB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAsB;IAE1C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;IACV,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB;IAElB,MAAM,OAAO,GAAG,kBAAkB,CAAC;IACnC,MAAM,WAAW,GAAG,iBAAiB,CAAC;IACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,EAAE,IAAI,kBAAkB,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACvD,MAAM,SAAS,GAAuB;QACpC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,QAAQ;QAC9D,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ;QAC3C,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,QAAQ;QAC9D,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ;QAC1C,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,QAAQ;KACvD,CAAC;IAEF,MAAM,IAAI,GAAG,iBAAiB,CAAC;IAC/B,MAAM,GAAG,GAAG,kBAAkB,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAuB;QACnC,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC,CAAC;QACN,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK;QACjC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK;KACxC,CAAC;IACF,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,QAAgB;IACtD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AAgBD,yEAAyE;AACzE,SAAS,UAAU,CAAC,MAAoB,EAAE,KAAa,EAAE,GAAW;IAClE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAED,4DAA4D;AAC5D,SAAS,aAAa,CAAC,UAAoB,EAAE,QAAgB;IAC3D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAChE,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAC9C,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,yEAAyE;AACzE,SAAS,UAAU,CAAC,MAAgB,EAAE,QAAgB;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IACzD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,MAAM,CAAC,MAAM,GAAG,CAAC,EACjB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACxD,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA+B,EAC/B,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAmB;QAC5B,cAAc,EAAE,MAAM,CAAC,iBAAiB;QACxC,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;QAC1C,gBAAgB,EAAE,MAAM,CAAC,iBAAiB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAC;IACF,IAAI,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,CACjD,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAElC,+EAA+E;IAC/E,MAAM,MAAM,GAAG,CAAC,SAAiB,EAA0C,EAAE;QAC3E,MAAM,GAAG,GAA2C,EAAE,CAAC;QACvD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,KAAK,GAAG,UAAU;gBACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAC5C;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/C,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC9C,CAAC,CAAC,CAAC;IAEJ,+DAA+D;IAC/D,MAAM,aAAa,GAAG,CACpB,UAAkD,EAClD,cAAsB,EACd,EAAE;QACV,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAChE,MAAM,YAAY,GAAG,CACnB,GAA6B,EACnB,EAAE,CACZ,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CACpD,GAAG,CAAC,MAAM,CACR,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACpD,CAAC,CACF,GAAG,GAAG,CAAC,MAAM,CACf,CAAC;QACJ,MAAM,iBAAiB,GACrB,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC;QACxE,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAC1C,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;QACxD,OAAO,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI;KAC5B,CAAC,CAAC,CAAC;IACJ,MAAM,cAAc,GAAG,aAAa,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAEhE,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC9C,CAAC,CAAC,CAAC;IACJ,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnE,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,aAAa;aACvB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,eAAe,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO;QACL,cAAc;QACd,eAAe;QACf,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,gBAAgB,EACd,eAAe,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;YAC9B,CAAC,CAAC,MAAM,CAAC,iBAAiB;QAC9B,SAAS;KACV,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAuB,EACvB,QAAsB;IAEtB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,KAAK,IAAI,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA8B,EAC9B,WAAmB,EACnB,kBAA0B,EAC1B,aAAqB;IAErB,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,OAAe,EAAQ,EAAE;QACtC,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAC9B,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QACpC,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QACtD,IAAI,MAAM,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAChC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAC5B,QAAiC,EACjC,QAAgB;IAEhB,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAQ,EAAE;QAChD,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAuB,EACvB,KAAwB,EACxB,WAAW,GAAG,GAAG,EACjB,YAAY,GAAG,EAAE,EACjB,aAAa,GAAG,IAAI,EACpB,WAAW,GAAG,IAAI;IAElB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACzC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,WAAW;YAAE,SAAS;QAClC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACtE,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;YAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,IAAI,GAAG,WAAW,GAAG,SAAS,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,SAAS,GAAG,aAAa;YAAE,SAAS;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,UAAkB,EAClB,MAAM,GAAG,EAAE,EACX,MAAM,GAAG,GAAG;IAEZ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC5E,MAAM,IAAI,GACR,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAClE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,OAAO,CAAC,MAAM,GAAG,CAAC,EAClB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CACtC,CAAC;IACF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC7D,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACpB,SAAS,GAAG,GAAG,CAAC;YAChB,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACpD,OAAO;QACL,GAAG,EAAE,EAAE,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC;QAChC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"audio-dsp.js","sourceRoot":"","sources":["../../src/analysis/audio-dsp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/capabilities/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAuBH,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,6BAA6B,CAAC;AA8BrC,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AA8HpB,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;gFAE4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AA8BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,GAAG,YAAY,EAChC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CAsF7B;AAivBD,eAAO,MAAM,MAAM,EAAE,gBASpB,CAAC"}
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/capabilities/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA2BH,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,6BAA6B,CAAC;AA8BrC,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AA8HpB,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;gFAE4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AA0BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,GAAG,YAAY,EAChC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC,CAmE7B;AAwuBD,eAAO,MAAM,MAAM,EAAE,gBASpB,CAAC"}
@@ -25,7 +25,8 @@
25
25
  * so in the result rather than silently returning part of the truth.
26
26
  */
27
27
  import { loadMediaRefBytes } from "@nodetool-ai/runtime";
28
- import { amplitudeToDb, bandEnergies, detectOnsets, energyFrames, estimateTempo, floorPowerOfTwo, hannWindow, invertSegments, magnitudeSpectrum, measureLoudness, peakSummary, round, silenceSegments, spectralFeatures, spectralFlux, toMono, toPlanar } from "../analysis/audio-dsp.js";
28
+ import { analyzeOnsets, DEFAULT_ONSET_SENSITIVITY, isTempoReliable, MIN_TEMPO_ONSETS } from "@nodetool-ai/timeline";
29
+ import { amplitudeToDb, bandEnergies, energyFrames, floorPowerOfTwo, hannWindow, invertSegments, magnitudeSpectrum, measureLoudness, peakSummary, round, silenceSegments, spectralFeatures, spectralFlux, toMono, toPlanar } from "../analysis/audio-dsp.js";
29
30
  import { decodeAudio, forEachVideoFrame, probeContainer, videoSamplingPlan, maximumVideoSamplingGap } from "../analysis/media-decode.js";
30
31
  import { detectCuts, dominantColors, downscaleLuma, frameStats, frameTransitions, lumaHistogram, runsOf, shotsFromCuts } from "../analysis/video-frames.js";
31
32
  import { filesystemPathForUri } from "../sandbox-media-ref.js";
@@ -128,10 +129,7 @@ function capped(items) {
128
129
  ? { items: [...items], truncated: false }
129
130
  : { items: items.slice(0, MAX_EVENTS), truncated: true };
130
131
  }
131
- /** The onset detector's FFT window — fixed, matching `detect_audio_events`. */
132
- const ONSET_FFT_SIZE = 1024;
133
132
  const DEFAULT_FRAME_MS = 20;
134
- const DEFAULT_ONSET_SENSITIVITY = 1.5;
135
133
  /**
136
134
  * Decode `input` (or reuse an already-decoded track) up to the decode cap,
137
135
  * throwing the same messages `loadAudio` would for a track-less or
@@ -199,28 +197,12 @@ export async function analyzeAudioFrames(input, options = {}) {
199
197
  rms: frame.rms,
200
198
  peak: frame.peak
201
199
  }));
202
- // Onsets come off spectral flux, same window and FFT size
203
- // `detect_audio_events` always used, so delegating here changes nothing it
204
- // returns.
205
- const window = hannWindow(ONSET_FFT_SIZE);
206
- const hop = ONSET_FFT_SIZE / 4;
207
- const hopSeconds = hop / audio.sampleRate;
208
- const flux = [];
209
- const times = [];
210
- let previous = null;
211
- for (let offset = 0; offset + ONSET_FFT_SIZE <= windowMono.length; offset += hop) {
212
- const magnitude = magnitudeSpectrum(windowMono, offset, window);
213
- if (previous) {
214
- flux.push(spectralFlux(magnitude, previous));
215
- times.push(offset / audio.sampleRate);
216
- }
217
- previous = magnitude;
218
- }
219
- const sensitivity = options.onsetSensitivity ?? DEFAULT_ONSET_SENSITIVITY;
220
- const onsets = detectOnsets(flux, times, sensitivity);
221
- const onsetsMs = onsets.map((time) => analyzedFromMs + time * 1000);
222
- const wantTempo = options.detectTempo !== false;
223
- const tempo = wantTempo ? estimateTempo(flux, hopSeconds) : null;
200
+ const onsetAnalysis = analyzeOnsets(windowMono, audio.sampleRate, {
201
+ sensitivity: options.onsetSensitivity ?? DEFAULT_ONSET_SENSITIVITY,
202
+ detectTempo: options.detectTempo !== false
203
+ });
204
+ const onsetsMs = onsetAnalysis.onsetsMs.map((timeMs) => analyzedFromMs + timeMs);
205
+ const tempo = onsetAnalysis.tempo ?? null;
224
206
  return {
225
207
  frameMs,
226
208
  frames,
@@ -479,12 +461,6 @@ const detectAudioEvents = {
479
461
  const tempo = wantTempo
480
462
  ? { bpm: analysis.bpm ?? 0, confidence: analysis.tempoConfidence ?? 0 }
481
463
  : { bpm: 0, confidence: 0 };
482
- // A tempo needs repeated events to be a tempo. Autocorrelating the flux of
483
- // a steady tone — which is numerical noise around zero — still peaks
484
- // somewhere, and that peak scores a confident-looking 0.4 for a signal
485
- // with no beat in it at all. Four onsets is three intervals, the least
486
- // that can agree about a period.
487
- const MIN_TEMPO_ONSETS = 4;
488
464
  const cappedSilence = capped(silence);
489
465
  const cappedSounding = capped(sounding);
490
466
  const cappedOnsets = capped(onsets);
@@ -515,9 +491,7 @@ const detectAudioEvents = {
515
491
  // Naming the floor beats printing a BPM the caller has no way to
516
492
  // judge: speech and ambience both produce a confident-looking
517
493
  // number from an autocorrelation that found nothing periodic.
518
- reliable: tempo.confidence >= 0.15 &&
519
- tempo.bpm > 0 &&
520
- onsets.length >= MIN_TEMPO_ONSETS
494
+ reliable: isTempoReliable(tempo, onsets.length)
521
495
  }
522
496
  : null,
523
497
  notes: [