First and foremost, I don’t know what I’m doing, but I had a goal: importing osu!
beatmaps and replays into Blender
, ready for Geometry Nodes, so I can create some fancy simulation node setups.
That’s where trusty ol’ ChatGPT came into play. The code is roughly based on 90% of GPT’s work and 10% me banging my head against the wall trying to fix things after GPT broke them.
This addon builds on osrparse
, which helped with parsing .osr
files.
CAUTION: Replays with the intro skipped are broken due to an issue in osrparse's latest versions. osrparse v6.0.2 is currently used
This addon imports a rough version of both the replay and the beatmap, applying a Geometry Nodes modifier that stores attributes based on drivers referencing offset variables for keyframe timings, etc.
You can then add a separate Geometry Nodes object that, for example, takes all hitobjects and spawns them in a simulation zone according to the "show" attributes.
The Driver system is based on the properties of individual hitobjects, whose values can be keyframed. I wanted to avoid using viewport and render keyframes and instead used a more flexible solution.
Download the Addon:
.zip
file of this addon from the Releases page.Install the Addon in Blender:
Edit
> Preferences
> Add-ons
.Install...
at the top-right corner..zip
file.Install osrparse
:
.osr
replay files.Import osu! Beatmaps and Replays:
.osu
beatmap and .osr
replay files.Geometry Nodes Setup:
Cursor
, Circle
, Slider
, Spinner
), each storing relevant attributes.Access the Attributes:
General Geometry Nodes setup.
Geometry Nodes setup for Circle hitobjects.
Geometry Nodes setup for Slider hitobjects.
Geometry Nodes setup for Spinner hitobjects.
Hitobject Importing:
Geometry Nodes Modifiers:
Cursor
, Circle
, Slider
, Spinner
) has a dedicated Geometry Nodes modifier.Driver System:
osrparse Limitations:
osrparse
.osrparse v6.0.2
to mitigate this issue.Performance Problems
I only have basic Python knowledge, so please don’t murder me over bad code. Any help to make this work correctly is highly appreciated. Feel free to do whatever you want with the code.
At the end of the day, getting osu! replays and beatmaps into Blender for dynamic 3D replays would be really cool, right?