@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.
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/_skills/api-sketches/SKILL.md +6 -3
- package/dist/_skills/nodetool-sketch/SKILL.md +24 -6
- package/dist/analysis/audio-dsp.d.ts +1 -60
- package/dist/analysis/audio-dsp.d.ts.map +1 -1
- package/dist/analysis/audio-dsp.js +3 -190
- package/dist/analysis/audio-dsp.js.map +1 -1
- package/dist/capabilities/analysis.d.ts.map +1 -1
- package/dist/capabilities/analysis.js +9 -35
- package/dist/capabilities/analysis.js.map +1 -1
- package/dist/capabilities/assets.d.ts.map +1 -1
- package/dist/capabilities/assets.js +10 -6
- package/dist/capabilities/assets.js.map +1 -1
- package/dist/capabilities/project-scope.d.ts +8 -0
- package/dist/capabilities/project-scope.d.ts.map +1 -1
- package/dist/capabilities/project-scope.js +16 -0
- package/dist/capabilities/project-scope.js.map +1 -1
- package/dist/capabilities/sketches.d.ts +8 -1
- package/dist/capabilities/sketches.d.ts.map +1 -1
- package/dist/capabilities/sketches.js +100 -2
- package/dist/capabilities/sketches.js.map +1 -1
- package/dist/capabilities/sketches.specs.d.ts +2 -0
- package/dist/capabilities/sketches.specs.d.ts.map +1 -1
- package/dist/capabilities/sketches.specs.js +61 -0
- package/dist/capabilities/sketches.specs.js.map +1 -1
- package/dist/codeact/nodetool-api.d.ts +1 -1
- package/dist/codeact/nodetool-api.d.ts.map +1 -1
- package/dist/codeact/nodetool-api.js +23 -5
- package/dist/codeact/nodetool-api.js.map +1 -1
- package/dist/sketch-render/render.d.ts +50 -0
- package/dist/sketch-render/render.d.ts.map +1 -0
- package/dist/sketch-render/render.js +191 -0
- package/dist/sketch-render/render.js.map +1 -0
- package/dist/tools/asset-persist.d.ts.map +1 -1
- package/dist/tools/asset-persist.js +1 -0
- package/dist/tools/asset-persist.js.map +1 -1
- package/dist/tools/builtin-tools.d.ts.map +1 -1
- package/dist/tools/builtin-tools.js +1 -0
- package/dist/tools/builtin-tools.js.map +1 -1
- package/dist/tools/external-mcp-tools.d.ts +6 -0
- package/dist/tools/external-mcp-tools.d.ts.map +1 -1
- package/dist/tools/external-mcp-tools.js +15 -4
- package/dist/tools/external-mcp-tools.js.map +1 -1
- package/package.json +26 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-10-
|
|
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
|
-
-
|
|
50
|
-
|
|
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
|
|
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
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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. **
|
|
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":"AAAA;;;;;;;;;;;;;GAaG;
|
|
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":"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"}
|
|
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;
|
|
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 {
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
const
|
|
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
|
|
519
|
-
tempo.bpm > 0 &&
|
|
520
|
-
onsets.length >= MIN_TEMPO_ONSETS
|
|
494
|
+
reliable: isTempoReliable(tempo, onsets.length)
|
|
521
495
|
}
|
|
522
496
|
: null,
|
|
523
497
|
notes: [
|