abraker95 / ultimate_osu_analyzer Goto Github PK
View Code? Open in Web Editor NEWPython rewrite of my old osu analyzer that aims to be a lot more useful
License: MIT License
Python rewrite of my old osu analyzer that aims to be a lot more useful
License: MIT License
Make it three different replay layers. The layers will show actions (hit, hold, release) up to a certain time back (user adjustable, but 1 second by default).
Colors for the visualization of each layer should be chosen so that they won't be confusing when displayed together.
Replay manager is located in the replay tab and contains a list of loaded replays for the currently displayed map. The replays should be able to be sorted by either:
Items in the list are displayed via replay title and have the following functionalities:
Additionally right clicking on items allows the following options:
get_replay_manager().get_replay(343)
)The get_hitobjects_visible_at_time
function in beatmap_utility.py isn't perfect. There are certain cases where 2B still causes object to wrongfully disappear.
Breaks on the following condition, where t is any time value:
hitobject_timings = [ (t , 5t), (2t, 3t), (3t, 4t) ]
Condition: t < time < 2t
Returns: [ ]
Expected: [ 0 ]
Hi, I'd like to be able to use code from this repository in another project. For now, using a git submodule suits my needs, but it would be nice if I could just pip install
it (or ideally, parts of it). I'm not quite familiar enough with Python or with your codebase to do it myself.
Which makes any loop freeze the gui. It is possible to make kernel run in another process and connect to it (see this). However, I don't know how to go about pushing variables from the gui into the kernel via that way.
Takes in hitobject and replay data to give a data on whether the player hit an aimpoint within the hitwindow or missed it. The hitwindow is made up of 3 parts: Hit, Miss, Nothing which determines the effect of a key press or release.
The following parameters modify the range of the hitwindow sections:
The following flags modify the behavior of the hitwindow sections:
Weird and interesting effects can be produced via combining various flags. For example, setting the the blank_miss and no_miss flags to True results in being able to press anywhere to hit the next note.
Github wiki are a bit limited in regards to formatting. Read the Docs seems to be cleaner and offer better ways to document various features (and automatic documentation from source code)
Made doc here: https://ultimate-osu-analyzer.readthedocs.io/en/latest/
Follow this when documenting: https://python-docs.readthedocs.io/en/latest/writing/documentation.html
Black Hole - Pluto (7odoa) [Difficult].osu @ 00:09:704 and others
Allow grouping of layers like folders. For example, all layers related to replays can be under one group, all layers relayed to map can be in another, and so on.
The current requirements.txt file in the project contains some outdated dependencies, which result in compatibility issues when using the latest version of pip to install them.
I tried to change some of them to older version and the test still failed
numpy==1.18.0
pandas==0.25.3
scipy==1.5.0
matplotlib==3.1.3
pyqtgraph==0.11.0rc0
osrparse==3.0.0
pyqt5==5.14.1
qtconsole==4.7.0
requests==2.23.0
sphinx==2.3.1
sphinx-rtd-theme==0.4.3
notebook==6.0.1
jupyter-client==5.3.1
watchdog==0.10.2
beautifulsoup4
Additional Information
Operating System: Windows11
Python Version: 3.8.10
pip Version: 24.1.2
When trying to load any replay included in 'unit tests' folder, I get this stack trace
Traceback (most recent call last):
File "run.py", line 472, in dropEvent
if file_type == 'osr': self.open_replay(path)
File "run.py", line 295, in open_replay
replay = ReplayIO.open_replay(replay_filepath)
File "C:\Users\sunny\Programs\ultimate_osu_analyzer-master\osu\local\replay\replayIO.py", line 17, in open_replay
replay = Replay(replay_data.read())
File "C:\Users\sunny\Programs\ultimate_osu_analyzer-master\osu\local\replay\replay.py", line 19, in __init__
osrparse.replay.Replay.__init__(self, replay_data)
TypeError: __init__() missing 2 required positional arguments: 'pure_lzma' and 'decompressed_lzma'
Any hints?
I'll give a try looking into it myself when I have time.
I'm not friendly with github, so I upload the error on the issue page.
In requirements.txt, line 6 is written as osrparse=3.0.0, which must be osrparse==3.0.0.
Please send pull request for this issue.
viewable_time_interval
, note_width
, note_height
, note_seperation
opacity
viewable_time_interval
, cursor_size
, cursor_color
There is no functionality allowing to flip the map for the HR mod
Figure out how to display replays when mods differ in loaded replays (DT cannot be displayed with HT or nomod, for example)
Crashes when dragging timeline cursor at around 80000 ms
Traceback (most recent call last):
File "C:\Users\abrak\Documents\dev\repos\osu-replay-analyzer-v2\gui\objects\layer\layers\std\aimpoint_vector_layer.py", line 54, in paint
painter.drawLine(pos_x*self.ratio_x, pos_y*self.ratio_y, (pos_x + vec_x)*self.ratio_x, (pos_y + vec_y)*self.ratio_y)
OverflowError: argument 4 overflowed: value must be in the range -2147483648 to 2147483647
Layer/display settings reset when restarting the app
A change in how maps will be handled.
It's a pain to keep more than 3 tabs open due to long tab names, and if they are shortened, it's hard to know which tab is which map. So like the Replays tab, the Maps tab will have a list of loaded maps for which the player use to toggle the display of. Adding map to display adds a tab, Removing map from display removes the tab.
Consider having two views: Flat view which lists all maps, and Grouped view which shows and allows grouping maps like layers.
Search functionality might be needed
This is also a prerequisite for allowing mass map analysis
I've been playing around with parsing .osr
files recently (of osumania, if that's relevant), and they seem to match up reasonably well with the hitpoints from the relevant .osu
files from looking at a couple random samples. There's way too many of them (by a couple thousand, usually) though, and drawing them in a manner similar to how you do it (visually, not sure how you actually do it) yields little to no consistent overlap.
Testing the same replay and beatmap with your tool worked just fine though. I've never written Python code before and while some parts of its syntax are conveniently intuitive, others decidedly aren't -- I haven't been able to grasp the full "lifecycle" of the replay stream in your application.
Thus my question(s): Do you filter actions at all, and how do you determine which column they belong in? (I do some dirty bitwise manipulation on the x
field currently, not sure if that is the standard way.) I'd be perfectly happy with you just pointing out the relevant source files, I'll take it from there.
Thanks in advance, and sorry if this isn't the place for questions like these!
Restarting the app every time a change needs to be made in one of the analysis python files is not ideal.
This comes with two different methods of visualization: In display and as its own thing
Visualizing hit window would help with knowing how various hit window settings affect the hit window. The visualization consists of a horizantal bar with color indicated hit (blue) and miss (red) windows, and a scale in ms below the bar.
In display hit window visualization can be done with Taiko and Mania (where position as a function of time is available). The bar is applied to every displayed note, so it is possible to see how player key events affect scoring. The bar is aligned horizontally for Taiko and vertically for mania.
I only got osu original tutorial working
C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master>py "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\run.py"
get_time_range
Traceback (most recent call last):
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\run.py", line 232, in request_open_beatmap
self.open_beatmap(beatmap_filepath)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\run.py", line 237, in open_beatmap
self.apply_beatmap(beatmap)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\run.py", line 248, in apply_beatmap
self.map_manager.add_map(beatmap, beatmap.metadata.name)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\gui\widgets\map_manager.py", line 46, in add_map
if self.currentIndex() == idx: self.map_changed_event(idx)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\misc\callback.py", line 13, in Func
return func(*args, **kwargs)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\gui\widgets\map_manager.py", line 85, in map_changed_event
self.map_changed_event.emit(self.tabData(idx))
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\misc\callback.py", line 42, in exec_callbacks
Func.returns[callback] = callback(*args, **kwargs)
File "C:\Users\oSumAtrIX\Desktop\ultimate_osu_analyzer-master\run.py", line 356, in change_map
min_time, max_time = beatmap.get_time_range()
TypeError: cannot unpack non-iterable NoneType object
Replication steps:
A scale with 0ms on bottom and viewable_time_interval
ms on top.
This is an IPython specific issue, see ipython/ipython#2543
Avoid using those decorators for functions that are for use in the embedded console for now.
Make it three different replay layers.
Hit layer: Horizontal lines where the player presses key
Release layer: Horizontal lines where the player releases key.
Hold layer: Filled area where the player holds the key.
Colors for the visualization of each layer should be chosen so that they won't be confusing when displayed together.
This makes the bottom of the window inaccessible
There is no functionality allowing to speed up/down the map for the DT mod
#
character crashed the app because the beatmap name and folder had it. Other characters might need to be handled as well.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.