drumscript 0.1.6__tar.gz → 0.2.1__tar.gz

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 (37) hide show
  1. {drumscript-0.1.6 → drumscript-0.2.1}/MANIFEST.in +1 -7
  2. {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1}/PKG-INFO +170 -82
  3. {drumscript-0.1.6 → drumscript-0.2.1}/README.md +167 -81
  4. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/__init__.py +91 -17
  5. drumscript-0.2.1/drumscript/main.py +435 -0
  6. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/score_builder.py +27 -1
  7. {drumscript-0.1.6 → drumscript-0.2.1/drumscript.egg-info}/PKG-INFO +170 -82
  8. {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/SOURCES.txt +0 -6
  9. drumscript-0.2.1/drumscript.egg-info/entry_points.txt +2 -0
  10. {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/requires.txt +2 -0
  11. {drumscript-0.1.6 → drumscript-0.2.1}/pyproject.toml +13 -11
  12. drumscript-0.1.6/DrumScript.egg-info/entry_points.txt +0 -2
  13. drumscript-0.1.6/drumscript/main.py +0 -307
  14. {drumscript-0.1.6 → drumscript-0.2.1}/LICENSE +0 -0
  15. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/__init__.py +0 -0
  16. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/audio_loader.py +0 -0
  17. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/feature_extractor.py +0 -0
  18. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/onset_detector.py +0 -0
  19. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/stem_splitter.py +0 -0
  20. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/tempo_detector.py +0 -0
  21. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/tempogram.py +0 -0
  22. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/__init__.py +0 -0
  23. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/base.py +0 -0
  24. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/idmt.py +0 -0
  25. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/drum_classifier/__init__.py +0 -0
  26. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/drum_classifier/classify.py +0 -0
  27. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/__init__.py +0 -0
  28. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/constants.py +0 -0
  29. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/helpers.py +0 -0
  30. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/midi_exporter.py +0 -0
  31. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/pdf_exporter.py +0 -0
  32. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/xml_exporter.py +0 -0
  33. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/utils/__init__.py +0 -0
  34. {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/utils/ffmpeg_installer.py +0 -0
  35. {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/dependency_links.txt +0 -0
  36. {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/top_level.txt +0 -0
  37. {drumscript-0.1.6 → drumscript-0.2.1}/setup.cfg +0 -0
@@ -14,14 +14,8 @@ prune docs
14
14
  prune local_tests
15
15
  prune tests
16
16
  prune test_audio
17
- prune machine-learning
18
- prune labeled_datasets
19
17
  prune .archive
20
18
  prune .development
21
19
  prune logs
22
20
  prune outputs
23
- prune terraform
24
- prune visuals
25
- prune .testing
26
- prune branch_note
27
- exclude Makefile
21
+ prune visuals
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drumscript
3
- Version: 0.1.6
3
+ Version: 0.2.1
4
4
  Summary: A Python package to convert drum audio to sheet music.
5
5
  Author-email: drumscript-admin <hello.drumscript@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -30,7 +30,7 @@ Classifier: Topic :: Multimedia :: Sound/Audio :: Sound Synthesis
30
30
  Classifier: Topic :: Scientific/Engineering
31
31
  Classifier: Topic :: Scientific/Engineering :: Mathematics
32
32
  Classifier: Topic :: Scientific/Engineering :: Physics
33
- Requires-Python: <3.14,>=3.9
33
+ Requires-Python: <3.13,>=3.9
34
34
  Description-Content-Type: text/markdown
35
35
  License-File: LICENSE
36
36
  Requires-Dist: demucs
@@ -57,28 +57,48 @@ Requires-Dist: shibuya>=2025.10.21; extra == "dev"
57
57
  Requires-Dist: ipywidgets>=8.1.8; extra == "dev"
58
58
  Requires-Dist: requests>=2.32.5; extra == "dev"
59
59
  Requires-Dist: ruff>=0.15.11; extra == "dev"
60
+ Requires-Dist: twine>=6.2.0; extra == "dev"
61
+ Requires-Dist: nbstripout>=0.8.2; extra == "dev"
60
62
  Dynamic: license-file
61
63
 
62
64
  # **`DrumScript`**
63
65
 
64
66
  <!--date_created: sun-15-june-2025-->
65
- <!--date_edited: thurs-18-june-2026--->
67
+ <!--date_edited: thurd-20-august-2026--->
66
68
 
67
- **Workflow Status**
68
-
69
- [![Run Tests](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml)
69
+ **DrumScript** is an open-source Python library and CLI tool for drum audio analysis and transcription. Give it a recording — a full mix or an isolated drum stem — and it will generate PDF sheet music, MIDI files, and MusicXML output. The `DrumScript` model is a **deterministic classifier**, and doesn't use AI/machine learning. Built for drummers and by drummers, it is - and always will be - an open-source community tool.
70
70
 
71
- **Demo Notebooks**
71
+ > **Python >=3.9**
72
72
 
73
- [![Try DrumScript in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DrumScript/DrumScript/blob/main/docs/guide/interactive/drumscript_interactive_notebook.ipynb)
73
+ **Workflow Status**
74
+ >
75
+ [![Run Tests](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml)
76
+ >
77
+ **[Documentation](https://drumscript.github.io/DrumScript/)**
78
+ >
79
+ > **[Try DrumScript In Colab](https://colab.research.google.com/drive/15yBGu6WURPyiH-sEQ82g_2T2wKqiIPsq)**
80
+ >
81
+ > <a href="https://colab.research.google.com/drive/15yBGu6WURPyiH-sEQ82g_2T2wKqiIPsq" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>
74
82
 
75
- **DrumScript** is an open-source Python library and CLI tool for drum audio analysis and transcription. Give it a recording — a full mix or an isolated drum stem — and it will generate PDF sheet music, MIDI files, and MusicXML output. The `DrumScript` model is a **deterministic classifier**, and doesn't use AI/machine learning. Built for drummers and by drummers, it is - and always will be - an open-source community tool.
76
83
 
77
- > **Python >=3.9**
84
+ - **[Features](#features)**
85
+ - **[Project Structure](#project-structure)**
86
+ - **[Installation](#installation)**
87
+ - **[Quick Start](#quick-start)**
88
+ - **[CLI Usage](#cli-usage)**
89
+ - **[Contributing](#contributing)**
90
+ - **[Testing](#testing)**
91
+ - **[Benchmarking](#benchmarking)**
92
+ - **[Traffic](#traffic)**
93
+ - **[FAQs](#faqs)**
94
+ - **[Changelog](CHANGELOG.md)**
95
+ - **[Acknowledgements](#acknowledgements)**
96
+ - **[Similar projects](#similar-projects)**
97
+ - **[License](#license)**
78
98
 
79
- > **[Documentation](https://drumscript.github.io/DrumScript/)**
99
+ ---
80
100
 
81
- **Public Alpha (v0.1.4+) — June to August 2026**
101
+ #### **Public Alpha (v0.1.4+) — ongoing since June 2026**
82
102
 
83
103
  - We're looking for early adopters and feedback
84
104
  - [Feedback on the classification model](https://github.com/DrumScript/DrumScript/issues), and help shape v1.0.0.
@@ -87,7 +107,7 @@ Dynamic: license-file
87
107
 
88
108
  > See the **[Roadmap](https://drumscript.github.io/DrumScript/guide/roadmap.html)** for what's planned.
89
109
 
90
- **What it looks like**
110
+ #### **What it looks like**
91
111
 
92
112
  <!-- TODO: Replace with a GIF showing terminal output-->
93
113
  <!-- For now, this shows the PDF transcription output -->
@@ -96,46 +116,29 @@ Dynamic: license-file
96
116
 
97
117
  **Example 1: Simple groove**
98
118
 
99
- ![DrumScript transcription output](./docs/_static/test_wav.png)
119
+ <!---![DrumScript transcription output](./docs/_static/test_wav.png)-->
120
+ ![DrumScript transcription output](https://raw.githubusercontent.com/DrumScript/DrumScript/main//docs/_static/test_wav.png)
100
121
 
101
122
  **Example 2: A well-known Sabbath song**
102
123
 
103
- ![DrumScript transcription output](./docs/_static/iron_man_1.png)
104
- ![DrumScript transcription output](./docs/_static/iron_man_2.png)
105
- ![DrumScript transcription output](./docs/_static/iron_man_3.png)
124
+ <!---![DrumScript transcription output](./docs/_static/iron_man_1.png)--->
125
+ <!---![DrumScript transcription output](./docs/_static/iron_man_2.png)--->
126
+ <!---![DrumScript transcription output](./docs/_static/iron_man_3.png)--->
127
+ ![DrumScript transcription output](https://raw.githubusercontent.com/DrumScript/DrumScript/main/docs/_static/iron_man_1.png)
128
+ ![DrumScript transcription output](https://raw.githubusercontent.com/DrumScript/DrumScript/main/docs/_static/iron_man_2.png)
129
+ ![DrumScript transcription output](https://raw.githubusercontent.com/DrumScript/DrumScript/main/docs/_static/iron_man_3.png)
106
130
 
107
131
  ---
108
132
 
109
- - **[Features](#features)**
110
- - **[Installation](#installation)**
111
- - **[Quick Start](#quick-start)**
112
- - **[CLI Usage](#cli-usage)**
113
- - **[Contributing](#contributing)**
114
- - **[FAQs](#faqs)**
115
- - **[Similar projects](#similar-projects)**
116
-
117
- ---
118
-
119
- ## Features
120
-
121
- - **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
122
- - **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
123
- - **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
124
- - **Stem Separation:** Uses the state-of-the-art [Demucs](https://github.com/adefossez/demucs) source separation model to isolate drums, bass, vocals, and other instruments from a full mix.
125
- - **Backing Track Generator:** Automatically remove the drums from any `.mp3` or `.wav` to create a drumless play-along track. Bass-only and vocal-only extraction also supported.
126
- - **Multiple Output Formats:** Export transcriptions to PDF sheet music, MIDI (`.mid`), and MusicXML (`.xml`) for import into DAWs and notation software (Logic Pro, Cubase, Ableton, MuseScore, Sibelius, etc.).
127
- - **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
128
-
129
- > **Note:** Some dependencies used by DrumScript (e.g. [Demucs](https://github.com/adefossez/demucs), [librosa](https://librosa.org/)) may internally use probabilistic methods. DrumScript's own classification engine is fully deterministic.
130
-
131
- ---
132
133
 
133
134
  ## Project Structure
135
+ *[back](#drumscript)*
134
136
 
135
137
  See [`repository_structure.md`](repository_structure.md) for the full project layout.
136
138
 
137
139
  ```
138
140
  DrumScript/
141
+ ├── benchmarks/ # mir_eval scripts for benchmarking DrumScript
139
142
  ├── drumscript/ # Main source package
140
143
  │ ├── __init__.py # Public API (transcribe, load_audio, etc.)
141
144
  │ ├── main.py # CLI entry point
@@ -146,14 +149,33 @@ DrumScript/
146
149
  │ └── utils/ # Helpers (ffmpeg installer, research scripts)
147
150
  ├── benchmarks/ # Evaluation runners (see benchmarks/README.md)
148
151
  ├── docs/ # Sphinx documentation
149
- ├── tests/ # pytest test suite (131 unit + 8 integration)
152
+ ├── tests/ # pytest test suite (138 unit + 23 integration)
150
153
  ├── .github/workflows/ # CI/CD (tests, build, publish, docs)
151
154
  ├── pyproject.toml # Package metadata and dependencies
152
155
  └── uv.lock # Pinned dependency versions
153
156
  ```
154
157
 
158
+ ---
159
+
160
+ ## Features
161
+ *[back](#drumscript)*
162
+
163
+ - **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
164
+ - **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
165
+ - **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
166
+ - **Stem Separation:** Uses the state-of-the-art [Demucs](https://github.com/adefossez/demucs) source separation model to isolate drums, bass, vocals, and other instruments from a full mix.
167
+ - **Backing Track Generator:** Automatically remove the drums from any `.mp3` or `.wav` to create a drumless play-along track. Bass-only and vocal-only extraction also supported.
168
+ - **Multiple Output Formats:** Export transcriptions to PDF sheet music, MIDI (`.mid`), and MusicXML (`.xml`) for import into DAWs and notation software (Logic Pro, Cubase, Ableton, MuseScore, Sibelius, etc.).
169
+ - **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
170
+
171
+ > **Note:** Some dependencies used by DrumScript (e.g. [Demucs](https://github.com/adefossez/demucs), [librosa](https://librosa.org/)) may internally use probabilistic methods. DrumScript's own classification engine is fully deterministic.
172
+
173
+ ---
174
+
175
+
155
176
 
156
177
  ## Installation
178
+ *[back](#drumscript)*
157
179
 
158
180
  **For users:**
159
181
 
@@ -195,6 +217,7 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
195
217
  ---
196
218
 
197
219
  ## Quick Start
220
+ *[back](#drumscript)*
198
221
 
199
222
  > Please note: DrumScript assumes you are providing **drum audio-only inputs by default**
200
223
 
@@ -205,27 +228,35 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
205
228
  ```python
206
229
  import drumscript as ds
207
230
 
208
- # Transcribe an isolated drum stem → PDF
209
- pdf_path = ds.transcribe("drum_audio.wav")
231
+ # Transcribe an isolated drum stem → PDF + JSON + MIDI
232
+ result = ds.transcribe("drum_audio.wav")
233
+ print(result["pdf_path"]) # PDF sheet music
234
+ print(result["json_path"]) # raw transcription data (JSON)
235
+ print(result["midi_path"]) # MIDI file for DAW import
210
236
 
211
237
  # Transcribe a full song (separates drums automatically)
212
- pdf_path = ds.transcribe("full_song.mp3") # drum only audio
213
- pdf_path = ds.transcribe("full_song.mp3", full_song=True) # full song, tells DrumScript to extract the drums first and then transcribe
238
+ result = ds.transcribe("full_song.mp3") # drum only audio
239
+ result = ds.transcribe("full_song.mp3", full_song=True) # full song, tells DrumScript to extract the drums first and then transcribe
214
240
 
215
- # Get all intermediate results
241
+ # Get all intermediate results (tempo, onsets, events, etc.)
216
242
  result = ds.transcribe("drum_audio.wav", verbose=True)
217
243
  print(f"Tempo: {result['tempo']:.1f} BPM")
218
244
  print(f"Events: {len(result['events'])}")
245
+ print(f"PDF: {result['pdf_path']}")
246
+ print(f"MIDI: {result['midi_path']}")
219
247
  ```
220
248
 
249
+ > **Note (v0.2.0):** `transcribe()` now returns a dict with `pdf_path`, `json_path`, and `midi_path` keys. Using the return value as a plain string (e.g. `pdf = ds.transcribe(...)`) still works but is deprecated and will be removed in v1.0.0. Use `result["pdf_path"]` instead.
250
+
221
251
  ### Load and explore audio
222
252
 
223
253
  ```python
224
254
  import drumscript as ds
225
255
 
226
256
  # Load at native sample rate (for notebooks / exploration)
227
- audio_file = ds.load_audio("drum_audio.wav")
228
- print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
257
+ audio, sr = ds.load_audio("drum_audio.wav")
258
+ # print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
259
+ print(f"Sample rate: {audio_file[1]} Hz, Duration: {len(audio_file[0])/audio_file[1]:.1f}s")
229
260
 
230
261
  # Detect tempo
231
262
  bpm = ds.detect_tempo("drum_audio.wav")
@@ -237,45 +268,32 @@ print(f"Tempo: {bpm:.1f} BPM")
237
268
  ```python
238
269
  import drumscript as ds
239
270
 
240
- # Extract just the drum stem
241
- drum_path = ds.extract_stems("full_song.mp3")
271
+ # Extract just the drum stem from full polyphonic audio (let's call it "full_song.wav")
272
+ # Not to be confused with "full_song" flag used in transcribe(), which is for when you want to extract stems before transcribing
273
+ stem_split = ds.extract_stems("full_song.wav")
242
274
 
243
- # Create a drumless backing track in MP3
244
- results = ds.extract_stems(
245
- "full_song.mp3",
246
- drumless=True,
247
- output_format="mp3",
248
- verbose=True,
249
- )
250
- print(f"Backing track: {results['mix']}")
251
275
  ```
252
276
 
253
- ---
254
-
255
- ## Benchmarking
256
-
257
- DrumScript includes a benchmarking framework for evaluating the classifier against standard ADT datasets using [`mir_eval`](https://github.com/mir-evaluation/mir_eval). Currently supports IDMT-SMT-Drums V2.
277
+ ### Create drumless backing track to your favourite songs
258
278
 
259
- ```zsh
260
- # Install dev dependencies (includes mir_eval)
261
- uv sync --extra dev
279
+ ```python
280
+ import drumscript as ds
262
281
 
263
- # Run the IDMT benchmark
264
- uv run --extra dev python benchmarks/run.py idmt \
265
- --root /path/to/IDMT-SMT-DRUMS-V2
282
+ # Remember to use mp3 flag if using mp3 audio
283
+ # default input format is .wav
266
284
 
267
- # Run on a single subset with a limit
268
- uv run --extra dev python benchmarks/run.py idmt \
269
- --root /path/to/IDMT-SMT-DRUMS-V2 \
270
- --subset RealDrum --limit 5
285
+ remove_drums = ds.extract_stems("full_song.wav",
286
+ drumless=True,
287
+ verbose=True,
288
+ )
289
+ print(f"Files written to: {remove_drums['output_directory']}")
290
+ # The backing track is saved as <input>_no_drums.wav in that directory.
271
291
  ```
272
292
 
273
- Results are archived to `outputs/benchmarks/idmt/` with per-file metrics, summary statistics, and git commit tracking for reproducibility. See [`benchmarks/README.md`](benchmarks/README.md) for dataset setup and full usage.
274
-
275
-
276
293
  ---
277
294
 
278
295
  ## CLI Usage
296
+ *[back](#drumscript)*
279
297
 
280
298
  DrumScript also provides a command-line interface.
281
299
 
@@ -324,11 +342,13 @@ drumscript full_song.mp3 --all-stems --format mp3
324
342
  # Classify rudiments
325
343
  drumscript snare_hit.wav --rudiment
326
344
  ```
345
+
327
346
  ---
328
347
 
329
348
  ## Contributing
349
+ *[back](#drumscript)*
330
350
 
331
- We welcome contributions! DrumScript is intended to be a community-owned project.
351
+ We welcome contributions! DrumScript is intended to be a community-owned project. You can also refer to detailed contributor guidance **[here](./docs/development/contributor_guidance.md)**
332
352
 
333
353
  - **[Open an Issue](https://github.com/DrumScript/DrumScript/issues/new)** for bugs or feature requests.
334
354
  - **[Submit a Pull Request](https://github.com/DrumScript/DrumScript/pulls)** for code changes.
@@ -339,7 +359,7 @@ We welcome contributions! DrumScript is intended to be a community-owned project
339
359
  **[hello.drumscript@gmail.com](mailto:hello.drumscript@gmail.com)**
340
360
 
341
361
  ## Alpha Priorities (v0.0.4 < v1.0.0)
342
- The alpha phase runs between 01 June and 31 August 2026
362
+ The alpha phase began June 2026. We expect it to run through late 2026 and into 2027 — beta is targeted on API stability and benchmark validation rather than a fixed calendar date.
343
363
 
344
364
  **What works today:**
345
365
 
@@ -357,10 +377,65 @@ The alpha phase runs between 01 June and 31 August 2026
357
377
  - Stabilising the public API ahead of the beta freeze
358
378
  - Community feedback collection
359
379
 
380
+ ---
381
+
382
+ ### Publishing a new release
383
+ *[back](#drumscript)*
384
+
385
+ We use an automated pipeline to publish new versions to PyPI. All releases must use a specific tag format: `vX.Y.Z` (for example, `v0.2.0`).
386
+
387
+ **To publish a release via GitHub Actions (Recommended):**
388
+ 1. Go to the **Actions** tab in this repository.
389
+ 2. Click on **Create Release** on the left menu.
390
+ 3. Click **Run workflow** on the right.
391
+ 4. Type in your new version number (e.g., `0.2.0`) and click **Run workflow**. GitHub will handle the rest!
392
+
393
+ ---
394
+
395
+ ## Testing
396
+ *[back](#drumscript)*
397
+
398
+ For detailed instructions on testing and publishing via the command line, please see our **[Testing Guidance](tests/README.md).**
399
+
400
+ ---
401
+
402
+ ## Benchmarking
403
+ *[back](#drumscript)*
404
+
405
+ DrumScript includes a benchmarking framework for evaluating the classifier against standard ADT datasets using [`mir_eval`](https://github.com/mir-evaluation/mir_eval). Currently supports IDMT-SMT-Drums V2.
406
+
407
+ ```zsh
408
+ # Install dev dependencies (includes mir_eval)
409
+ uv sync --extra dev
410
+
411
+ # Run the IDMT benchmark
412
+ uv run --extra dev python benchmarks/run.py idmt \
413
+ --root /path/to/IDMT-SMT-DRUMS-V2
414
+
415
+ # Run on a single subset with a limit
416
+ uv run --extra dev python benchmarks/run.py idmt \
417
+ --root /path/to/IDMT-SMT-DRUMS-V2 \
418
+ --subset RealDrum --limit 5
419
+ ```
420
+
421
+ Results are archived to `outputs/benchmarks/idmt/` with per-file metrics, summary statistics, and git commit tracking for reproducibility. See [`benchmarks/README.md`](benchmarks/README.md) for dataset setup and full usage.
422
+
423
+ ---
424
+
425
+ ## Traffic
426
+ *[back](#drumscript)*
427
+
428
+ We collate usage over time for performance-monitoring. Live repository statistics — updated daily:
429
+
430
+ - [**View Report (PDF)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.pdf)
431
+ <!--- [**View Report (HTML)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.html)
432
+
433
+ > Views, clones, stars, forks, top referrers and popular paths. Data collected automatically via [github-repo-stats](https://github.com/jgehrcke/github-repo-stats). Defaults to last 14 days in outputs. Raw data available on **[github-repo-stats](https://github.com/DrumScript/DrumScript/tree/github-repo-stats/DrumScript/DrumScript/ghrs-data**) branch-->
360
434
 
361
435
  ---
362
436
 
363
437
  ## FAQs
438
+ *[back](#drumscript)*
364
439
 
365
440
  ### Why doesn't DrumScript include `ffmpeg` as a dependency?
366
441
 
@@ -381,20 +456,19 @@ DrumScript's own classification engine is **fully deterministic** — it uses ph
381
456
  ---
382
457
 
383
458
  ## Acknowledgements
459
+ *[back](#drumscript)*
384
460
 
385
461
  1. **[Demucs](https://github.com/adefossez/demucs)** — The stem splitting functionality is built upon the work of [@adefossez](https://github.com/adefossez).
386
462
  2. **[librosa](https://librosa.org/)** — For foundational audio processing tools.
387
463
  3. **[@nanaoto](https://github.com/nanaoto)** — For building the `mir_eval` benchmarking infrastructure and IDMT-SMT-Drums V2 adapter (PR [#273](https://github.com/DrumScript/DrumScript/pull/273)).
388
464
 
389
- ---
390
-
391
- ## License
392
465
 
393
- [Apache License 2.0](LICENSE)
394
466
 
395
467
  ---
396
468
  ## Similar Projects
397
469
 
470
+ *[back](#drumscript)*
471
+
398
472
  DrumScript has no affiliation with any of the projects below. They are listed for context and reference.
399
473
 
400
474
  * **[librosa](https://librosa.org/)** — The spectral analysis library that powers DrumScript's onset detection and feature extraction.
@@ -406,4 +480,18 @@ DrumScript has no affiliation with any of the projects below. They are listed fo
406
480
 
407
481
  ---
408
482
 
483
+ ## License
484
+ *[back](#drumscript)*
485
+
486
+ **[Apache License 2.0](LICENSE)**
487
+
488
+ **Copyright 2026 DrumScript**
489
+
490
+ Apache License
491
+ Version 2.0, January 2004
492
+ http://www.apache.org/licenses/
493
+
494
+ ---
495
+
496
+
409
497
  <!--END-->