├── settings.yaml
├── go.mod
├── web
├── assets
│ └── caret.svg
├── scripts
│ └── main.js
├── css
│ ├── main.css.map
│ ├── main.scss
│ └── main.css
└── html
│ └── index.html
├── go.sum
├── README.md
└── server.go
/settings.yaml:
--------------------------------------------------------------------------------
1 | testing: "true"
2 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module achi.osutools
2 |
3 | go 1.16
4 |
5 | require gopkg.in/yaml.v2 v2.4.0
6 |
--------------------------------------------------------------------------------
/web/assets/caret.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
2 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3 | gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
4 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
5 |
--------------------------------------------------------------------------------
/web/scripts/main.js:
--------------------------------------------------------------------------------
1 | var acc = document.getElementsByClassName("accordion");
2 | var i;
3 |
4 | for (i = 0; i < acc.length; i++) {
5 | acc[i].addEventListener("click", function() {
6 | this.classList.toggle("active");
7 | var panel = this.nextElementSibling;
8 | if (panel.style.maxHeight) {
9 | panel.style.maxHeight = null;
10 | } else {
11 | panel.style.maxHeight = panel.scrollHeight + "px";
12 | }
13 | });
14 | }
15 |
16 | function req(username) {
17 | const xhr = new XMLHttpRequest();
18 | const url = `https://api.github.com/users/${username}/repos`;
19 |
20 | xhr.open('GET', url, true);
21 |
22 | xhr.onload = function() {
23 | const data = JSON.parse(this.response);
24 |
25 | for (i = 0; i < data.length; i++) {
26 | if (data[i].name == "osutools") {
27 | document.getElementById("lastModified").innerHTML = "Last modified: " + data[i].updated_at.slice(0, 10) + " at " + data[i].updated_at.slice(11, 19) + " UTC";
28 | }
29 | }
30 | }
31 | xhr.send();
32 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # https://www.osutools.com
2 |
3 | ## A static site attempting to maintain a list of all 3rd party resources commonly used alongside osu!
4 |
5 |
6 |
7 | # How to add items
8 |
9 | Please make a pull request for any additional resources that should be added to the site. I want things to stay pretty basic for this, so just make changes to the html page for now.
10 |
11 | If you aren't git-savy, feel free to request an item in my discord server or directly to me ponpar#0001.
12 |
13 |
14 |
15 | # What am I looking for?
16 |
17 | Anything that isn't created by peppy, or is not available through the main osu site. Things like skins, beatmaps, or tournaments, are not intended for this list.
18 |
19 |
20 |
21 | # How do I test my addition?
22 |
23 | - Download and install golang
24 | - Clone the repository locally
25 | - Run the server using `go run server.go`
26 | - Navigate to `localhost:3000` in your browser
27 | - To set up SASS functionality, run `sass --watch .\web\sass\:.\web\css` (must have [sass](https://sass-lang.com/install) installed)
28 |
--------------------------------------------------------------------------------
/server.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "io/ioutil"
5 | "log"
6 | "net/http"
7 |
8 | "gopkg.in/yaml.v2"
9 | )
10 |
11 | type Settings struct {
12 | Testing string `yaml:"testing"`
13 | }
14 |
15 | func main() {
16 | var settings Settings
17 | settings.getSettings()
18 |
19 | // Handler points to available directories
20 | http.Handle("/web/html", http.StripPrefix("/web/html", http.FileServer(http.Dir("web/html"))))
21 | http.Handle("/web/scripts/", http.StripPrefix("/web/scripts/", http.FileServer(http.Dir("web/scripts"))))
22 | http.Handle("/web/css/", http.StripPrefix("/web/css/", http.FileServer(http.Dir("web/css"))))
23 | http.Handle("/web/assets/", http.StripPrefix("/web/assets/", http.FileServer(http.Dir("web/assets"))))
24 | http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
25 | if r.URL.Path[1:] == "" {
26 | http.ServeFile(w, r, "web/html/index.html")
27 | }
28 | })
29 |
30 | //Serves local webpage for testing
31 | if settings.Testing == "true" {
32 | errhttp := http.ListenAndServe("localhost:3000", nil)
33 | if errhttp != nil {
34 | log.Fatal("Web server (HTTP): ", errhttp)
35 | }
36 | } else {
37 | //Serves the webpage to the internet
38 | errhttps := http.ListenAndServeTLS(":443", "certs/cert.pem", "certs/key.pem", nil)
39 | if errhttps != nil {
40 | log.Fatal("Web server (HTTPS): ", errhttps)
41 | }
42 | }
43 |
44 | }
45 |
46 | func (c *Settings) getSettings() *Settings {
47 |
48 | yamlFile, err := ioutil.ReadFile("settings.yaml")
49 | if err != nil {
50 | log.Printf("yamlFile.Get err #%v ", err)
51 | }
52 | err = yaml.Unmarshal(yamlFile, c)
53 | if err != nil {
54 | log.Fatalf("Unmarshal: %v", err)
55 | }
56 |
57 | return c
58 | }
59 |
--------------------------------------------------------------------------------
/web/css/main.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "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",
4 | "sources": [
5 | "main.scss"
6 | ],
7 | "names": [],
8 | "file": "main.css"
9 | }
--------------------------------------------------------------------------------
/web/css/main.scss:
--------------------------------------------------------------------------------
1 | $primary: #907fa4;
2 | $secondary: #a58faa;
3 | $tertiary: #ededd0;
4 | $highlight: #a6d6d6;
5 |
6 | $macro-whitespace: 15%;
7 |
8 | @mixin container-inner-shadow($round: false) {
9 | background-color: $tertiary;
10 | color: $primary;
11 | box-shadow: inset 0px 0px 20px $secondary;
12 |
13 | @if $round {
14 | border-radius: 50px;
15 | }
16 | }
17 | p {
18 | font-size: 1.5rem;
19 | }
20 |
21 | a {
22 | color: $secondary;
23 | }
24 |
25 | .navbar-title {
26 | font-size: 3rem;
27 |
28 | padding-left: 2rem;
29 | text-align: center;
30 | }
31 |
32 | .navbar {
33 | position: sticky;
34 | z-index: 10;
35 |
36 | width: 100%;
37 | height: 5rem;
38 | top: 0;
39 |
40 | display: flex;
41 | align-items: center;
42 |
43 | background-color: $primary;
44 | color: $tertiary;
45 | }
46 |
47 | body {
48 | font-family: "Rubik", Arial, Helvetica, sans-serif;
49 |
50 | font-weight: 400;
51 | margin: 0;
52 | }
53 |
54 | .body {
55 | display: flex;
56 | flex-direction: column;
57 |
58 | height: 100%;
59 | background-color: $secondary;
60 | }
61 |
62 | .section {
63 | display: flex;
64 | flex-direction: column;
65 |
66 | margin-bottom: 2rem;
67 | padding: 0 $macro-whitespace;
68 |
69 | text-align: center;
70 | justify-content: center;
71 |
72 | @include container-inner-shadow();
73 | }
74 |
75 | .list {
76 | display: flex;
77 | flex-direction: column;
78 | align-items: flex-start;
79 |
80 | padding: 0 $macro-whitespace;
81 | }
82 |
83 | .accordion {
84 | @include container-inner-shadow(true);
85 | display: flex;
86 | justify-content: space-between;
87 | align-items: center;
88 | position: relative;
89 | cursor: pointer;
90 |
91 | width: 100%;
92 | padding: 1rem 2rem;
93 | margin-bottom: 0.5rem;
94 |
95 | font: inherit;
96 | font-size: 3rem;
97 | border: none;
98 |
99 | transition: color 0.3s;
100 |
101 | .caret {
102 | transition: all 0.5s;
103 | width: 4rem;
104 | height: 4rem;
105 |
106 | mask: url(../assets/caret.svg) no-repeat 50% 50%;
107 | mask-size: cover;
108 |
109 | background-color: $primary;
110 | }
111 | }
112 |
113 | .active,
114 | .accordion:hover {
115 | font-weight: bold;
116 | color: $secondary;
117 | }
118 |
119 | .active .caret {
120 | transform: rotate(180deg);
121 | background-color: $highlight;
122 | }
123 |
124 | .panel {
125 | @include container-inner-shadow(true);
126 | width: 100%;
127 | padding: 0 2rem;
128 | margin-bottom: 0.5rem;
129 | box-sizing: border-box;
130 |
131 | max-height: 0;
132 | overflow: hidden;
133 | transition: max-height 0.2s ease-out;
134 |
135 | li {
136 | font-size: 1.75rem;
137 |
138 | p {
139 | margin-top: 0.3rem;
140 | }
141 | code {
142 | font-size: 1rem;
143 | }
144 | a {
145 | font-weight: bold;
146 | }
147 | }
148 | }
149 |
150 | footer {
151 | background-color: $primary;
152 | color: $tertiary;
153 |
154 | padding: 1rem;
155 |
156 | p {
157 | margin: 0;
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/web/css/main.css:
--------------------------------------------------------------------------------
1 | p {
2 | font-size: 1.5rem;
3 | }
4 |
5 | a {
6 | color: #a58faa;
7 | }
8 |
9 | .navbar-title {
10 | font-size: 3rem;
11 | padding-left: 2rem;
12 | text-align: center;
13 | }
14 |
15 | .navbar {
16 | position: -webkit-sticky;
17 | position: sticky;
18 | z-index: 10;
19 | width: 100%;
20 | height: 5rem;
21 | top: 0;
22 | display: -webkit-box;
23 | display: -ms-flexbox;
24 | display: flex;
25 | -webkit-box-align: center;
26 | -ms-flex-align: center;
27 | align-items: center;
28 | background-color: #907fa4;
29 | color: #ededd0;
30 | }
31 |
32 | body {
33 | font-family: "Rubik", Arial, Helvetica, sans-serif;
34 | font-weight: 400;
35 | margin: 0;
36 | }
37 |
38 | .body {
39 | display: -webkit-box;
40 | display: -ms-flexbox;
41 | display: flex;
42 | -webkit-box-orient: vertical;
43 | -webkit-box-direction: normal;
44 | -ms-flex-direction: column;
45 | flex-direction: column;
46 | height: 100%;
47 | background-color: #a58faa;
48 | }
49 |
50 | .section {
51 | display: -webkit-box;
52 | display: -ms-flexbox;
53 | display: flex;
54 | -webkit-box-orient: vertical;
55 | -webkit-box-direction: normal;
56 | -ms-flex-direction: column;
57 | flex-direction: column;
58 | margin-bottom: 2rem;
59 | padding: 0 15%;
60 | text-align: center;
61 | -webkit-box-pack: center;
62 | -ms-flex-pack: center;
63 | justify-content: center;
64 | background-color: #ededd0;
65 | color: #907fa4;
66 | -webkit-box-shadow: inset 0px 0px 20px #a58faa;
67 | box-shadow: inset 0px 0px 20px #a58faa;
68 | }
69 |
70 | .list {
71 | display: -webkit-box;
72 | display: -ms-flexbox;
73 | display: flex;
74 | -webkit-box-orient: vertical;
75 | -webkit-box-direction: normal;
76 | -ms-flex-direction: column;
77 | flex-direction: column;
78 | -webkit-box-align: start;
79 | -ms-flex-align: start;
80 | align-items: flex-start;
81 | padding: 0 15%;
82 | }
83 |
84 | .accordion {
85 | background-color: #ededd0;
86 | color: #907fa4;
87 | -webkit-box-shadow: inset 0px 0px 20px #a58faa;
88 | box-shadow: inset 0px 0px 20px #a58faa;
89 | border-radius: 50px;
90 | display: -webkit-box;
91 | display: -ms-flexbox;
92 | display: flex;
93 | -webkit-box-pack: justify;
94 | -ms-flex-pack: justify;
95 | justify-content: space-between;
96 | -webkit-box-align: center;
97 | -ms-flex-align: center;
98 | align-items: center;
99 | position: relative;
100 | cursor: pointer;
101 | width: 100%;
102 | padding: 1rem 2rem;
103 | margin-bottom: 0.5rem;
104 | font: inherit;
105 | font-size: 3rem;
106 | border: none;
107 | -webkit-transition: color 0.3s;
108 | transition: color 0.3s;
109 | }
110 |
111 | .accordion .caret {
112 | -webkit-transition: all 0.5s;
113 | transition: all 0.5s;
114 | width: 4rem;
115 | height: 4rem;
116 | -webkit-mask: url(../assets/caret.svg) no-repeat 50% 50%;
117 | mask: url(../assets/caret.svg) no-repeat 50% 50%;
118 | -webkit-mask-size: cover;
119 | mask-size: cover;
120 | background-color: #907fa4;
121 | }
122 |
123 | .active,
124 | .accordion:hover {
125 | font-weight: bold;
126 | color: #a58faa;
127 | }
128 |
129 | .active .caret {
130 | -webkit-transform: rotate(180deg);
131 | transform: rotate(180deg);
132 | background-color: #a6d6d6;
133 | }
134 |
135 | .panel {
136 | background-color: #ededd0;
137 | color: #907fa4;
138 | -webkit-box-shadow: inset 0px 0px 20px #a58faa;
139 | box-shadow: inset 0px 0px 20px #a58faa;
140 | border-radius: 50px;
141 | width: 100%;
142 | padding: 0 2rem;
143 | margin-bottom: 0.5rem;
144 | -webkit-box-sizing: border-box;
145 | box-sizing: border-box;
146 | max-height: 0;
147 | overflow: hidden;
148 | -webkit-transition: max-height 0.2s ease-out;
149 | transition: max-height 0.2s ease-out;
150 | }
151 |
152 | .panel li {
153 | font-size: 1.75rem;
154 | }
155 |
156 | .panel li p {
157 | margin-top: 0.3rem;
158 | }
159 |
160 | .panel li code {
161 | font-size: 1rem;
162 | }
163 |
164 | .panel li a {
165 | font-weight: bold;
166 | }
167 |
168 | footer {
169 | background-color: #907fa4;
170 | color: #ededd0;
171 | padding: 1rem;
172 | }
173 |
174 | footer p {
175 | margin: 0;
176 | }
177 | /*# sourceMappingURL=main.css.map */
--------------------------------------------------------------------------------
/web/html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
20 | This is a list of 3rd party tools related to the rhythm game 21 | osu! 22 |
23 |24 | If you would like your work added to the list, please make a pull request at 25 | the github repository. 26 |
27 |28 | Not familiar with github? Join 29 | my development discord and make a 30 | feature request. 31 |
32 |https://github.com/circleguard/ossapi
48 | Support for both V1 and V2 of the API.
49 | Python3 API 50 |https://github.com/Sheepposu/osu.py
51 | Designed specifically for V2 of the API.
52 |https://github.com/Kiritsu/OsuSharp
56 | Support for V1 only, V2 is WIP.
57 |https://github.com/thehowl/go-osuapi
61 | Support for V1 only.
62 |https://github.com/nicholastay/nodesu
66 | Support for V1 only.
67 |https://github.com/LuzianU/OsuCollectionGenerator
80 | Allows for easy creation of collections.
81 |https://github.com/Piotrekol/CollectionManager
85 | Tool used for sharing collections in osu!.
86 |https://jaasonw.github.io/osu-collection-exporter/
90 | Web app that exports collections to a list of copy pasteable links.
91 |https://states.osutools.com
103 | A self-maintined leaderboard for all 50 states.
104 |https://osuchan.syrin.me/
108 | Leaderboards for many different skillsets or groups of people.
109 |https://snipe.huismetbenen.nl/rankings/ca/osu/weighted-pp
114 | Shows how many #1's players have on country leaderboards.
115 |https://osekai.net/medals/
119 | 120 | Provides information on achievements and how to earn them as well as 121 | sorting for unachieved medals using osu! login. 122 |
123 |https://ameobea.me/osutrack/daily-challenge/
128 | Personal and global stats for the Lazer daily challenge
129 |https://github.com/OpenTabletDriver/OpenTabletDriver
142 | 143 | Cross platform tablet drivers with no admin access required, peppy 144 | has implemented a version of this into lazer. 145 |
146 |MAINTAINED AND WORKING
147 |https://github.com/hawku/TabletDriver
151 | 152 | The "original" tablet driver. Unmaintained, but still very popular 153 | and stable. 154 |
155 |CURRENTLY BROKEN
156 |https://github.com/Devocub/TabletDriver
160 | Fork of the Hawku drivers with some added features.
161 |CURRENTLY BROKEN
162 |A comprehensive guide to every skill in osu! by DigitalHypno.
175 |Tips to improve tapping speed by Spare.
179 |In-depth videos on mapping and other osu! related content.
184 |Several useful guides for all play levels.
188 |Reddit post on methods of reducing audio latency.
194 |https://mappingtools.github.io/
207 | 208 | Program used for advanced slider creation, hitsounding, timing, 209 | among other helpful tools. 210 |
211 |https://github.com/Naxesss/MapsetVerifier
215 | 216 | Tests for quantifiable issues in beatmapsets, such as unsnapped 217 | objects and unused files. 218 |
219 |https://slider.little.moe/
223 | Online tool used for advanced slider creation.
224 |https://github.com/Himada4/OsuCollabToolFinal
228 | 229 | Program that can merge and compare .osu files, among other things. 230 |
231 |https://github.com/Damnae/storybrew
235 | Storyboard editor with robust features.
236 |https://oma.hwc.hr/how-to-play
248 | 1v1 and 2v2 matchmaking system.
249 |https://github.com/Meowhal/osu-ahr
253 | Creates and hosts auto-rotate lobbies.
254 |https://osutracker.com/
266 | 267 | Tracks player data, has some unique statistical breakdowns including 268 | a global pp value. 269 |
270 |https://osustats.ppy.sh/
274 | 275 | A stats website that shows top plays for individual days. Hosted by 276 | peppy. 277 |
278 |http://osuskills.com
282 | 283 | Shows which skills you are better or worse at compared to your 284 | peers. 285 |
286 |https://ameobea.me/osutrack/
290 | Well organized tracking / breakdown of user profiles.
291 |https://osekai.net/
295 | 296 | Resource used for custom leaderboards and information on achievements/medals. 297 |
298 |https://osudaily.net/
302 | Profile stat tracker with robust user history.
303 |https://osustats.click/
307 | In depth user profile with built in pp calculators.
308 |https://lookatmysco.re/
312 | Clean scorepost sharing without unnecessary details.
313 |https://github.com/l3lackShark/gosumemory
325 | Memory reader written in golang, incredibly customizable.
326 |https://github.com/Piotrekol/StreamCompanion
330 | 331 | Program directed towards osu! streamers, with functions such as map 332 | information and key counter. 333 |
334 |https://awesomeopensource.com/project/OsuSync/RealTimePPDisplayer
339 | Calculates osu! game data in realtime.
340 |https://github.com/uyitroa/osr2mp4-app/
344 | Converts replay files to video.
345 |Outdated and not maintained, danser has effectively replaced this program.
346 |https://github.com/Wieku/danser-go
350 | High fps video creation tool for osu! replays.
351 |https://ordr.issou.best/
355 | Online tool used to create renders of osu! replays.
356 |https://github.com/oamaok/ezpp
368 | Calculate pp in your browser. Support for Chrome and Firefox.
369 |https://osu.ppy.sh/community/forums/topics/408541
373 | 374 | Additional stats for the osu website. Supports Chrome, Firefox and 375 | Opera. 376 |
377 |https://osu.ppy.sh/community/forums/topics/1504072
381 | Up to date pp calculator extension. Support for Firefox and Chromium-based browsers.
382 |https://github.com/henntix/osu-cleaner
394 | Helps clean up your game if you have a lot of maps.
395 |https://github.com/FunOrange/osu-trainer
399 | 400 | A standalone program designed to create custom settings for existing 401 | maps in the osu client. 402 |
403 |https://osu-pps.com/
407 | Resource used to find the most overweighted maps in osu!.
408 |https://github.com/Tyrrrz/OsuHelper
412 | Helps find new maps for you based on your top plays.
413 |https://osuskinner.com/
417 | Online tool for skin mixing and creation.
418 |https://github.com/circleguard
422 | 423 | A collection of tools to aid in the detection and review of 424 | cheaters. 425 |
426 |https://github.com/miniant-git/REAL
430 | A program to reduce audio latency in Windows 10.
431 |432 | Unmaintained and may disable a CPU thread (can be fixed by 433 | restarting computer) 434 |
435 |https://github.com/uyitroa/osr2mp4-app
439 | A program to convert a replay file into an mp4 file.
440 |https://github.com/abstrakt8/rewind
444 | A beatmap/replay analyzer that is currently in development.
445 |https://github.com/sheepposu/beatmap_reader
449 | 450 | A Python library for reading beatmap files. Aims to implement lots of beatmap utility. 451 | Some notable utility already implemented in built-in slider curve calculation. 452 |
453 |https://osu-atlas.ameo.dev/
457 | 458 | An interactive visualization of osu! beatmaps that places similar beatmaps close to 459 | each other in space. 460 |
461 |