DanceGAI to zespół stojący za ManiaGAI — generatorem beatmap osu! mania z AI. DanceGAI buduje infrastrukturę AI, która zamienia muzykę w grywalne doświadczenia, a ManiaGAI to jej pierwszy produkt: wgrywasz piosenkę, a on generuje kompletny, grywalny mapset osu! mania — timing, nuty i zestaw poziomów trudności — spakowany w standardowy plik .osz. Piosenką może być wgrany plik audio albo piosenka z beatmapsetu osu!, do którego podasz link; w obu przypadkach używane jest tylko audio, nigdy istniejące mapy. Wersja 2 systemu działa na tej stronie. osu! mania to pierwszy format wyjściowy: system jest budowany ogólnie z myślą o grach rytmicznych z pionowym przewijaniem (VSRG).
Ta strona wyjaśnia, jak to działa i dlaczego jest zaprojektowane właśnie tak. Otwarcie mówimy o architekturze i decyzjach inżynieryjnych; nie publikujemy szczegółów, które byłyby potrzebne, żeby to odtworzyć. Tam, gdzie jakaś liczba nie jest jeszcze publiczna, strona mówi to wprost, zamiast zgadywać.
Podsumowanie techniczne
| Zadanie | Audio → grywalny mapset osu! mania (.osz), pełny zestaw poziomów trudności w jednym przebiegu |
|---|---|
| Zakres | Gry rytmiczne z pionowym przewijaniem (VSRG) — najpierw osu! mania; inne formaty VSRG w planach |
| Timing | Aktywacje Beat This → autorskie dopasowanie siatki (zmienne tempo). W naszym benchmarku 97,1% z 2501 rankingowych piosenek o stałym tempie miało timing w granicach 40 ms od timingu mappera |
| Reprezentacja muzyki | MERT-v1-95M, wyrównany do siatki timingu uderzenie po uderzeniu |
| Planer | Dyfuzja gaussowska nad stanem rozgrywki każdej sekcji, ~6M parametrów |
| Model nut | Nieautoregresyjny transformer w stylu MaskGIT na tokenach patternów, ~51M parametrów |
| Ustawienia | 4K–9K · cele ★1–10 · 5 wymiarów stylu (proporcja LN, LN inverse, jack, mini LN, delay) |
| Dane treningowe | 150 622 map zrobionych przez ludzi · 86 255 piosenek · ~14 500 mapperów · 4227 h audio |
| Walidacja | Kontrola siatki timingu, usuwanie nieprawidłowych nut, ochrona przed ciszą, pomiar oceny gwiazdkowej osu!, spójność mapsetu |
| Trening | Jedna karta RTX 4070 Ti SUPER · ~580 zarejestrowanych godzin GPU w całej linii rozwojowej modeli produkcyjnych |
| Generowanie | Wybrane poziomy trudności są generowane razem w jednym wsadowym przebiegu GPU · ~20 s obliczeń GPU na cały mapset |
| Udostępnianie | Bezserwerowe procesy GPU przywracane ze snapshotu pamięci; normalizacja audio w przeglądarce |
Beatmap to nie transkrypcja
Oczywisty sposób myślenia o automatycznym generowaniu beatmap to „audio na wejściu, sieć neuronowa, nuty na wyjściu”. W praktyce takie podejście daje mapy, które technicznie podążają za muzyką, ale gra się w nie nieprzyjemnie. Dobra mapa osu! mania jest bliższa aranżacji niż transkrypcji: mapper decyduje, które dźwięki zasługują na nuty, jak gęsta ma się wydawać sekcja, gdzie postawić jacka lub długą nutę, jak patterny przechodzą między dłońmi i jak to wszystko zmienia się między poziomem Easy a Expert.
Dlatego ManiaGAI traktuje generowanie beatmap jako ciąg osobnych problemów — zrozumienie muzyki, zaplanowanie rozgrywki, rozmieszczenie nut i sprawdzenie wyniku:
- Muzyka
- Rozumienie
- Planowanie
- Generowanie
- Dopracowanie
- Beatmap
1. Rozumienie muzyki
Wszystko dalej zależy od precyzyjnego obrazu piosenki. Pierwszy etap zamienia surowe audio w dwie rzeczy: siatkę timingu i wysokorozdzielczą reprezentację muzyczną każdego momentu piosenki.
Timing. Aktywacje uderzeń i pierwszych uderzeń taktu pochodzą z Beat This, open-source’owego modelu śledzenia uderzeń. Zamiana tych aktywacji w siatkę timingu osu! — BPM i offset, także dla piosenek ze zmianami tempa — to nasza własna metoda dopasowania siatki, która daje tę samą rodzinę siatek, na jakiej trenowano modele generujące. Timing to pierwsza rzecz, którą zauważają gracze: mapa przesunięta o kilka milisekund względem rytmu jest niegrywalna, niezależnie od tego, jak dobre ma patterny, więc traktujemy go jako problem pierwszej kategorii, a nie krok wstępnego przetwarzania.
Cechy muzyczne. Audio jest kodowane przez MERT-v1-95M, samonadzorowany model reprezentacji muzyki, i wyrównywane do siatki timingu — dzięki temu modele widzą muzykę uderzenie po uderzeniu: onsety, fakturę, intensywność i to, jak zmieniają się w trakcie piosenki. Ciche fragmenty są wykrywane osobno, żeby nic nie było na nich mapowane.
2. Planowanie beatmapu
Centralna decyzja projektowa w ManiaGAI to oddzielenie tego, co ma się dziać, od tego, jak rozmieszczane są nuty.
Osobny model planujący odczytuje reprezentację muzyczną i ustala strukturę rozgrywki całej piosenki, zanim powstanie jakakolwiek nuta: jak gęsta ma być każda sekcja, jakie rodzaje patternów gdzie pasują, jak trudność ma rosnąć i opadać oraz jak to wszystko pasuje do wybranego poziomu trudności i stylu. Jego wynikiem jest plan opisujący mapę sekcja po sekcji — lokalną trudność i proporcje długich nut, jacków i innych typów patternów — a nie nuty.
Planer to gaussowski model dyfuzyjny (około 6M parametrów). Generuje plan dla wszystkich sekcji piosenki łącznie, warunkowany muzyką, liczbą klawiszy oraz docelową trudnością i stylem. Dyfuzja dobrze pasuje do tego zadania: plan to gładki, ciągły opis piosenki, a generowanie go w całości pozwala planerowi zrównoważyć całą piosenkę naraz.
Planowanie na tym poziomie daje systemowi coś, czego brakuje modelowi działającemu nuta po nucie: widok całej piosenki. Refren można zaplanować tak, by uderzał mocniej niż poprzedzająca go zwrotka; breakdown — tak, by dał odetchnąć.
3. Generowanie nut
Drugi model zamienia plan w faktyczne rozmieszczenie nut — które kolumny, które nuty są pojedyncze, a które długie, jak łączą się patterny. Planowanie wyznacza strukturę; generowanie nut zamienia ją w grywalne nuty, które podążają zarówno za planem, jak i za audio.
Model nut to nieautoregresyjny transformer w stylu MaskGIT (około 51M parametrów). Mapy są reprezentowane jako dyskretne tokeny patternów i zamiast zapisywać je po kolei od początku do końca, model wypełnia całą mapę, a potem dopracowuje ją w kilku przebiegach — zatwierdzając nuty, których jest pewny, i wracając do pozostałych. Każdy przebieg widzi kontekst po obu stronach każdej sekcji i właśnie dzięki temu patterny pozostają spójne w całej piosence. To, jak te przebiegi są rozłożone w piosence, to nasza własna metoda dopracowania.
Dlaczego ManiaGAI używa Planner + Noter (po angielsku) →
4. Sterowalne generowanie
ManiaGAI to nie system typu „wygeneruj i miej nadzieję”. Tę samą piosenkę można wygenerować z jawnymi ustawieniami, a ustawienia są częścią tego, czego modele uczono przestrzegać:
- Liczba klawiszy — od 4K do 9K.
- Poziom trudności — dowolny wybór ocen gwiazdkowych od ★1 do ★10. Jedna piosenka daje cały mapset, od Easy do Expert, w jednym przebiegu.
- Styl — cechy rozgrywki, takie jak udział długich nut oraz ilość patternów jack, inverse-LN, krótkich LN i delay w mapie; każdą z nich można regulować w generatorze.
- Gęstość — wynika z docelowego poziomu trudności i planu, a nie ze sztywnej reguły.
Każdy poziom trudności jest generowany z tego samego zrozumienia piosenki, więc mapset czyta się jak jedna rodzina map, a nie zbiór niezwiązanych ze sobą map. W następnej kolejności pracujemy nad wyuczonymi reprezentacjami stylu — opisywaniem stylu mapowania na przykładach, a nie garścią suwaków.
5. Walidacja i kontrola jakości
Zanim mapa do Ciebie trafi, system ją sprawdza:
- Timing — zapisane punkty timingu są porównywane z wykrytą siatką.
- Nieprawidłowe i niegrywalne nuty — nakładające się nuty, zepsute długie nuty i ułożenia, których gra nie potrafi przedstawić, są poprawiane, a na wyraźnie cichym audio nic nie jest mapowane.
- Zmierzona trudność — ocena gwiazdkowa każdej mapy jest mierzona tym samym algorytmem, którego używa osu!, a poziom trudności jest nazywany według zmierzonej wartości, a nie żądanej.
- Spójność w obrębie mapsetu — mapa, która wyjdzie łatwiejsza od tej, która miała być pod nią, albo niemal identyczna trudnością z sąsiednią, jest odrzucana, a nie wydawana. W generatorze widzisz, które gwiazdki zostały odrzucone i dlaczego.
- Poprawność wyniku — wynik jest pakowany w standardowy plik .osz z audio, tłem i hitsoundami, który importuje się bezpośrednio do osu!.
W liczbach
- Piosenki w zbiorze treningowym
- 86 255
- Mapy treningowe
- 150 622
- Mapperzy
- ~14 500
- Unikalne audio
- 4227 h
- Cechy treningowe na dysku
- ~0,7 TB
- Moc obliczeniowa treningu (zarejestrowana, linia produkcyjna)
- ~580 godzin GPU
- Ostatni przebieg treningu modelu nut
- ~4 dni
- Parametry modeli
- ~57M (51M nuty + 6M planer)
- Generowanie całego mapsetu
- ~20 s
- Tryby klawiszy
- 4K–9K
- Zakres trudności
- ★1–★10
- Poziomy trudności na przebieg
- do 10 (mniej dla długich piosenek)
Dane treningowe
Modele produkcyjne uczą się na 150 622 mapach osu! mania zrobionych przez ludzi do 86 255 piosenek — 4227 godzin unikalnego audio — autorstwa mniej więcej 14 500 mapperów. Większość pracy w takim systemie to nie model, tylko dane: decydowanie, które mapy są warte nauki, dopilnowanie, żeby timing każdego przykładu treningowego był poprawny, i reprezentowanie map w formie, która oddaje to, co czyni je grywalnymi.
Poznaj zbiór treningowy (po angielsku) →
Ewaluacja: dokładność timingu
Porównaliśmy nasz timing z ludzkim na wszystkich rankingowych mapsetach osu! mania z jednym, stałym tempem, które mogliśmy ocenić — 2501 piosenek — obok trybu timingu open-source’owego Mapperatorinator i ManiaGAI v1, naszego poprzedniego detektora. Piosenka liczy się jako poprawna, gdy BPM zgadza się z BPM mappera (z dopuszczeniem połowy/podwojenia tempa), a faza uderzeń mieści się w danej tolerancji.
| Metoda | ≤10 ms | ≤20 ms | ≤40 ms | Poprawne BPM | Jedna linia timingu |
|---|---|---|---|---|---|
| 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% |
Tylko rankingowe piosenki o stałym tempie; „jedna linia timingu” = piosenka została otimingowana jedną linią, tak jak zrobił to mapper (dodatkowa linia w piosence o stałym tempie to fałszywa zmiana tempa). Mierzone w konfiguracji zbliżonej, ale nie identycznej z wdrożoną.
Przeczytaj pełny benchmark timingu (po angielsku) →
Trening
Planer i model nut są trenowane osobno, każdy na reprezentacji, z którą pracuje — planer jako gaussowski model dyfuzyjny na zgaussowanym opisie rozgrywki każdej sekcji, model nut przez predykcję zamaskowanych tokenów na tokenach patternów. Próbki treningowe są zrównoważone między liczbami klawiszy i poziomami trudności, żeby mapy 8K i ★10 nie ginęły w tłumie map 4K i ★4, a model nut trenuje w mieszanej precyzji.
Każda zmiana jest oceniana na samych wygenerowanych mapach — dokładności timingu, zmierzonej trudności względem docelowej, grywalności — a nie wyłącznie na funkcji straty z treningu.
Inferencja i wydajność
Użyteczny system AI to nie tylko jakość modelu; musi też być na tyle szybki, żeby dało się z niego korzystać. Żądanie do ManiaGAI przebiega tak:
- W Twojej przeglądarce: piosenka jest dekodowana, normalizowana pod względem głośności i ponownie kodowana, gdy tylko wybierzesz plik, jeszcze w trakcie wybierania ustawień — więc GPU nigdy nie czeka na przetwarzanie audio.
- Rozumienie muzyki na GPU: Beat This i MERT, z dopasowaniem siatki działającym na CPU równolegle z MERT.
- Planowanie i generowanie nut dla wszystkich wybranych poziomów trudności w jednym wsadowym przebiegu.
- Walidacja — pomiar oceny gwiazdkowej, kontrole spójności.
- Pakowanie do .osz, a potem pobieranie.
Procesy GPU startują z wcześniej załadowanego snapshotu, więc nawet zimny proces jest gotowy w kilka sekund, zamiast spędzać ten czas na ładowaniu modeli. Cały mapset zajmuje około 20 sekund obliczeń GPU dla typowej piosenki — nie licząc wgrywania, kolejki ani pobierania; jedna zmierzona piosenka o długości 2:50 z pięcioma poziomami trudności zajęła 12,7 sekundy na NVIDIA T4 — timing i cechy muzyczne 3,8 s (równolegle), planowanie 1,0 s, generowanie nut dla wszystkich pięciu poziomów trudności 6,1 s.
Jak przyspieszyliśmy generowanie (po angielsku) →
Czego nie publikujemy
Publikujemy zasady architektury, stojące za nimi decyzje inżynieryjne oraz to, co system robi, a czego nie — w tym otwarte modele, na których się opieramy (Beat This, MERT), i rodziny, do których należą nasze własne modele (dyfuzja gaussowska, MaskGIT). Nie publikujemy metod, które opracowaliśmy sami, ani szczegółów, które pozwoliłyby odtworzyć system: jak dopasowywana jest siatka timingu i łączone są jej segmenty tempa, jak rozkładane są w piosence przebiegi dopracowania modelu nut, jak modele są warunkowane, dokładnych architektur, funkcji straty i hiperparametrów ani tego, skąd pochodzą, jak są filtrowane i budowane dane treningowe. To granica między przejrzystością co do tego, co zbudowaliśmy, a oddaniem przepisu. Gdy wypowiadamy się o jakości, chcemy popierać to opublikowanymi benchmarkami — a nie przymiotnikami.
Co dalej
Poza osu! mania. ManiaGAI jest zaprojektowany wokół reprezentacji rozgrywki, która nie jest specyficzna dla osu! mania: nuty i długie nuty w kolumnach, ustawione na siatce timingu i warunkowane docelową trudnością. osu! mania to pierwszy format wyjściowy, a nie granica systemu.
Więcej szczegółów
Badania i inżynieria stojące za ManiaGAI, szczegółowo:
Wypróbuj ManiaGAI
Wygeneruj kompletny mapset osu! mania ze swojej piosenki — za darmo, w kilka sekund.
Stwórz mapset →