| Byte Range | Type | Description | |------------|------|-------------| | 0-3 | int | Game mode (0=std, 1=taiko, 2=ctb, 3=mania) | | 4-7 | int | Game version (e.g., 20250316) | | 8-11 | int | Beatmap MD5 hash (as string offset) | | 12-15 | int | Player name (string offset) | | 16-19 | int | Replay MD5 hash (as string offset) | | 20-21 | short | Number of 300s / Geki / etc. (mode-dependent) | | ... (varies) | ... | Counts for 100s, 50s, misses, combo, perfect flag | | 22 | byte | Mods bitwise (enum, 32-bit later in newer osu! versions) | | 23-26 | int | Life bar graph (string offset) | | 27-30 | int | Timestamp (Windows ticks) | | 31-34 | int | Replay length in bytes (for compressed data) | | 35+ | byte[] | Compressed replay data (LZ4 or older zlib) | | End | long | Replay ID (online submission) |
The osu! replay viewer is not a feature for spectators. It’s a feature for students of the game.
In an era where most rhythm games treat replays as short-form content for TikTok, osu! treats them as evidence, as mentorship, as meditation. Every time you click “Watch Replay,” you’re not reliving a victory. You’re asking: What did my hands know that I didn’t? osu replay viewer
And sometimes, the ghost cursor answers.
Before downloading external tools, every player should understand the built-in osu replay viewer. Here is how to access and use it. | Byte Range | Type | Description |
While functional, the native osu replay viewer has blind spots. It does not show:
For serious players, these limitations necessitate third-party tools. For serious players
| Tool | Language | Features | |------|----------|----------| | osr2mp4 | Python/JS | Replay → video rendering | | CircleChart | C# | Advanced analysis, UR calculator | | osu!replay-viewer (web) | TypeScript/HTML5 | Browser-based, no beatmap needed | | gosu-replays | Go | CLI parser + JSON export | | osu-replay-rs | Rust | High-performance parser + wasm |