Research

Inside the Dataset Behind an AI osu! mania Mapper

ManiaGAI v2 learned from 150,622 human-made osu! mania charts by about 14,500 mappers — far beyond the ranked section. What's in the corpus, by key count, difficulty and source, and why it was built that way.

Most of the work in an AI beatmap generator isn’t the model. It’s the data: deciding which charts are worth learning from, making sure every training example is timed correctly, and representing a chart in a form that captures what makes it playable. This post looks inside the corpus that ManiaGAI v2’s models learned from — what’s in it, and why it looks the way it does.

The corpus at a glance

Charts
150,622
Songs
86,255
Mappers
~14,500
Unique audio
4,227 h

That is 150,622 human-made osu! mania charts across 86,255 songs, written by roughly 14,500 different mappers — 4,227 hours of unique audio. It didn’t start that big: the training set grew from about 83,000 charts to its current size during the work that became version 2.

Not just ranked maps

The obvious choice would be to train only on ranked maps — they are reviewed, their timing is checked, and they represent the community’s quality bar. We deliberately didn’t. Ranked maps are a small and stylistically narrow slice of what people actually map and play: in this corpus they are one chart in six.

Training charts by status on osu!
Status on osu!ChartsShare
Ranked / Qualified24,89616.5%
Loved2,5301.7%
Pending, WIP & Graveyard114,21275.8%
Never submitted to osu! (mostly BMS / O2Jam conversions)8,9846.0%

Status from osu! as of October 2026.

Three quarters of the charts are pending, work-in-progress or graveyarded — maps that never went through ranking, which is not the same as maps that are bad: it means nobody reviewed them, not that they failed review. A model that learns only from ranked maps learns the ranked section’s habits; a model that learns from the whole community sees the full range of how people map.

Beyond osu!: BMS and O2Jam

The corpus already spans more than one vertical scrolling rhythm game ecosystem. 21,379 charts — 14% of the set, across every status — are tagged as originating from BMS or O2Jam: 16,188 from BMS and 5,491 from O2Jam, with 300 tagged as both. Those games have their own charting traditions, and they widen what the models see.

By key count

Training charts by key count
KeysChartsShare
4K72,36248.0%
5K8,4425.6%
6K13,2358.8%
7K49,12932.6%
8K5,0903.4%
9K2,3641.6%

4K and 7K dominate — together about 80% of the corpus. 8K and 9K are rare: a few thousand charts each. That imbalance matters for training, so samples are balanced across key counts (and difficulty levels) during training, so that 8K and ★10 charts aren’t drowned out by 4K and ★4.

By difficulty

Star rating measured with osu!’s own algorithm; median ★4.2, range ★0.5–13.

The bulk of the corpus sits between ★1 and ★7, with a long tail of hard charts above ★9. ManiaGAI’s difficulty range, ★1 to ★10, sits where the examples are: every star below ★10 has more than a thousand charts; above it, they thin out quickly. And 15.8% of the charts change tempo mid-song, so variable tempo is part of what the models learn, not an edge case.

What we leave out

Breadth doesn’t mean taking everything. Some charts are excluded because they would teach the wrong thing:

  • Unfinished charts — a half-mapped song teaches a model to stop mapping halfway.
  • Rate-edited duplicates — the same chart sped up or slowed down would count one mapper’s patterns many times over.
  • AI-generated charts, including our own — a model trained on generated maps learns to imitate generators, not mappers.

One timing grid for everything

Every chart in the corpus is re-timed onto the same kind of timing grid the generator produces from audio. That sounds like a detail; it is one of the most important decisions in the dataset. At generation time, the models place notes against the timing ManiaGAI detected, not against a human’s timing — so they should learn note placement against that same kind of grid. Training on mappers’ own timing and generating on detected timing would teach the models one grid and then hand them another. (How accurate that detected timing is gets its own article: the timing benchmark.)

What it takes to learn from it

The audio is encoded once into musical features aligned to the grid — about 0.7 TB of them on disk. All training runs on a single NVIDIA RTX 4070 Ti SUPER with 16 GB of memory. Rather than retraining from scratch at every change, the note model is fine-tuned continually as the data and the timing grid evolve; when we changed how the grid starts, both models were retrained on it. The v2 note model’s full lineage accounts for about 540 logged GPU-hours — its final run alone took about four days and about five passes over 16.9 million training windows — and the planner’s adds about 40 more.

None of it is judged on training loss alone. Every change is checked on the generated charts themselves: timing accuracy, measured difficulty against the target, playability.

What broad data buys — and what it doesn’t

Breadth is what lets one model write 4K and 9K, ★1 and ★10, long-note-heavy charts and jack-heavy ones, and follow a style you ask for: the patterns exist somewhere in the corpus. What breadth doesn’t give you is a uniform quality bar — some charts in a community corpus are better than others, and a model learns from all of them.

We publish what is in the data and why; we don’t publish how it is sourced, filtered and constructed in detail. The Technology page explains where the data fits in the whole system, and the Planner + Noter article covers the two models that learn from it.