Model card
Browse files
README.md
CHANGED
|
@@ -1,16 +1,57 @@
|
|
| 1 |
---
|
| 2 |
license: mit
|
| 3 |
tags:
|
| 4 |
-
-
|
| 5 |
-
-
|
| 6 |
-
-
|
| 7 |
-
- music
|
| 8 |
-
-
|
| 9 |
-
- rhythm-game
|
| 10 |
-
- taiko
|
| 11 |
---
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
-
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: mit
|
| 3 |
tags:
|
| 4 |
+
- taiko
|
| 5 |
+
- rhythm-game
|
| 6 |
+
- chart-generation
|
| 7 |
+
- music
|
| 8 |
+
- audio-to-symbolic
|
|
|
|
|
|
|
| 9 |
---
|
| 10 |
|
| 11 |
+
# 🥁 SoftChart v1.5 — unified model
|
| 12 |
+
|
| 13 |
+
**One 7.94M-parameter model (bf16, ~16 MB) replacing three** (slot generator +
|
| 14 |
+
time generator + beat model, 24.5M / ~98 MB): −68% parameters, −84% disk,
|
| 15 |
+
with measured quality **parity or better** on every axis.
|
| 16 |
+
|
| 17 |
+
| axis | v1.5 (this model) | v1.0 dedicated | verdict |
|
| 18 |
+
|---|---|---|---|
|
| 19 |
+
| slot-mode F1 (12 songs) | 0.663 / oni **0.732** | 0.665 / 0.727 (slot12) | parity, oni better |
|
| 20 |
+
| time-mode F1 | **0.682** / oni 0.721 | 0.659 (pr12) | **better** |
|
| 21 |
+
| beat grid ok-rate (const) | **1.0** · p50 10.5 ms | 0.93 · 10.2 ms (beatd2) | better |
|
| 22 |
+
| beat grid (variable BPM) | 0.9 · p50 **3.2 ms** | 1.0 · 4.0 ms | parity |
|
| 23 |
+
| tuplet evenness (CV) | 0.0006 | 0.0006 | parity |
|
| 24 |
+
|
| 25 |
+
How the reduction was achieved (all measured, see repo REPORT):
|
| 26 |
+
|
| 27 |
+
1. **Role folding** — dual-mode training (50% slot / 50% time windows, MODE
|
| 28 |
+
token) + a hi-res beat head. Beat supervision is **masked on slot
|
| 29 |
+
windows**: they carry grid-phase input channels, and an unmasked head
|
| 30 |
+
copies the channels instead of listening (measured collapse: 723 ms →
|
| 31 |
+
fixed: 10.5 ms).
|
| 32 |
+
2. **Factorized embeddings** (ALBERT-style, E=64) — position tokens are 95%
|
| 33 |
+
of the table; 463K → 132K.
|
| 34 |
+
3. **bf16 weights** — training ran bf16 autocast, so fp32 storage carried no
|
| 35 |
+
extra information (verified: F1/grid identical within noise).
|
| 36 |
+
|
| 37 |
+
Interesting side effect: the shared trunk **improved** both the time mode
|
| 38 |
+
(+2.3pp over the dedicated model) and the beat ok-rate — beat supervision
|
| 39 |
+
appears to act as a metrical regularizer for generation, and vice versa.
|
| 40 |
+
|
| 41 |
+
Usage (drop-in for all three v1.0 roles):
|
| 42 |
+
|
| 43 |
+
```python
|
| 44 |
+
from softchart.generate import load_hf, generate_song_slot, generate_song
|
| 45 |
+
from softchart.grid import fit_grid_piecewise
|
| 46 |
+
from softchart.tja import write_tja_slots
|
| 47 |
+
|
| 48 |
+
m = load_hf("JacobLinCool/softchart-v15") # one model, three roles
|
| 49 |
+
grid = fit_grid_piecewise(m, mel) # its own beat head drives the grid
|
| 50 |
+
g = generate_song_slot(m, mel, grid, "oni", level=9, density_bucket=7)
|
| 51 |
+
tja = write_tja_slots(g, grid, "Title", "oni", 9, "song.ogg")
|
| 52 |
+
# gridless fallback: generate_song(m, mel, "oni", level=9) (time mode)
|
| 53 |
+
```
|
| 54 |
+
|
| 55 |
+
MIT-licensed. Trained from scratch on community-made charts
|
| 56 |
+
([taiko-1000-parsed](https://huggingface.co/datasets/JacobLinCool/taiko-1000-parsed));
|
| 57 |
+
the official game never released chart data.
|