explainroo
explainroo는 AI 에이전트가 음성으로 설명 영상을 만들 수 있는 무료 오픈소스 도구이며, 로컬에서 API 키 없이 실행됩니다
madmom의 신경 비트 트래커를 순수 JavaScript로 옮겨 마이크나 브라우저 탭을 듣고 템포를 잡아 박자를 찾고 악센트를 표시합니다
madmom's neural beat tracker ported to plain JavaScript. Listens to your mic or a browser tab, locks onto the tempo, finds the meter and marks the accents — no backend, no WASM, no ONNX.
미디어JavaScript · CSSGitHub @mathigatti온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Live beat tracking in the browser: madmom's neural model ported to plain JavaScript. No backend, no WASM, no ONNX.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live beat tracker that runs entirely in the browser: it listens to audio, locks onto the tempo, shows which beat of the bar you are on and how hard it was accented — and a little robot dances to it.
No backend, no WASM, no dependencies. madmom's neural model is ported to plain JavaScript and produces exactly the same beats as the original, down to float32 rounding noise.
▶ Try it — hit "Listen to input" (microphone or system monitor) or "Tab audio" to pick up whatever is playing in another tab.
audio ─▶ AudioWorklet ─▶ features ─▶ 8x LSTM ensemble ─▶ HMM ─▶ beats
│ (441 hops) (FFT + (with peepholes) (forward) │
│ filterbank ▼
│ + log + diff) grid
│ (tempo, meter)
└─▶ rolling 6 s window ─▶ bidirectional BLSTM ─▶ phase vote ─▶ the "1"
(in a Web Worker) (downbeat model)
The beat tracker is causal and runs in real time. The downbeat model is bidirectional — it cannot run in streaming — so it lives in a Web Worker over a 6 s window, and every beat votes for its position in the bar.
python3 serve.py 8090 # serves web/, no caching
It has to be over HTTP: ES modules and AudioWorklet do not work from file://.
In production HTTPS is required (the microphone demands it); Netlify handles that
for you.
npm test # parity against madmom, stage by stage
node test/silence.mjs # the gate: noise vs music
node test/gapfill.mjs # filling in skipped beats
node test/meter.mjs a.f32 # meter on songs of known meter
node test/playlist.mjs a.f32 # meter recovery when the track changes
node test/dance.mjs # dance subdivisions, without a browser
The parity tests need fixtures that are not versioned (~11 MB). Regenerate them with the exporters:
AUDIO_E2E=/path/to/a/song.mp3 python tools/export_madmom.py
python tools/export_downbeats.py 3
That needs madmom==0.16.1 in Python (see
docs/MIGRATION.md).
Static site, no build. netlify.toml already sets publish = "web".
netlify deploy --prod
Or connect the repo from the Netlify dashboard: it picks up netlify.toml and
there is nothing to configure.
web/ what gets published
├── index.html, app.js, styles.css
├── worklet.js collects 441-sample hops
├── downbeat-worker.js
├── src/ the port: features, network, HMM, grid, accent, meter, dance
└── public/models/ exported weights (2.7 MB)
tools/ exporters from madmom (Python)
test/ parity and behaviour (Node)
docs/ the two long documents
serve.py development server with caching disabled
The model is madmom's (Böck et al.), BSD. This repo only ports it.
MIT.