{"_id":"@audio/spectral-flux","_rev":"6-3bbb11c208618818cb3a831650543ec2","name":"@audio/spectral-flux","dist-tags":{"latest":"1.1.4"},"versions":{"1.0.0":{"name":"@audio/spectral-flux","version":"1.0.0","keywords":["audio","dsp","spectral","features","flux"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-flux@1.0.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"8582a04cefe86ddb2c627fdc16f421a0fb049abd","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.0.0.tgz","fileCount":3,"integrity":"sha512-P+CZQtEJEFwLB6N7CeBYmR+eIfB7+qiKiS2ehAqMBHrJy1nYSaW1nTWDgn+T1cahVr3gUe5q/qlVk1MNPVmsXw==","signatures":[{"sig":"MEQCIAQGRmcZap3LU1IjUmsYn+nFj/i78y7WYfjYAacJ47EbAiBl5s1Lhi7YBiUHux0vslAD2ZiZtmYlOYNX+cMkZVY1PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1223},"main":"flux.js","type":"module","engines":{"node":">=18"},"exports":{".":"./flux.js","./package.json":"./package.json"},"gitHead":"a1aba4f2662a0f284ef88a04047c6cfa3c3ce6e5","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-flux_1.0.0_1783540015881_0.4756418948569945","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@audio/spectral-flux","version":"1.1.0","keywords":["audio","dsp","spectral","features","flux"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-flux@1.1.0","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"79794bd7a92b9093765888a7b248b6accb6510e2","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.1.0.tgz","fileCount":4,"integrity":"sha512-n5KDgoKBsgy34Ows2dqqQ6slQxWg2ro8tPuzNVmBmm97CmYzH0dZKDjD7WgpJuMgIsNUfUMdLVK4sSONkxCV5Q==","signatures":[{"sig":"MEQCIG+tJJw92B0BumsFcjauQ1SE3asmxylzIfCdBjdbac24AiAQ67FLIulv4E9E3+CsD4IpeYZ8qTA3KWGnJY4Sp52PBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2469},"main":"flux.js","type":"module","engines":{"node":">=18"},"exports":{".":"./flux.js","./stat":"./stat.js","./package.json":"./package.json"},"gitHead":"aee601cfdf49e67cf47232ef76b6983d4129f4a5","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-flux_1.1.0_1783635214556_0.01993599778100741","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@audio/spectral-flux","version":"1.1.1","keywords":["audio","dsp","spectral","features","flux"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-flux@1.1.1","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"4a93ca2514c63b34ce66ef7dee3079e28847929a","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.1.1.tgz","fileCount":4,"integrity":"sha512-55MOzO0QBsoac6u73gZuyHFIqMqUcza/OFY2PMe/HbbTH+84rADGvJhaaoNeXB0smHk1je7+zNjGhQjbevG/fA==","signatures":[{"sig":"MEQCIGPgMA/bCh8FvDOGjJyvjAaPxP7/Djq+D0BYrDNaQH7RAiAtHQYTomxM8UA8NBIhUBFLq74csSvsAf+mlm/L+sSDww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2497},"main":"flux.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./flux.js","./audio":"./audio.js","./package.json":"./package.json"},"gitHead":"b4077a4f931c647dc20ff7d6e82b612391de1a77","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-flux_1.1.1_1783645103260_0.7775762781846063","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@audio/spectral-flux","version":"1.1.2","keywords":["audio","dsp","spectral","features","flux"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-flux@1.1.2","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"dist":{"shasum":"7f96a8a4bda15eb22e684e7af2e3730da2a996e6","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.1.2.tgz","fileCount":5,"integrity":"sha512-NfXkaCQp5ahWn/zgJNJ25ktET1uCJJBMDPMb3JevkobbGZE5P6STNCHBj2WmyJLN+gaKROX3OglzKdXYwww/YA==","signatures":[{"sig":"MEQCIH/zgbT2rDCQ9GkP+BaxxHOsb1nxHXgEnZIS1KYGz3TGAiAMDTCqxaWvvSCFBvr637GHH6eIFc561+uLEDEEaPPryg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3566},"main":"flux.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./flux.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"e8fc5c606da9a5786768cb46d0141910604689e1","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"_npmVersion":"11.12.1","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-flux_1.1.2_1783701821610_0.9988010375847978","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@audio/spectral-flux","version":"1.1.3","keywords":["audio","dsp","spectral","features","flux"],"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","_id":"@audio/spectral-flux@1.1.3","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"homepage":"https://github.com/audiojs/spectral#readme","bugs":{"url":"https://github.com/audiojs/spectral/issues"},"dist":{"shasum":"82d20ad2427847d830eec6d8dec253e8d1c8827b","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.1.3.tgz","fileCount":5,"integrity":"sha512-NaiSDS+FUpXa3qnhc4Ei8TiOmrk55Ogna0sNmeyOHB4zAcKwa4Ybf8gStrZVcRT35BPrbCac/Vf4Q4UglxtL0w==","signatures":[{"sig":"MEQCIFH1LzVLoXQ9TkNQqvOph4akDdQGDPHiTYEc5BimXBTNAiBLHedQjH5jKe5HMNmhKG4t0aUR1AvE2F+jrdErCAUznA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4534},"main":"flux.js","type":"module","audio":"./audio.js","engines":{"node":">=18"},"exports":{".":"./flux.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"gitHead":"27a82efde8c69de05035cc9f97fc017936efb69e","_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"repository":{"url":"git+https://github.com/audiojs/spectral.git","type":"git","directory":"packages/spectral-flux"},"_npmVersion":"11.12.1","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"fourier-transform":"^2.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spectral-flux_1.1.3_1783726345068_0.7617213799182856","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@audio/spectral-flux","version":"1.1.4","description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","type":"module","sideEffects":false,"main":"flux.js","exports":{".":"./flux.js","./audio":{"types":"./audio.d.ts","default":"./audio.js"},"./package.json":"./package.json"},"keywords":["audio","dsp","spectral","features","flux"],"license":"MIT","author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"dependencies":{"fourier-transform":"^2.3.1"},"types":"index.d.ts","audio":"./audio.js","repository":{"type":"git","url":"git+https://github.com/audiojs/spectral.git","directory":"packages/spectral-flux"},"funding":"https://github.com/sponsors/audiojs","gitHead":"0bf461273c2acb2401ff9842afec35a43fd05a9a","_id":"@audio/spectral-flux@1.1.4","bugs":{"url":"https://github.com/audiojs/spectral/issues"},"homepage":"https://github.com/audiojs/spectral#readme","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-bk2YqU5Kj9sszmz3PHNEbotXjaSshZBDZE1AT9UzYngvOI6f8xDhGWQYnVlIXMKtq5r79tSSLee+j70oDbWdaQ==","shasum":"78343bf1f86aa065631731b6067635ced340bf75","tarball":"https://registry.npmjs.org/@audio/spectral-flux/-/spectral-flux-1.1.4.tgz","fileCount":6,"unpackedSize":5160,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCwHYo4xn71QtHJPDrKzvRVHIE0OjmH/+bCOojC9VvkuAIgIKa/ktesmYJAqzKtaXBhtWvwQttkcT+1g1HgYMaw4ww="}]},"_npmUser":{"name":"dy","email":"df.creative@gmail.com"},"directories":{},"maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spectral-flux_1.1.4_1783731878617_0.4019868082883806"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T19:46:55.732Z","modified":"2026-07-11T01:04:38.958Z","1.0.0":"2026-07-08T19:46:56.029Z","1.1.0":"2026-07-09T22:13:34.677Z","1.1.1":"2026-07-10T00:58:23.399Z","1.1.2":"2026-07-10T16:43:41.762Z","1.1.3":"2026-07-10T23:32:25.266Z","1.1.4":"2026-07-11T01:04:38.773Z"},"bugs":{"url":"https://github.com/audiojs/spectral/issues"},"author":{"name":"Dmitry Iv.","email":"dfcreative@gmail.com"},"license":"MIT","homepage":"https://github.com/audiojs/spectral#readme","keywords":["audio","dsp","spectral","features","flux"],"repository":{"type":"git","url":"git+https://github.com/audiojs/spectral.git","directory":"packages/spectral-flux"},"description":"Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg aspectralstats);","maintainers":[{"name":"jamen","email":"jamenmarz@gmail.com"},{"name":"dfcreative","email":"df.creative@gmail.com"},{"name":"dy","email":"df.creative@gmail.com"}],"readme":"# @audio/spectral-flux\n\n> Spectral flux — frame-to-frame magnitude change. Euclidean by default (FFmpeg `aspectralstats`); `{ rectified: true }` sums positive differences only (onset-detection flavour).\n\n`npm install @audio/spectral-flux`\n\n```js\nimport { fft } from 'fourier-transform'\nimport flux from '@audio/spectral-flux'\n\nlet prev = null\nfor (const frame of frames) {              // consecutive, equal-length frames\n\tlet win = frame.map((x, i) => x * (0.5 - 0.5 * Math.cos(2 * Math.PI * i / (frame.length - 1))))\n\tlet [re, im] = fft(win)\n\tlet mag = re.map((r, k) => Math.hypot(r, im[k]))\n\tlet v = flux(mag, prev)                  // 0 on the first frame (no prev)\n\tprev = mag\n}\n```\n\nOptions: - `rectified` — sum only positive frame-to-frame increases instead of Euclidean distance (default `false`)\n\nAlso exported as an `audio.js` stat manifest (`./audio` — mono-fold, 2048/512 hann frames, averaged over the take).\n\nPart of [@audio/spectral](https://github.com/audiojs/spectral).\n","readmeFilename":"README.md"}