DanceGAI adalah tim di balik ManiaGAI, generator beatmap osu! mania berbasis AI. DanceGAI sedang membangun infrastruktur AI yang mengubah musik menjadi pengalaman yang bisa dimainkan, dan ManiaGAI adalah produk pertamanya: kamu mengunggah lagu, dan ManiaGAI membuat mapset osu! mania yang lengkap dan bisa dimainkan — timing, not, dan rangkaian difficulty — dikemas sebagai file .osz standar. Lagunya bisa berupa file audio yang diunggah atau lagu dari beatmapset osu! yang kamu tautkan; apa pun caranya, hanya audionya yang dipakai, tidak pernah chart yang sudah ada. Versi 2 sistem ini sudah live di situs ini. osu! mania adalah format output pertama: sistem ini dibangun untuk rhythm game vertical scrolling (VSRG) secara umum.
Halaman ini menjelaskan cara kerjanya dan kenapa dirancang seperti ini. Kami terbuka soal arsitektur dan keputusan engineering-nya; kami tidak memublikasikan detail yang dibutuhkan seseorang untuk membangunnya ulang. Jika sebuah angka belum dipublikasikan, halaman ini akan mengatakannya alih-alih menebak.
Ringkasan teknis
| Tugas | Audio → mapset osu! mania yang bisa dimainkan (.osz), satu rangkaian difficulty lengkap per proses |
|---|---|
| Cakupan | Rhythm game vertical scrolling (VSRG) — osu! mania lebih dulu; format VSRG lain direncanakan |
| Timing | Aktivasi Beat This → grid fitting milik kami sendiri (tempo variabel). Di benchmark kami, 97,1% dari 2.501 lagu ranked bertempo konstan diberi timing dalam selisih 40 ms dari timing mapper |
| Representasi musik | MERT-v1-95M, diselaraskan dengan grid timing ketukan demi ketukan |
| Planner | Gaussian diffusion atas state gameplay per bagian, ~6M parameter |
| Model not | Transformer non-autoregresif bergaya MaskGIT atas token pola, ~51M parameter |
| Kontrol | 4K–9K · target ★1–10 · 5 dimensi style (rasio LN, LN inverse, jack, mini LN, delay) |
| Data training | 150.622 chart buatan manusia · 86.255 lagu · ~14.500 mapper · 4.227 jam audio |
| Validasi | Pengecekan grid timing, pembersihan not tidak valid, pengaman keheningan, pengukuran star rating osu!, konsistensi mapset |
| Training | Satu RTX 4070 Ti SUPER · ~580 GPU-jam tercatat di sepanjang garis keturunan model produksi |
| Generate | Difficulty yang diminta dibuat bersamaan dalam satu batch GPU · ~20 detik komputasi GPU untuk satu mapset lengkap |
| Penyajian | Worker GPU serverless yang dipulihkan dari snapshot memori; audio dinormalisasi di browser |
Beatmap bukanlah transkripsi
Cara paling gampang untuk membayangkan generate beatmap otomatis adalah “audio masuk, jaringan saraf, not keluar”. Dalam praktiknya, cara pandang itu menghasilkan chart yang secara teknis mengikuti musik tapi tidak enak dimainkan. Map osu! mania yang bagus lebih mirip aransemen daripada transkripsi: seorang mapper memutuskan suara mana yang layak diberi not, seberapa padat sebuah bagian harus terasa, di mana menaruh jack atau long note, bagaimana pola mengalir di antara kedua tangan, dan bagaimana semua itu berubah antara difficulty Easy dan Expert.
Karena itu ManiaGAI memperlakukan generate beatmap sebagai rangkaian masalah yang berbeda — memahami musik, merencanakan gameplay, menempatkan not, dan memeriksa hasilnya:
- Musik
- Pemahaman
- Perencanaan
- Generate
- Penyempurnaan
- Beatmap
1. Pemahaman musik
Semua tahap berikutnya bergantung pada gambaran lagu yang presisi. Tahap pertama mengubah audio mentah menjadi dua hal: grid timing, dan representasi musikal beresolusi tinggi dari setiap momen dalam lagu.
Timing. Aktivasi beat dan downbeat berasal dari Beat This, model beat tracking open-source. Mengubah aktivasi itu menjadi grid timing osu! — BPM dan offset, termasuk lagu yang tempo-nya berubah — adalah metode grid fitting kami sendiri, dan metode ini menghasilkan jenis grid yang sama dengan yang dipakai untuk melatih model generate. Timing adalah bagian yang pertama kali disadari pemain: chart yang meleset beberapa milidetik dari ketukan tidak bisa dimainkan sebagus apa pun polanya, jadi timing diperlakukan sebagai masalah utama, bukan sekadar langkah praproses.
Fitur musikal. Audio di-encode dengan MERT-v1-95M, model representasi musik self-supervised, lalu diselaraskan dengan grid timing — sehingga model melihat musiknya ketukan demi ketukan: onset, tekstur, intensitas, dan bagaimana semuanya berubah sepanjang lagu. Bagian yang hening dideteksi secara terpisah, sehingga tidak ada not yang ditaruh di sana.
2. Perencanaan beatmap
Pilihan desain utama di ManiaGAI adalah memisahkan apa yang harus terjadi dari bagaimana not ditempatkan.
Sebuah model perencanaan khusus membaca representasi musikal dan menentukan struktur gameplay seluruh lagu sebelum satu not pun ada: seberapa padat setiap bagian, jenis pola apa yang cocok di mana, bagaimana difficulty naik dan turun, dan bagaimana semua itu sesuai dengan difficulty dan style yang diminta. Output-nya adalah rencana yang menggambarkan chart bagian demi bagian — difficulty lokal dan campuran long note, jack, dan jenis pola lainnya — bukan not.
Planner ini adalah model Gaussian diffusion (sekitar 6M parameter). Ia membuat rencana untuk semua bagian lagu secara bersamaan, dengan kondisi musik, jumlah key, serta target difficulty dan style. Diffusion cocok untuk tugas ini: rencana adalah deskripsi lagu yang halus dan kontinu, dan membuatnya secara utuh memungkinkan planner menyeimbangkan seluruh lagu sekaligus.
Perencanaan di level ini memberi sistem sesuatu yang tidak dimiliki model yang bekerja not demi not: pandangan atas seluruh lagu. Chorus bisa direncanakan untuk menghentak lebih keras daripada verse sebelumnya; breakdown bisa direncanakan untuk memberi ruang bernapas.
3. Generate not
Model kedua mengubah rencana itu menjadi penempatan not yang sebenarnya — kolom mana, not mana yang berupa tap dan mana yang long note, bagaimana pola saling terhubung. Perencanaan menentukan strukturnya; generate not mengubah struktur itu menjadi not yang bisa dimainkan dan mengikuti rencana sekaligus audionya.
Model not ini adalah transformer non-autoregresif bergaya MaskGIT (sekitar 51M parameter). Chart direpresentasikan sebagai token pola diskret, dan alih-alih menulisnya satu per satu dari awal sampai akhir, model mengisi seluruh chart lalu menyempurnakannya dalam beberapa putaran — menetapkan not yang sudah ia yakini dan meninjau ulang sisanya. Setiap putaran melihat konteks di kedua sisi setiap bagian, dan itulah yang menjaga pola tetap konsisten sepanjang lagu. Cara putaran-putaran itu dijadwalkan di sepanjang lagu adalah metode penyempurnaan kami sendiri.
Mengapa ManiaGAI memakai Planner + Noter (bahasa Inggris) →
4. Generate yang bisa dikendalikan
ManiaGAI bukan sistem “generate lalu berharap”. Lagu yang sama bisa dibuat dengan kontrol yang eksplisit, dan kontrol tersebut adalah bagian dari apa yang dilatih untuk diikuti oleh model:
- Jumlah key — 4K sampai 9K.
- Difficulty — pilihan star rating apa pun dari ★1 sampai ★10. Satu lagu menghasilkan satu mapset utuh, dari Easy sampai Expert, dalam satu kali proses.
- Style — karakteristik gameplay seperti porsi long note dan seberapa banyak pola jack, inverse-LN, LN pendek, dan delay yang ada di sebuah chart, masing-masing bisa diatur di generator.
- Kepadatan — mengikuti target difficulty dan rencananya, bukan aturan yang kaku.
Setiap difficulty dibuat dari pemahaman yang sama atas lagu itu, sehingga sebuah mapset terasa sebagai satu keluarga chart, bukan chart-chart yang tidak saling berhubungan. Berikutnya, kami sedang mengarah ke representasi style yang dipelajari — mendeskripsikan gaya mapping lewat contoh, bukan lewat segelintir slider.
5. Validasi dan kontrol kualitas
Sebelum sebuah chart sampai kepadamu, sistem memeriksanya:
- Timing — timing point yang ditulis dicek terhadap grid yang terdeteksi.
- Not yang tidak valid dan tidak bisa dimainkan — not yang tumpang tindih, long note yang rusak, dan penempatan yang tidak bisa direpresentasikan oleh game akan dibereskan, dan tidak ada not yang ditaruh di atas audio yang jelas-jelas hening.
- Difficulty terukur — star rating setiap chart diukur dengan algoritma star rating yang sama dengan yang dipakai osu!, dan difficulty-nya dinamai sesuai nilai hasil pengukuran, bukan nilai yang diminta.
- Konsistensi di seluruh mapset — chart yang hasilnya lebih mudah daripada chart yang seharusnya berada di bawahnya, atau difficulty-nya hampir sama dengan chart di sebelahnya, akan dibuang, bukan dikirimkan. Di generator, kamu bisa melihat bintang mana yang dibuang dan alasannya.
- Validitas output — hasilnya dikemas sebagai file .osz standar dengan audio, gambar latar, dan hitsound yang bisa langsung diimpor ke osu!.
Dalam angka
- Lagu di set training
- 86.255
- Chart training
- 150.622
- Mapper
- ~14.500
- Audio unik
- 4.227 jam
- Fitur training di disk
- ~0,7 TB
- Komputasi training (tercatat, garis keturunan produksi)
- ~580 GPU-jam
- Proses training final model not
- ~4 hari
- Parameter model
- ~57M (51M not + 6M planner)
- Generate satu mapset lengkap
- ~20 detik
- Mode key
- 4K–9K
- Rentang difficulty
- ★1–★10
- Difficulty per proses
- hingga 10 (lebih sedikit untuk lagu panjang)
Data training
Model produksi belajar dari 150.622 chart osu! mania buatan manusia dari 86.255 lagu — 4.227 jam audio unik — oleh sekitar 14.500 mapper. Sebagian besar pekerjaan di sistem seperti ini bukanlah modelnya; melainkan datanya: menentukan chart mana yang layak dijadikan bahan belajar, memastikan timing setiap contoh training benar, dan merepresentasikan chart dalam bentuk yang menangkap apa yang membuatnya bisa dimainkan.
Jelajahi dataset pelatihan (bahasa Inggris) →
Evaluasi: akurasi timing
Kami melakukan benchmark timing kami terhadap timing buatan manusia pada setiap mapset osu! mania ranked dengan satu tempo konstan yang bisa kami evaluasi — 2.501 lagu — bersama mode timing Mapperatorinator yang open-source dan ManiaGAI v1, detektor kami sebelumnya. Sebuah lagu dihitung benar jika BPM-nya cocok dengan milik mapper (dengan toleransi setengah/dua kali tempo) dan fase ketukannya berada dalam toleransi yang ditentukan.
| Metode | ≤10 ms | ≤20 ms | ≤40 ms | BPM benar | Satu garis timing |
|---|---|---|---|---|---|
| ManiaGAI v2 | 71,4% | 92,3% | 97,1% | 98,0% | 100% |
| Mapperatorinator | 78,0% | 90,9% | 91,7% | 92,6% | 11,0% |
| ManiaGAI v1 | 74,8% | 88,0% | 90,7% | 94,0% | 92,8% |
Hanya lagu ranked bertempo konstan; “satu garis timing” = lagu diberi timing dengan satu garis saja, seperti yang dilakukan mapper (garis tambahan pada lagu bertempo konstan adalah perubahan tempo palsu). Diukur pada konfigurasi yang mendekati, tapi tidak identik dengan, yang dirilis.
Baca benchmark timing lengkap (bahasa Inggris) →
Training
Planner dan model not dilatih secara terpisah, masing-masing dengan representasi yang dipakainya — planner sebagai model Gaussian diffusion atas deskripsi gameplay tiap bagian yang telah di-Gaussian-kan, model not dengan prediksi token ber-mask atas token pola. Sampel training diseimbangkan di antara jumlah key dan tingkat difficulty supaya chart 8K dan ★10 tidak tenggelam oleh 4K dan ★4, dan model not dilatih dengan mixed precision.
Setiap perubahan dinilai dari chart yang dihasilkan itu sendiri — akurasi timing, difficulty terukur dibandingkan target, kemudahan dimainkan — bukan dari training loss saja.
Inferensi dan performa
Sistem AI yang berguna bukan hanya soal kualitas model; ia juga harus cukup cepat untuk dipakai. Sebuah permintaan ManiaGAI berjalan seperti ini:
- Di browser-mu: lagu di-decode, dinormalisasi loudness-nya, dan di-encode ulang begitu kamu memilih file-nya, selagi kamu masih memilih pengaturan — sehingga GPU tidak pernah menunggu pemrosesan audio.
- Pemahaman musik di GPU: Beat This dan MERT, dengan grid fitting berjalan di CPU bersamaan dengan MERT.
- Perencanaan dan generate not untuk setiap difficulty yang diminta dalam satu batch.
- Validasi — pengukuran star rating, pengecekan konsistensi.
- Pengemasan .osz, lalu unduhan.
Worker GPU menyala dari snapshot yang sudah dimuat sebelumnya, sehingga bahkan worker yang dingin siap dalam hitungan detik alih-alih menghabiskan waktu itu untuk memuat model. Satu mapset lengkap butuh sekitar 20 detik waktu komputasi GPU untuk lagu pada umumnya — belum termasuk unggah, antrean, atau unduhan; satu lagu berdurasi 2:50 dengan lima difficulty yang diukur memakan waktu 12,7 detik di NVIDIA T4 — timing dan fitur musik 3,8 detik (berjalan bersamaan), perencanaan 1,0 detik, generate not untuk kelima difficulty 6,1 detik.
Cara kami mempercepat pembuatan (bahasa Inggris) →
Apa yang tidak kami publikasikan
Kami memublikasikan prinsip arsitektur, keputusan engineering di baliknya, dan apa yang bisa dan tidak bisa dilakukan sistem ini — termasuk model terbuka yang menjadi dasar kami (Beat This, MERT) dan keluarga model tempat model kami sendiri berada (Gaussian diffusion, MaskGIT). Kami tidak memublikasikan metode yang kami kembangkan sendiri atau detail yang memungkinkan seseorang mereproduksi sistem ini: bagaimana grid timing di-fit dan segmen tempo-nya digabungkan, bagaimana putaran penyempurnaan model not dijadwalkan di sepanjang lagu, bagaimana model dikondisikan, arsitektur persis, loss dan hyperparameter, serta bagaimana data training diperoleh, disaring, dan disusun. Itulah batas antara bersikap transparan tentang apa yang kami bangun dan menyerahkan resepnya. Saat kami membuat klaim soal kualitas, kami berniat mendukungnya dengan benchmark yang dipublikasikan — bukan kata sifat.
Apa selanjutnya
Melampaui osu! mania. ManiaGAI dirancang di atas representasi gameplay yang tidak khusus untuk osu! mania: not dan long note di dalam kolom, ditempatkan di grid timing dan dikondisikan pada target difficulty. osu! mania adalah format output pertama, bukan batas dari sistem ini.
Lebih dalam
Riset dan engineering di balik ManiaGAI, secara mendalam:
Coba ManiaGAI
Buat mapset osu! mania yang lengkap dari lagumu — gratis, dalam hitungan detik.
Buat mapset →