O DanceGAI é a equipe por trás do ManiaGAI, um gerador de beatmaps de osu! mania com IA. O DanceGAI está construindo uma infraestrutura de IA que transforma música em experiências jogáveis, e o ManiaGAI é o seu primeiro produto: você envia uma música e ele gera um mapset de osu! mania completo e jogável — timing, notas e uma série de dificuldades — empacotado como um .osz padrão. A música pode ser um arquivo de áudio enviado ou a música de um beatmapset do osu! cujo link você colar; em qualquer caso, só o áudio é usado, nunca os charts existentes. A versão 2 do sistema está no ar neste site. O osu! mania é o primeiro formato de saída: o sistema foi construído para jogos de ritmo de rolagem vertical (VSRG) em geral.
Esta página explica como ele funciona e por que foi projetado assim. Somos abertos sobre a arquitetura e as decisões de engenharia; não publicamos os detalhes de que alguém precisaria para reconstruí-lo. Quando um número ainda não é público, a página diz isso em vez de chutar.
Resumo técnico
| Tarefa | Áudio → mapset jogável de osu! mania (.osz), com uma série completa de dificuldades por execução |
|---|---|
| Escopo | Jogos de ritmo de rolagem vertical (VSRG) — osu! mania primeiro; outros formatos VSRG planejados |
| Timing | Ativações do Beat This → ajuste de grade proprietário (andamento variável). No nosso benchmark, 97,1% de 2.501 músicas ranqueadas de andamento constante tiveram o timing dentro de 40 ms do timing do mapper |
| Representação musical | MERT-v1-95M, alinhado à grade de timing batida por batida |
| Planejador | Difusão gaussiana sobre um estado de jogabilidade por seção, ~6M de parâmetros |
| Modelo de notas | Transformer não autorregressivo no estilo MaskGIT sobre tokens de padrão, ~51M de parâmetros |
| Controles | 4K–9K · alvos de ★1–10 · 5 dimensões de estilo (proporção de LN, LN inverse, jack, mini LN, delay) |
| Dados de treinamento | 150.622 charts feitos por humanos · 86.255 músicas · ~14.500 mappers · 4.227 h de áudio |
| Validação | Verificações da grade de timing, limpeza de notas inválidas, proteção contra silêncio, medição de star rating do osu!, consistência do mapset |
| Treinamento | Uma única RTX 4070 Ti SUPER · ~580 horas de GPU registradas ao longo da linhagem dos modelos de produção |
| Geração | As dificuldades pedidas são geradas juntas em uma única passada em lote na GPU · ~20 s de computação em GPU para um mapset completo |
| Execução | Workers de GPU serverless restaurados a partir de um snapshot de memória; áudio normalizado no navegador |
Um beatmap não é uma transcrição
A forma óbvia de enquadrar a geração automática de beatmaps é “entra áudio, rede neural, saem notas”. Na prática, esse enquadramento produz charts que tecnicamente acompanham a música, mas são desagradáveis de jogar. Um bom mapa de osu! mania está mais perto de um arranjo do que de uma transcrição: o mapper decide quais sons merecem notas, quão densa uma seção deve parecer, onde colocar um jack ou uma long note, como os padrões fluem entre as mãos e como tudo isso muda entre uma dificuldade Easy e uma Expert.
Por isso o ManiaGAI trata a geração de beatmaps como uma sequência de problemas distintos — entender a música, planejar a jogabilidade, posicionar as notas e verificar o resultado:
- Música
- Compreensão
- Planejamento
- Geração
- Refinamento
- Beatmap
1. Compreensão musical
Tudo o que vem depois depende de uma imagem precisa da música. A primeira etapa transforma o áudio bruto em duas coisas: uma grade de timing e uma representação musical de alta resolução de cada momento da música.
Timing. As ativações de batidas e de tempos fortes vêm do Beat This, um modelo de beat tracking de código aberto. Transformar essas ativações em uma grade de timing do osu! — BPM e offset, inclusive em músicas que mudam de andamento — é o nosso próprio método de ajuste de grade, e ele produz o mesmo tipo de grade com que os modelos de geração foram treinados. O timing é a primeira coisa que os jogadores percebem: um chart alguns milissegundos fora da batida é injogável, por melhores que sejam os padrões, então ele é tratado como um problema de primeira classe, não como uma etapa de pré-processamento.
Características musicais. O áudio é codificado com o MERT-v1-95M, um modelo autossupervisionado de representação musical, e alinhado à grade de timing — assim os modelos enxergam a música batida por batida: ataques, textura, intensidade e como tudo isso muda ao longo da música. Trechos de silêncio são detectados separadamente, para que nada seja mapeado sobre eles.
2. Planejamento do beatmap
A escolha central de design do ManiaGAI é separar o que deve acontecer de como as notas são posicionadas.
Um modelo de planejamento dedicado lê a representação musical e decide a estrutura de jogabilidade da música inteira antes de existir qualquer nota: quão densa cada seção deve ser, que tipos de padrão cabem onde, como a dificuldade deve subir e descer e como tudo isso se encaixa na dificuldade e no estilo pedidos. A saída é um plano que descreve o chart seção por seção — a dificuldade local e a mistura de long notes, jacks e outros tipos de padrão —, não notas.
O planejador é um modelo de difusão gaussiana (cerca de 6M de parâmetros). Ele gera o plano de todas as seções da música em conjunto, condicionado à música, ao número de teclas e à dificuldade e ao estilo desejados. A difusão combina com essa tarefa: um plano é uma descrição suave e contínua de uma música, e gerá-lo por inteiro permite ao planejador equilibrar a música toda de uma vez.
Planejar nesse nível dá ao sistema algo que falta a um modelo que trabalha nota por nota: uma visão da música inteira. Um refrão pode ser planejado para bater mais forte do que a estrofe anterior; um breakdown pode ser planejado para respirar.
3. Geração de notas
Um segundo modelo transforma o plano no posicionamento real das notas — quais colunas, quais notas são toques simples e quais são long notes, como os padrões se conectam. O planejamento determina a estrutura; a geração de notas transforma essa estrutura em notas jogáveis que seguem tanto o plano quanto o áudio.
O modelo de notas é um transformer não autorregressivo no estilo MaskGIT (cerca de 51M de parâmetros). Os charts são representados como tokens discretos de padrão e, em vez de escrevê-los um de cada vez do início ao fim, o modelo preenche o chart inteiro e depois o refina em várias passadas — fixando as notas sobre as quais tem confiança e revisitando o resto. Cada passada enxerga o contexto dos dois lados de cada seção, e é isso que mantém os padrões consistentes ao longo de uma música. A forma como essas passadas são distribuídas ao longo da música é o nosso próprio método de refinamento.
Por que o ManiaGAI usa um Planner + Noter (em inglês) →
4. Geração controlável
O ManiaGAI não é um sistema de “gerar e torcer”. A mesma música pode ser gerada com controles explícitos, e os controles fazem parte do que os modelos foram treinados para seguir:
- Número de teclas — de 4K a 9K.
- Dificuldade — qualquer seleção de star ratings de ★1 a ★10. Uma música produz um mapset inteiro, de Easy a Expert, em uma única execução.
- Estilo — características de jogabilidade como a proporção de long notes e quanto de jack, LN inverse, LN curta e delay um chart contém, cada uma ajustável no gerador.
- Densidade — decorre da dificuldade desejada e do plano, e não de uma regra fixa.
Todas as dificuldades são geradas a partir da mesma compreensão da música, então um mapset soa como uma família de charts, e não como charts sem relação entre si. Em seguida, estamos trabalhando em representações de estilo aprendidas — descrever um estilo de mapping por exemplos, em vez de por um punhado de controles deslizantes.
5. Validação e controle de qualidade
Antes de um chart chegar até você, o sistema o verifica:
- Timing — os timing points gravados são conferidos com a grade detectada.
- Notas inválidas e injogáveis — notas sobrepostas, long notes quebradas e posicionamentos que o jogo não consegue representar são resolvidos, e nada é mapeado sobre áudio claramente silencioso.
- Dificuldade medida — a star rating de cada chart é medida com o mesmo algoritmo de star rating que o osu! usa, e a dificuldade recebe o nome do valor medido, não do valor pedido.
- Consistência no mapset — um chart que sai mais fácil do que aquele que deveria ficar abaixo dele, ou com dificuldade quase idêntica à de um vizinho, é descartado em vez de entregue. No gerador, você vê quais estrelas foram descartadas e por quê.
- Validade da saída — o resultado é empacotado como um .osz padrão, com áudio, fundo e hitsounds, que é importado diretamente no osu!.
Em números
- Músicas no conjunto de treinamento
- 86.255
- Charts de treinamento
- 150.622
- Mappers
- ~14.500
- Áudio único
- 4.227 h
- Features de treinamento em disco
- ~0,7 TB
- Computação de treinamento (registrada, linhagem de produção)
- ~580 horas de GPU
- Execução final do modelo de notas
- ~4 dias
- Parâmetros do modelo
- ~57M (51M notas + 6M planejador)
- Geração de um mapset completo
- ~20 s
- Modos de teclas
- 4K–9K
- Faixa de dificuldade
- ★1–★10
- Dificuldades por execução
- até 10 (menos para músicas longas)
Dados de treinamento
Os modelos de produção aprendem com 150.622 charts de osu! mania feitos por humanos em 86.255 músicas — 4.227 horas de áudio único — de aproximadamente 14.500 mappers. A maior parte do trabalho em um sistema como este não é o modelo; são os dados: decidir o que conta como um chart que vale a pena aprender, garantir que o timing de cada exemplo de treinamento esteja certo e representar os charts de uma forma que capture o que os torna jogáveis.
Explore o dataset de treino (em inglês) →
Avaliação: precisão do timing
Comparamos o nosso timing com o timing humano em todos os mapsets ranqueados de osu! mania com um único andamento constante que conseguimos avaliar — 2.501 músicas —, junto com o modo de timing do Mapperatorinator, de código aberto, e o ManiaGAI v1, nosso detector anterior. Uma música conta como correta quando o BPM bate com o do mapper (admitindo metade/dobro do andamento) e a fase da batida está dentro da tolerância indicada.
| Método | ≤10 ms | ≤20 ms | ≤40 ms | BPM correto | Uma linha de 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% |
Somente músicas ranqueadas de andamento constante; “uma linha de timing” = a música recebeu timing com uma única linha, como o mapper fez (uma linha a mais em uma música de andamento constante é uma falsa mudança de andamento). Medido em uma configuração próxima, mas não idêntica, à que está em produção.
Leia o benchmark de timing completo (em inglês) →
Treinamento
O planejador e o modelo de notas são treinados separadamente, cada um na representação com que trabalha — o planejador como um modelo de difusão gaussiana sobre uma descrição gaussianizada da jogabilidade de cada seção, o modelo de notas por predição de tokens mascarados sobre tokens de padrão. As amostras de treinamento são balanceadas entre números de teclas e níveis de dificuldade para que os charts 8K e ★10 não sejam abafados pelos 4K e ★4, e o modelo de notas treina em precisão mista.
Cada mudança é avaliada pelos próprios charts gerados — precisão do timing, dificuldade medida em relação ao alvo, jogabilidade —, e não só pela loss de treinamento.
Inferência e desempenho
Um sistema de IA útil não depende só da qualidade do modelo; ele também precisa ser rápido o bastante para ser usado. Uma requisição ao ManiaGAI funciona assim:
- No seu navegador: a música é decodificada, tem o volume normalizado e é recodificada assim que você escolhe o arquivo, enquanto você ainda está escolhendo as configurações — assim a GPU nunca espera pelo processamento do áudio.
- Compreensão musical na GPU: Beat This e MERT, com o ajuste de grade rodando na CPU em paralelo com o MERT.
- Planejamento e geração de notas para todas as dificuldades pedidas em uma única passada em lote.
- Validação — medição de star rating, verificações de consistência.
- Empacotamento do .osz, e depois o download.
Os workers de GPU iniciam a partir de um snapshot pré-carregado, então até um worker frio fica pronto em segundos, em vez de gastar esse tempo carregando modelos. Um mapset completo leva cerca de 20 segundos de computação em GPU para uma música típica — sem contar upload, fila ou download; uma música medida de 2:50 com cinco dificuldades levou 12,7 segundos em uma NVIDIA T4 — timing e características musicais 3,8 s (executados em paralelo), planejamento 1,0 s, geração de notas para as cinco dificuldades 6,1 s.
Como deixamos a geração rápida (em inglês) →
O que não publicamos
Publicamos os princípios da arquitetura, as decisões de engenharia por trás deles e o que o sistema faz e não faz — incluindo os modelos abertos sobre os quais construímos (Beat This, MERT) e as famílias às quais nossos próprios modelos pertencem (difusão gaussiana, MaskGIT). Não publicamos os métodos que desenvolvemos nem os detalhes que permitiriam a alguém reproduzir o sistema: como a grade de timing é ajustada e seus segmentos de andamento são mesclados, como as passadas de refinamento do modelo de notas são distribuídas ao longo de uma música, como os modelos são condicionados, as arquiteturas exatas, as funções de perda e os hiperparâmetros, e como os dados de treinamento são obtidos, filtrados e construídos. Essa é a linha entre ser transparente sobre o que construímos e entregar a receita. Quando fizermos afirmações sobre qualidade, pretendemos sustentá-las com benchmarks publicados — não com adjetivos.
O que vem a seguir
Além do osu! mania. O ManiaGAI foi projetado em torno de uma representação de jogabilidade que não é específica do osu! mania: notas e long notes em colunas, posicionadas sobre uma grade de timing e condicionadas a uma dificuldade desejada. O osu! mania é o primeiro formato de saída, não o limite do sistema.
Em profundidade
A pesquisa e a engenharia por trás do ManiaGAI, em detalhes:
Experimente o ManiaGAI
Gere um mapset completo de osu! mania a partir da sua música — grátis, em segundos.
Criar um mapset →