DanceGAI는 AI osu! mania beatmap 생성기 ManiaGAI를 만든 팀입니다. DanceGAI는 음악을 플레이 가능한 경험으로 바꾸는 AI 인프라를 만들고 있으며, ManiaGAI는 그 첫 번째 제품입니다. 곡을 업로드하면 타이밍, 노트, 여러 난이도를 갖춘 완성된 플레이 가능한 osu! mania mapset을 생성해 표준 .osz로 묶어 줍니다. 곡은 업로드한 오디오 파일일 수도 있고, 링크한 osu! beatmapset의 곡일 수도 있습니다. 어느 쪽이든 오디오만 사용하며 기존 채보는 절대 사용하지 않습니다. 이 사이트에서는 시스템 버전 2가 운영 중입니다. osu! mania는 첫 번째 출력 형식이며, 시스템은 세로 스크롤 리듬 게임(VSRG) 전반을 위해 만들어졌습니다.
이 페이지에서는 시스템이 어떻게 작동하는지, 왜 이렇게 설계했는지 설명합니다. 아키텍처와 엔지니어링 결정은 공개하지만, 누군가 시스템을 재구축하는 데 필요한 세부 사항은 공개하지 않습니다. 아직 공개되지 않은 수치는 추측하지 않고 그렇다고 밝힙니다.
기술 요약
| 작업 | 오디오 → 플레이 가능한 osu! mania mapset(.osz), 1회 실행에 여러 난이도 전체 |
|---|---|
| 범위 | 세로 스크롤 리듬 게임(VSRG) — osu! mania 우선, 다른 VSRG 형식 계획 중 |
| 타이밍 | Beat This 활성화값 → 자체 그리드 피팅(가변 템포). 벤치마크에서 고정 템포 Ranked 곡 2,501개 중 97.1%가 mapper의 타이밍과 40 ms 이내로 일치 |
| 음악 표현 | MERT-v1-95M, 타이밍 그리드에 비트 단위로 정렬 |
| 플래너 | 구간별 게임플레이 상태에 대한 가우시안 확산 모델, 약 6M 파라미터 |
| 노트 모델 | 패턴 토큰 기반 MaskGIT 방식 비자기회귀 트랜스포머, 약 51M 파라미터 |
| 제어 | 4K–9K · ★1–10 목표 · 스타일 5개 축 (LN 비율, LN 인버스, jack, 미니 LN, 딜레이) |
| 학습 데이터 | 사람이 만든 채보 150,622개 · 곡 86,255개 · mapper 약 14,500명 · 오디오 4,227시간 |
| 검증 | 타이밍 그리드 검사, 잘못된 노트 정리, 무음 가드, osu! ★ 레이팅 측정, mapset 일관성 |
| 학습 | RTX 4070 Ti SUPER 1대 · 운영 모델 계보 전체에서 기록된 GPU 시간 약 580시간 |
| 생성 | 요청한 난이도를 한 번의 GPU 배치 패스로 함께 생성 · mapset 전체에 GPU 연산 약 20초 |
| 서빙 | 메모리 스냅샷에서 복원되는 서버리스 GPU 워커, 오디오는 브라우저에서 정규화 |
beatmap은 받아쓰기가 아닙니다
자동 beatmap 생성이라고 하면 “오디오 입력, 신경망, 노트 출력”이라는 틀이 가장 먼저 떠오릅니다. 하지만 실제로 이 틀은 기술적으로는 음악을 따라가지만 플레이하기 불쾌한 채보를 만들어 냅니다. 좋은 osu! mania 맵은 받아쓰기보다 편곡에 가깝습니다. mapper는 어떤 소리에 노트를 줄지, 구간이 얼마나 빽빽하게 느껴져야 할지, jack이나 롱노트를 어디에 둘지, 패턴이 양손 사이를 어떻게 흐를지, 그리고 Easy와 Expert 난이도 사이에서 이 모든 것이 어떻게 달라질지를 결정합니다.
그래서 ManiaGAI는 beatmap 생성을 서로 다른 문제들의 연속으로 다룹니다. 음악을 이해하고, 게임플레이를 설계하고, 노트를 배치하고, 결과를 검사하는 것이죠:
- 음악
- 이해
- 설계
- 생성
- 보정
- beatmap
1. 음악 이해
이후의 모든 단계는 곡을 정확하게 파악하는 데 달려 있습니다. 첫 단계에서는 원본 오디오를 두 가지로 바꿉니다: 타이밍 그리드, 그리고 곡의 모든 순간에 대한 고해상도 음악 표현입니다.
타이밍. 비트와 다운비트 활성화값은 오픈소스 비트 트래킹 모델인 Beat This에서 얻습니다. 이 활성화값을 템포가 바뀌는 곡을 포함해 BPM과 offset으로 이루어진 osu! 타이밍 그리드로 바꾸는 것은 저희 자체의 그리드 피팅 방식이며, 생성 모델이 학습한 것과 같은 계열의 그리드를 만들어 냅니다. 타이밍은 플레이어가 가장 먼저 알아차리는 부분입니다. 비트에서 몇 밀리초만 어긋나도 패턴이 아무리 좋아도 플레이할 수 없는 채보가 되기 때문에, 타이밍은 전처리 단계가 아니라 핵심 문제로 다룹니다.
음악 특징. 오디오는 자기지도 음악 표현 모델인 MERT-v1-95M으로 인코딩되고 타이밍 그리드에 정렬됩니다. 그래서 모델은 음악을 비트 단위로 봅니다: 온셋, 질감, 강도, 그리고 이것들이 곡 전체에서 어떻게 변하는지. 무음 구간은 따로 감지해 그 위에는 아무것도 놓지 않습니다.
2. beatmap 설계
ManiaGAI의 핵심 설계 선택은 무엇이 일어나야 하는지와 노트를 어떻게 배치하는지를 분리하는 것입니다.
전용 설계 모델이 음악 표현을 읽고, 노트가 하나도 없는 상태에서 곡 전체의 게임플레이 구조를 정합니다: 각 구간의 밀도, 어떤 종류의 패턴이 어디에 어울리는지, 난이도가 어떻게 오르내려야 하는지, 그리고 이 모든 것이 요청한 난이도와 스타일에 어떻게 맞는지. 출력은 노트가 아니라 채보를 구간별로 설명하는 설계도입니다 — 국소 난이도와 롱노트, jack 등 패턴 유형의 구성입니다.
플래너는 가우시안 확산 모델(약 6M 파라미터)입니다. 음악, 키 수, 목표 난이도와 스타일을 조건으로 곡의 모든 구간에 대한 설계도를 한꺼번에 생성합니다. 확산 모델은 이 작업에 잘 맞습니다. 설계도는 곡에 대한 매끄럽고 연속적인 설명이고, 이를 전체로 생성하면 플래너가 곡 전체의 균형을 한 번에 잡을 수 있기 때문입니다.
이 수준의 설계는 노트 단위 모델에 없는 것을 시스템에 줍니다: 곡 전체를 보는 시야입니다. 후렴은 앞의 벌스보다 더 세게 치도록, 브레이크다운은 숨을 돌릴 수 있도록 설계할 수 있습니다.
3. 노트 생성
두 번째 모델이 설계도를 실제 노트 배치로 바꿉니다 — 어떤 라인에, 어떤 노트를 단타로 하고 어떤 노트를 롱노트로 할지, 패턴을 어떻게 이을지. 설계가 구조를 정하고, 노트 생성은 그 구조를 설계도와 오디오를 모두 따르는 플레이 가능한 노트로 바꿉니다.
노트 모델은 MaskGIT 방식 비자기회귀 트랜스포머(약 51M 파라미터)입니다. 채보는 이산적인 패턴 토큰으로 표현되며, 모델은 처음부터 끝까지 하나씩 쓰는 대신 채보 전체를 채운 다음 여러 번의 패스에 걸쳐 다듬습니다 — 확신하는 노트는 확정하고 나머지는 다시 검토합니다. 모든 패스에서 각 구간의 앞뒤 맥락을 모두 보기 때문에 곡 전체에서 패턴이 일관되게 유지됩니다. 이 패스들을 곡 전체에 어떻게 배치하는지는 저희 자체의 보정 방식입니다.
ManiaGAI가 Planner + Noter 구조를 택한 이유 (영어) →
4. 제어 가능한 생성
ManiaGAI는 “생성하고 운에 맡기는” 시스템이 아닙니다. 같은 곡을 명시적인 제어값으로 생성할 수 있으며, 제어값을 따르는 것 자체가 모델이 학습한 내용의 일부입니다:
- 키 수 — 4K부터 9K까지.
- 난이도 — ★1부터 ★10까지 원하는 ★ 레이팅 조합. 곡 하나로 Easy부터 Expert까지 mapset 전체를 한 번에 생성합니다.
- 스타일 — 롱노트 비중, 그리고 채보에 jack, 인버스 LN, 짧은 LN, 딜레이 패턴이 얼마나 들어가는지 같은 게임플레이 특성으로, 각각 생성기에서 조정할 수 있습니다.
- 밀도 — 고정된 규칙이 아니라 목표 난이도와 설계도에 따라 정해집니다.
모든 난이도가 곡에 대한 같은 이해에서 생성되므로, mapset은 서로 무관한 채보들이 아니라 하나의 채보 가족처럼 읽힙니다. 다음으로는 학습된 스타일 표현을 목표로 하고 있습니다 — 몇 개의 슬라이더가 아니라 예시로 맵핑 스타일을 설명하는 방식입니다.
5. 검증과 품질 관리
채보가 여러분에게 전달되기 전에 시스템이 검사합니다:
- 타이밍 — 기록된 타이밍 포인트를 감지된 그리드와 대조합니다.
- 잘못되거나 플레이할 수 없는 노트 — 겹치는 노트, 깨진 롱노트, 게임이 표현할 수 없는 배치를 해결하고, 명백한 무음 구간에는 아무것도 놓지 않습니다.
- 측정된 난이도 — 모든 채보의 ★ 레이팅을 osu!가 사용하는 것과 같은 레이팅 알고리즘으로 측정하고, 난이도 이름은 요청한 값이 아니라 측정한 값을 따릅니다.
- mapset 전체의 일관성 — 바로 아래 단계여야 할 채보보다 쉽게 나왔거나, 인접한 채보와 난이도가 거의 같은 채보는 내보내지 않고 버립니다. 생성기에서 어떤 ★가 왜 빠졌는지 확인할 수 있습니다.
- 출력 유효성 — 결과물은 오디오, 배경, 히트사운드를 포함한 표준 .osz로 묶여 osu!로 바로 가져올 수 있습니다.
숫자로 보기
- 학습 세트의 곡 수
- 86,255
- 학습 채보
- 150,622
- mapper
- ~14,500
- 고유 오디오
- 4,227시간
- 디스크상의 학습 특징 데이터
- ~0.7 TB
- 학습 연산량 (기록 기준, 운영 모델 계보)
- ~580 GPU 시간
- 노트 모델 최종 학습
- ~4일
- 모델 파라미터
- ~57M (노트 51M + 플래너 6M)
- mapset 전체 생성
- ~20초
- 키 모드
- 4K–9K
- 난이도 범위
- ★1–★10
- 1회 실행당 난이도 수
- 최대 10개 (긴 곡은 더 적음)
학습 데이터
운영 모델은 약 14,500명의 mapper가 곡 86,255개(고유 오디오 4,227시간)에 대해 만든 사람이 만든 osu! mania 채보 150,622개로 학습합니다. 이런 시스템에서 대부분의 작업은 모델이 아니라 데이터에 있습니다: 어떤 채보를 학습할 가치가 있는 것으로 볼지 정하고, 모든 학습 예시의 타이밍이 정확한지 확인하고, 채보를 플레이 가능하게 만드는 요소를 담아낼 수 있는 형태로 표현하는 일입니다.
평가: 타이밍 정확도
저희는 평가할 수 있었던, 단일 고정 템포의 모든 Ranked osu! mania mapset — 곡 2,501개 — 에서 저희 타이밍을 사람의 타이밍과 비교하는 벤치마크를 진행했고, 오픈소스 Mapperatorinator의 타이밍 모드와 이전 감지기인 ManiaGAI v1도 함께 비교했습니다. BPM이 mapper의 것과 일치하고(절반/두 배 템포 허용) 비트 위상이 주어진 허용 오차 이내일 때 정답으로 집계합니다.
| 방식 | ≤10 ms | ≤20 ms | ≤40 ms | BPM 정확 | 타이밍 라인 1개 |
|---|---|---|---|---|---|
| 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% |
고정 템포 Ranked 곡만 포함. “타이밍 라인 1개” = mapper처럼 곡을 단일 라인으로 타이밍한 경우(고정 템포 곡에 라인이 추가되면 잘못된 템포 변화임). 실제 배포 구성과 동일하지는 않고 근접한 구성에서 측정했습니다.
학습
플래너와 노트 모델은 각자 다루는 표현으로 따로 학습합니다. 플래너는 각 구간의 게임플레이를 가우시안화한 설명에 대한 가우시안 확산 모델로, 노트 모델은 패턴 토큰에 대한 마스크 토큰 예측으로 학습합니다. 학습 샘플은 키 수와 난이도 수준에 걸쳐 균형을 맞춰 8K와 ★10 채보가 4K와 ★4에 묻히지 않도록 하며, 노트 모델은 혼합 정밀도로 학습합니다.
모든 변경은 학습 손실만이 아니라 생성된 채보 자체로 판단합니다 — 타이밍 정확도, 목표 대비 측정 난이도, 플레이 가능성.
추론과 성능
쓸모 있는 AI 시스템은 모델 품질만의 문제가 아닙니다. 실제로 쓸 수 있을 만큼 빨라야 합니다. ManiaGAI 요청은 다음과 같이 실행됩니다:
- 브라우저에서: 파일을 고르는 즉시, 아직 설정을 고르는 동안 곡을 디코딩하고 음량을 정규화한 뒤 다시 인코딩합니다 — 그래서 GPU가 오디오 처리를 기다리는 일이 없습니다.
- GPU에서 음악 이해: Beat This와 MERT. 그리드 피팅은 MERT와 동시에 CPU에서 실행됩니다.
- 요청한 모든 난이도의 설계와 노트 생성을 한 번의 배치 패스로.
- 검증 — ★ 레이팅 측정, 일관성 검사.
- .osz 패키징, 그리고 다운로드.
GPU 워커는 미리 로드된 스냅샷에서 시작하므로, 콜드 상태의 워커도 모델을 불러오는 데 시간을 쓰지 않고 몇 초 만에 준비됩니다. 일반적인 곡의 mapset 전체에 GPU 연산 시간이 약 20초 걸립니다 — 업로드, 대기열, 다운로드는 제외입니다. 실제로 측정한 2:50 길이의 곡(난이도 5개)은 NVIDIA T4에서 12.7초가 걸렸습니다 — 타이밍과 음악 특징 3.8초(동시 실행), 설계 1.0초, 5개 난이도 전체의 노트 생성 6.1초.
공개하지 않는 것
저희는 아키텍처 원칙, 그 뒤의 엔지니어링 결정, 시스템이 하는 일과 하지 않는 일을 공개합니다 — 기반으로 삼은 오픈 모델(Beat This, MERT)과 저희 모델이 속한 계열(가우시안 확산, MaskGIT)도 포함해서요. 저희가 직접 개발한 방법이나 시스템을 재현할 수 있게 하는 세부 사항은 공개하지 않습니다: 타이밍 그리드를 피팅하고 템포 구간을 병합하는 방법, 노트 모델의 보정 패스를 곡 전체에 배치하는 방법, 모델의 조건 부여 방식, 정확한 아키텍처, 손실 함수와 하이퍼파라미터, 학습 데이터를 수집·필터링·구성하는 방법. 이것이 만든 것에 대해 투명한 것과 레시피를 넘겨주는 것 사이의 경계선입니다. 품질에 대해 주장할 때는 형용사가 아니라 공개된 벤치마크로 뒷받침하려 합니다.
다음 단계
osu! mania 너머로. ManiaGAI는 osu! mania에만 국한되지 않는 게임플레이 표현을 중심으로 설계됐습니다: 타이밍 그리드 위에 라인별로 배치되고 목표 난이도를 조건으로 하는 노트와 롱노트. osu! mania는 시스템의 한계가 아니라 첫 번째 출력 형식입니다.
더 깊이 보기
ManiaGAI를 만든 연구와 엔지니어링의 자세한 이야기: