1. Introduction osu! is a free-to-play rhythm game renowned for its precision-based gameplay and competitive community. A core component of the game’s ecosystem is the Replay Viewer – a built-in tool that records, stores, and plays back every user’s performance. Unlike simple video recordings, the osu! replay system is data-driven , capturing raw input sequences. This paper provides a technical and functional overview of the Replay Viewer, examining how it works, what data it contains, and how players, coaches, and developers use it. 2. Replay File Structure ( .osr format) The osu! replay is not a video file but a binary file with the extension .osr . Its compact size (typically 10–200 KB) enables efficient storage and sharing. The format consists of the following data blocks:
| Byte Offset | Type | Description | |-------------|------|-------------| | 0 | Int32 | Game mode (0 = osu!standard, 1 = Taiko, 2 = Catch the Beat, 3 = Mania) | | 4 | Int32 | Beatmap hash (version ID) | | 8 | String | Player name | | Variable | String | Beatmap MD5 hash | | Variable | String | Replay MD5 hash (integrity check) | | Variable | Int16 | Number of 300s, 100s, 50s, misses, Geki, Katu | | Variable | Int32 | Maximum combo achieved | | Variable | Int16 | Perfect/full combo flag | | Variable | Int32 | Mods used (bitwise flags: HD, HR, DT, FL, etc.) | | Variable | String | Life bar graph (comma-separated HP values over time) | | Variable | Int64 | Timestamp (Windows ticks) | | Variable | Int32 | Replay length in bytes (compressed) | | Variable | Byte[] | Compressed replay data (LZMA or legacy format) | | Variable | Int64 | Online score ID (if submitted) | osu replay viewer