Hear a "vocal" get lifted out of a mix: the library learns EQ curves from the
vocal's spectral fingerprint, applies them to the mixture, and you can play
the vocal, the backing, the mix, and the reconstruction below. Because both
parts are synthesized — the vocal is a 440 Hz carrier with 5 Hz vibrato
±30 cents and 2 harmonic partials, the backing a 110 Hz bass plus a 4 Hz
click train, mixture = sum — everything is measured against the known parts.
Pipeline: processAudioToFingerprints on vocal and mixture →
optimizeEqCurves (100 iters) → reconstructVocal on
the mixture STFT.
Honest framing: this pipeline is supervised — it is handed the
true vocal (its fingerprints are the optimization target) and is scored
against the very parts it was given. That demonstrates stem-guided spectral
matching, not blind separation; the unsupervised baseline is REPET-SIM
(decompose.nn_filter + decompose.softmask) and HPSS
(decompose.hpss), compared head-to-head in the real-stems demos.
Honest note: the optimizer is plain full-batch gradient descent with
NO input normalization — stability requires lr < 1/max(|STFT|)².
At the natural signal levels here that means lr = 1e-5
(verified headless in Node: lr 0.01 slams the EQ against its clip bounds and
the loss oscillates 294↔594 instead of descending).