Coder Social home page Coder Social logo

mapsetverifier's Introduction

Mapset Verifier

Mapset Verifier (MV) is a desktop app which tests quantifyable issues in beatmapsets from osu!, such as unsnapped objects and unused files. Many of these issues would otherwise disqualify the map from being ranked. Although mainly aimed at Beatmap Nominators, this can also be used by mapset creators and reviewers to speed up the ranking process.

MV is a successor to the game's built-in AiMod and Sieg's Modding Assistant, providing more features and greater scalability. Some examples include auto-updates, plugin support, and integrated documentation and diff utilities.

This is currently being ported to osu!lazer. You can track its progress here!

Note

Some issues are not easily quantified, especially ones related to metadata and timing; far from everything is covered. Also, false positives and false negatives may occur, as with any similar tool. So always use your own judgement and be critical about what the program points out, especially warnings.

Download

See the latest release. On Windows, get the exe file. On Linux, get the tar.gz / use this package on archlinux.

Version Date Released Windows Linux
1.8.2 2021-09-21
1.8.0 2021-09-14
1.7.2 2020-10-07
1.7.1 2020-10-03
1.7.0 2020-09-28
1.6.6 2020-08-04
1.6.5 2020-07-03

Common Problems

  • Windows protected pc

    • Solution: More info > Run anyway OR Right click installer > Properties > Unblock
    • Reason: Installer has no signed certificate (costs)
  • Stuck on install screen on reinstall

    • Solution: Uninstall before reinstalling
    • Reason: Limitation in electron-builder
  • Javascript error ENOENT, no MapsetVerifierBackend.exe in /app/api/win-x86

    • Solution: Uninstall, reinstall, then whitelist this exe in your antivirus before running again
    • Reason: Antivirus false positive, deletes the backend (part that does checks) on first run
  • Infinite loading, windows 7 version before KB2533623

    • Solution: Get KB2533623
    • Reason: Backend blocked from running due to DLL loading being insecure without patch

Components

Mapset Verifier is comprised of the following open source .NET Core components:

Component Description
MapsetParser Parses .osu and .osb files in the given mapset folder
MapsetChecks The default plugin for MV. Includes all-mode and standard checks
MapsetSnapshotter A diff utility. Provides a summary of changes within a mapset since a snapshot
MapsetVerifierFramework A plugin framework for loading and running check DLLs
MapsetVerifierBackend Handles rendering and communication between the framework and Electron client

The remaining HTML/CSS/JS files are available in the application, see /Mapset Verifier/resources/app.

Feature Comparison

Feature Mapset Verifier Modding Assistant AiMod
Difficulty Interpretation ✅ (Option, Name, SR) ✅ (Name, SR) ✅ (SR)
Snapshots ✅ (Automatic) ✅ (Manual) ⬜️
Integrated Documentation ✅ (RC Snippets) ⬜️
Timeline Comparison ✅ (Taiko-only) ⬜️
Song folder detection ⬜️
Automatic Updates ✅ (Windows-only) ⬜️
Verbose Mode ⬜️
Plugin Support ⬜️ ⬜️
Open Source ⬜️ ⬜️
Difficulty Graph ✅ (Outdated SR) ⬜️

Examples of fixed false positives/negatives

Modding Assistant

  • counting extended break times as drain time.
  • failing to account for minimum SV (0.1x).
  • misinterpreting hit sounds on slider bodies as hit sounds on heads/tails.
  • completely ignoring storyboard variables and animation frames.

AiMod

  • incorrectly detecting unsnaps on slider tails < 2 ms off
  • not accounting for stacking.
  • using a vastly outdated star rating system, saying you need an easy/normal when you already have one.
  • using inaccurate playfield measurements to detect offscreen hit objects.

Plugins

Add check DLLs to %APPDATA%/Mapset Verifier Externals/checks to have them load in just like the default checks. To create these DLLs, have a look at how MapsetChecks was created. This is probably also useful.

Third-party plugins (that I'm aware of):

In general, do be careful about which check plugins you use, as they can be malicious. The plugins are executed by the back end of the application, so they can pretty much do anything the rest of the application can.

Checks (last updated 2021-09-14)

General

Category Issue Message
Resources Missing background.
Resources Too high or low background resolution.
Resources Inconsistent video usage.
Resources Overlay layer usage.
Resources Too high sprite resolution.
Resources Inconsistent video offset.
Resources Too high video resolution.
Metadata Inconsistent metadata.
Metadata Incorrect marker format.
Metadata Incorrect marker spacing.
Metadata BMS used as source.
Metadata Incorrect format of (TV Size) / (Game Ver.) / (Short Ver.) / (Cut Ver.) / (Sped Up Ver.) in title.
Metadata Unicode in romanized fields.
Metadata Missing genre/language in tags.
Files Issues with updating or downloading.
Files 0-byte files.
Files Unused files.
Audio Audio channels in video.
Audio More than 20% unused audio at the end.
Audio Too high or low audio bitrate.
Audio Frequent finish hit sounds.
Audio Delayed hit sounds.
Audio Incorrect hit sound format.
Audio Imbalanced hit sounds.
Audio Too short hit sounds.
Audio Multiple or missing audio files.
Audio Incorrect audio format.

All Modes

Category Issue Message
Timing Concurrent or conflicting timing lines.
Timing First line toggles kiai or is inherited.
Timing Inconsistent uninherited lines, meter signatures or BPM.
Timing Unsnapped kiai.
Timing Inconsistent or unset preview time.
Timing Unsnapped hit objects.
Timing Unused timing lines.
Timing Wrongly or inconsistently snapped hit objects.
Spread Lowest difficulty too difficult for the given drain/play time(s).
Settings Abnormal difficulty settings.
Settings Inconsistent mapset id, countdown, epilepsy warning, etc.
Settings Slider tick rates not aligning with any common beat snap divisor.
Settings Abnormal difficulty settings.
Hit Sounds Low volume hit sounding.
Events Breaks only achievable through .osu editing.
Compose Abnormal amount of slider nodes.
Compose Concurrent hit objects.
Compose Too short drain time.
Compose Invisible sliders.
Compose Abnormal amount of slider nodes.

Standard

Category Issue Message
Timing Hit object is unaffected by a line very close to it.
Spread Multiple reverses on too short sliders.
Spread Too short sliders.
Spread Object too close or far away from previous.
Spread Too short spinner time or spinner recovery time.
Spread Perfect stacks too close in time.
Spread Objects close in time not overlapping.
Settings Default combo colours without forced skin.
Settings Too dark or bright combo colours or slider borders.
Hit Sounds Long periods without hit sounding.
Events Storyboarded hit sounds.
Compose Burai slider.
Compose Too short spinner.
Compose Obscured reverse arrows.
Compose Offscreen hit objects.
Compose Abnormally large spacing.
Compose Ambiguous slider intersection.

Taiko

Category Issue Message
Timing Inconsistent omitted bar lines.
Timing Hit object is unaffected by a line very close to it.
Events Storyboarded hit sounds.

Catch

Category Issue Message
Timing Hit object is unaffected by a line very close to it.
Settings Default combo colours without forced skin.
Settings Too dark or bright combo colours or slider borders.
Hit Sounds Long periods without hit sounding.
Events Storyboarded hit sounds.
Compose Spinner gap too small.

Modes apart from standard do not have their SRs implemented, so difficulty levels will likely be wrong.

Reporting Bugs

Either post an issue here or contact me on Discord @naxess. Give beatmapset and reproduction steps if applicable. If you don't have me on discord just join the Aiess Project, after which you should be able to message me.

mapsetverifier's People

Contributors

naxesss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

mapsetverifier's Issues

genre and language bug

bug on genre and languages. after refreshing and updating the beatmap and restarting the app, it wont see that it has genre and languages set.

image

OGG RC changed to 208 not 192 anymore

new RC

...have an average bit rate no greater than 192 kbps for .mp3 files, or 208 kbps for .ogg files.

currently your program throwing error for 193 kpbs for ogg still

Arch Linux: The display compositor is frequently crashing. Goodbye.

OS: Arch Linux

App not opening whether installed from AUR or running executable from tar.gz.

Running mapsetverifier:

[grindle@CRAPPY-DESKTOP mapsetverifier-1.8.2]$ ./mapsetverifier 
Fontconfig warning: "/usr/share/fontconfig/conf.avail/05-reset-dirs-sample.conf", line 6: unknown element "reset-dirs"
[6318:0908/191300.075107:FATAL:gpu_data_manager_impl_private.cc(892)] The display compositor is frequently crashing. Goodbye.
Trace/breakpoint trap (core dumped)
[grindle@CRAPPY-DESKTOP mapsetverifier-1.8.2]$

Running mapsetverifier --no-sandbox gets the app to open, but backend seems to not work as beatmaps get stuck infinitely loading.

Running MapsetVerifierBackend:

[grindle@CRAPPY-DESKTOP linux-x64]$ ./MapsetVerifierBackend
Process terminated. Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode()
   at System.Globalization.GlobalizationMode..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.CultureInfo..cctor()
   at System.Globalization.CultureInfo.get_InvariantCulture()
   at MapsetVerifierBackend.Program.Main(System.String[])
Aborted (core dumped)
[grindle@CRAPPY-DESKTOP linux-x64]$ 

Running export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1; ./MapsetVerifierBackend:

[grindle@CRAPPY-DESKTOP linux-x64]$ export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1; ./MapsetVerifierBackend
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly '/mnt/Storage Box/Executables/mapsetverifier-1.8.2/resources/app/api/linux-x64/resources/app/checks/MapsetChecks.dll'. The system cannot find the file specified.

File name: '/mnt/Storage Box/Executables/mapsetverifier-1.8.2/resources/app/api/linux-x64/resources/app/checks/MapsetChecks.dll'
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromPath(IntPtr ptrNativeAssemblyLoadContext, String ilPath, String niPath, ObjectHandleOnStack retAssembly)
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath)
   at System.Reflection.Assembly.LoadFile(String path)
   at MapsetVerifierFramework.Checker.LoadCheckDLL(String aCheckPath) in D:\VSPROJECTS\Visual Studio 2017\Projects\MapsetVerifierFramework\Checker.cs:line 120
   at MapsetVerifierBackend.Program.Main(String[] args) in D:\VSPROJECTS\Visual Studio 2017\Projects\MapsetVerifierBackend\Program.cs:line 33


Aborted (core dumped)
[grindle@CRAPPY-DESKTOP linux-x64]$

Running export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1; ./mapsetverifier yields the same error as running without the export.

Finally, the app can be successfully launched as normal with export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1; ./mapsetverifier --no-sandbox, allowing beatmaps to be loaded and checked as normal.

EDIT: Actually, I just rebooted my computer and the above command is still required but all functionality works now and the errors below don't apply.

However, this method yields two errors which don't seem to affect Checks functionality i.e. Backend error, click here for details.:

Unhandled exception.
System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Address already in use ---> System.Net.Sockets.SocketException (98): Address already in use at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName) at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Bind(EndPoint localEP) at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync() --- End of inner exception stack trace --- at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync() at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.<>c__DisplayClass21_0`1.<g__OnBind

Additionally, it seems Snapshots functionality won't work with this as it yields an error i.e. Unable to find the specified file.:

at Interop.Sys.GetCwdHelper(Byte* ptr, Int32 bufferSize) at Interop.Sys.GetCwd() at System.IO.Path.GetFullPath(String path) at System.IO.File.GetCreationTimeUtc(String path) at MapsetSnapshotter.Snapshotter.SnapshotBeatmapSet(BeatmapSet aBeatmapSet) in D:\VSPROJECTS\Visual Studio 2017\Projects\MapsetSnapshotter\Snapshotter.cs:line 57 at MapsetVerifierBackend.Server.Worker.RequestSnapshots(String aBeatmapSetPath) in D:\VSPROJECTS\Visual Studio 2017\Projects\MapsetVerifierBackend\Server\Worker.cs:line 137

Difficulty graph's time axis in Overview tab does not take into account intros / outros

title of issue

this makes it extremely confusing to navigate through a map looking for a specific spike since you have to manually add the intro time every time you want to navigate to a potential problem point

in the example below my map has an intro time of around 5.5s and ends at the following timestamp

image

yet when we see it in MV it would end at around 3:04:

image

this replicates itself on other maps

(i have no idea where else to post this without pinging naxess directly, this is my first time using github)

timing points don't update?

I noticed while fixing 1 ms unsnaps (moving the objects in question back by 1ms), if they had a green line on them it'd give the "Hit object is unaffected by a line very close to it." warning even though the line was also moved. Similarly, moving a green line forward 1ms so that it no longer affected the object it was placed on would fail to cause this error. Restarting the program fixes this, but swapping to a different map and then back does not.

Mapset Verifier refuses to establish connection on localhost:5000

When I try to use Mapset Verifier (prior to choosing a song folder,) nothing works. This persists after choosing a song folder, and I cannot run any checks.

image
image

I have no clue what's going on. I've restarted my PC, which did not help. I've tried running as administrator, and that also didn't help.

Any ideas?

Thanks.

Backend error everytime I start up Mapset Verifier

image
When I expand the first backend error I get the follow message:

System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Only one usage of each socket address (protocol/network address/port) is normally permitted. ---> System.Net.Sockets.SocketException (10048): Only one usage of each socket address (protocol/network address/port) is normally permitted. at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName) at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Bind(EndPoint localEP) at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync() --- End of inner exception stack trace --- at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync() at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.<>c__DisplayClass21_0`1.<g__OnBind

The second backend error returns the following message:
Unhandled exception.

The only real context I can give is this issue popped up after I replaced my GPU with an Intel GPU (Intel Arc A750). I have no idea if that could've caused the issue or something else I touched in the like 12 hour span since the last time I launched MV and this issue cropped up.

Mapset Verifier won’t setup

Everytime I try to download the app, it’s just stops almost halfway and says “Setup was not completed successfully.” It won’t give me a reason why

Linux Compability

Here are some issues found out during testing on Linux.
OS: Manjaro Linux

  • Upon update
  • Application
    • appdataPath goes to ~/.local/share/Mapset Verifier Externals while the folder is created on ~/.config/Mapset Verifier Externals, this not only makes settings isnt viable, but also opening external folder impossible.

For last point, it seems to be caused by the fact that MapsetVerifierBackend is not consistent with Mapset Verifier's appdataPath.

On MVBackend, it uses Environment.SpecialFolder.ApplicationData that points out to ~/.config, while Environment.SpecialFolder.LocalApplicationData points out to ~/.local/share[1]

[1] https://jimrich.sk/environment-specialfolder-on-windows-linux-and-os-x/

[Feature Request] Notify on Invalid Volumes of Timing Lines

Possibly adding features to check invalid hitsounding volumes of timing lines like? Not sure if the case applies for MV (because clicking on it will crash the osu! client) but can be useful when there are huge amount of lines in the timing panel and when people use external programs for hitsounding which can potentially cause such issues.

105% Volume

Hardware Accel

Would be nice to have a Hardware Acceleration / GPU option so that it could possibly get through the map and toggle between difficulties in Checks mode

Mapset Verifier is not able to populate the map list if osu! is on External HDD

Summary:
I've got my osu! folder on external HDD and setting up the folder in-app to the Songs folder on my external HDD doesn't populate the maplist
image
image

Repro Rate:
Mapset Verifier 1.8.2 on 21H1 (19043.1348) - 5/5

Repro Steps:

  1. Install the app
  2. Make sure your osu! folder is on an External HDD
  3. Select a Songs folder in-app
  4. Observe the issue as the maplist doesn't populate

Expected Results:
Maplist populates and user is able to pick a map from it

Actual Results:
Maplist doesn't populate with maps

How to install on linux

I'm new to linux and is using ubuntu 20.04 LTS
I searched on google about installing tar.gz files
But I followed the tutorial and it gives me an error of like "config, no such directory" or "INSTALL, no such file" etc

Couldn't work on Windows 7

When I opened any mapsets on Windows 7, there were no responses to loading.
Windows 7

But when I used it on Windows 10, it could work well.
Windows 10

Cannot install

It keeps saying Installation Aborted every time I tried to install without any meaningful feedback. What could possibly be the problem here?

Kiai time calculation doesn't function properly if both a red line and green line are present in the middle of an existing kiai

As the title says, to encounter this bug, simply start a kiai (whether from a red or green line it doesn't matter), then add a red line and a green line on the same tick whilst in the current kiai. I discovered this when my kiai calculation was different for nearly every difficulty due to a nightcore red line (metronome reset) I added. Offsetting the green line by as little as +-1ms seems to fix this but I'd rather get this addressed in MV rather than have to offset my maps.
Kiai Time in MV, almost every difficulty is different:
unknown
The red and green line that seems to be causing the issue:
image
By offsetting the green line by 1ms in every difficulty it magically fixes itself (I also did the note it affected but this did not change the results):
image

[Feature Request] Checking For Invisible Notes / Sliders Without CurvePoints

Normal Sliders Have CurvePoints Like 113,85,11274,6,0,P|151:85|201:121,1,80, but Invisible Notes / Sliders Without CurvePoints Looks Like 146,189,13070,2,0,L,1,47.9999985351563, And It Does not Detect.
Slider Syntax Looks like x,y,time,type,hitSound,curveType|curvePoints,slides,length,edgeSounds,edgeSets,hitSample, but having no curvePoints set it goes invisible (not in osu!lazer)

No usable version of libssl was found

Backend doesn't want to start

 ~/D/mapsetverifier-1.8.2  ./resources/app/api/linux-x64/MapsetVerifierBackend
Startup.
Configure Services.
No usable version of libssl was found
fish: Job 1, './resources/app/api/linux-x64/M…' terminated by signal SIGABRT (Abort)

That's weird because ssl is one of the most essential libraries on every distro and of course I have them. Could it be a version issue? Because I'm on Ubuntu 22.04 LTS which was released later than the last release of this program so maybe due to updated distro packages? Hopefully this project is still being maintained.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.