Compare commits

..

131 Commits

Author SHA1 Message Date
Arlind
138784d084 [ci skip] push back from pipeline 2025-11-23 17:16:28 +00:00
1f4ddfd90d Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 49m37s
2025-11-23 17:02:03 +01:00
771f6d40f1 Update .gitattributes from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2025-11-23 17:02:02 +01:00
Arlind
204d970ad2 [ci skip] push back from pipeline 2025-11-23 14:29:03 +00:00
c298c080c8 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 1m17s
2025-11-23 15:27:32 +01:00
85ef060097 Update .gitattributes from skins-template 2025-11-23 15:27:32 +01:00
Arlind
4e0ecd92cc [ci skip] push back from pipeline 2025-11-23 13:58:20 +00:00
59f665ba6d Update CI from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Failing after 1m16s
2025-11-23 14:57:05 +01:00
26be7166d7 Update .gitattributes from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2025-11-23 14:57:05 +01:00
Arlind
73a085d0bd [ci skip] push back from pipeline 2025-11-23 11:57:03 +00:00
aeaa605676 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 22s
2025-11-23 12:56:16 +01:00
91b920edb2 Update .gitattributes from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2025-11-23 12:56:16 +01:00
f1c0b2b352 Update CI from skins-template 2025-11-23 12:55:11 +01:00
2c6cc82348 Update .gitattributes from skins-template 2025-11-23 12:55:10 +01:00
400b3a5688 Update CI from skins-template 2001-01-01 00:00:00 +00:00
7f8675fc5a Update .gitattributes from skins-template 2001-01-01 00:00:00 +00:00
GitHub Actions
abdc74593c Update CI from skins-template 2001-01-01 00:00:00 +00:00
GitHub Actions
58aa98f3a0 Update .gitattributes from skins-template 2001-01-01 00:00:00 +00:00
48fc4d9e4d Update CI from skins-template 2001-01-01 00:00:00 +00:00
c179b33595 Update .gitattributes from skins-template 2001-01-01 00:00:00 +00:00
Arlind
66c1130e52 [ci skip] push back from pipeline 2025-11-22 22:22:21 +00:00
f30144eab0 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 30s
2001-01-01 00:00:00 +00:00
03d78a57ac Update .gitattributes from skins-template 2001-01-01 00:00:00 +00:00
Arlind
c55d57e99d [ci skip] push back from pipeline 2025-11-03 20:32:46 +00:00
Arlind
eb66c11203 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 50m13s
2001-01-01 00:00:00 +00:00
Arlind
a81aabffc1 Update .gitattributes from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2001-01-01 00:00:00 +00:00
Arlind
80b68a9fb7 [ci skip] push back from pipeline 2025-11-02 12:30:01 +00:00
2949387344 delete long ass skin name
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 27m15s
2025-11-02 13:02:45 +01:00
Your Name
63ad31d7fd Updating skins
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2025-10-16 00:09:36 +02:00
Arlind
1e000d2304 Update CI from skins-template 2025-10-09 17:04:37 +02:00
Arlind
823f0d62bd Update .gitattributes from skins-template 2025-10-09 17:04:36 +02:00
Arlind
e89d10e558 [ci skip] push back from pipeline 2025-10-03 19:46:38 +00:00
Arlind
75e0013065 [ci skip] push back from pipeline 2025-10-03 19:40:53 +00:00
Arlind
6e7ebad23a Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 24s
2025-10-03 21:40:13 +02:00
Arlind
e7dac49ec2 Update .gitattributes from skins-template 2025-10-03 21:40:12 +02:00
Arlind
1a8f5830c8 Update CI from skins-template 2025-10-03 21:36:22 +02:00
Arlind
eec94024dc Update .gitattributes from skins-template 2025-10-03 21:36:22 +02:00
Arlind
bdad6a20e2 [ci skip] push back from pipeline 2025-10-03 19:31:56 +00:00
Arlind
814bce4ea9 Update .gitattributes from skins-template 2025-10-03 21:31:19 +02:00
Arlind
72aaf645ec Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 23s
2025-10-03 21:31:18 +02:00
Skellers
cc2c9d192a [ci skip] push back from pipeline 2025-10-01 16:09:02 +00:00
Your Name
190118158b Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 19s
2025-10-01 18:08:41 +02:00
Arlind
84f2450201 [ci skip] push back from pipeline 2025-10-01 15:47:32 +00:00
Arlind
9fcb384e7f Update .gitea/workflows/skins.json
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 18s
2025-10-01 17:47:13 +02:00
Your Name
412f5c5eaf Updating skins
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Failing after 8s
2025-10-01 16:52:12 +02:00
Skellers
be3ba58abc [ci skip] push back from pipeline 2025-10-01 14:47:28 +00:00
Your Name
0cc3d1c1f8 Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 1m39s
2025-10-01 16:45:46 +02:00
Skellers
a682316d64 [ci skip] push back from pipeline 2025-10-01 14:41:36 +00:00
Your Name
6bfc5e3999 Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 1m44s
2025-10-01 16:39:49 +02:00
Skellers
5918b94737 [ci skip] push back from pipeline 2025-10-01 13:57:46 +00:00
Your Name
a45f34c2ec Adding skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 48s
2025-10-01 15:56:49 +02:00
Arlind
6ad5a14fe3 [ci skip] push back from pipeline 2025-10-01 13:38:45 +00:00
Arlind
19a1b16cdc Update .gitattributes from skins-template 2025-10-01 15:36:00 +02:00
Arlind
dcdeef37f7 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 19s
2025-10-01 15:36:00 +02:00
Arlind
b4671786e6 Update .gitattributes from skins-template 2025-09-30 23:13:06 +02:00
Arlind
713a389d7c Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 16s
2025-09-30 23:13:05 +02:00
Arlind
1668c2d478 [ci skip] push back from pipeline 2025-09-30 20:56:36 +00:00
Arlind
252d106ae7 Update .gitattributes from skins-template 2025-09-30 22:56:03 +02:00
Arlind
b61fc2600d Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 15s
2025-09-30 22:56:03 +02:00
bb956195ef [ci skip] push back from pipeline 2025-09-28 12:15:48 +00:00
7a969982a0 [ci skip] push back from pipeline 2025-09-28 12:11:56 +00:00
9279d464b4 regenerate repo 2025-09-28 13:50:37 +02:00
e02c9c0051 [ci skip] push back from pipeline 2025-09-28 11:45:58 +00:00
Arlind
d06e78bb5e Update .gitea/workflows/ci.yml
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 4m21s
2025-09-28 13:41:38 +02:00
Your Name
b6bd53e365 Updating skins 2025-09-28 12:22:22 +02:00
Skellers
b4cb1def20 Adding skins 2025-09-28 12:09:24 +02:00
Arlind
5e56a7c9d3 Update .gitattributes from skins-template 2025-09-17 00:19:09 +02:00
Arlind
0200daf4ba Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 12s
2025-09-17 00:19:09 +02:00
deccc9286c [ci skip] push back from pipeline 2025-08-13 21:36:07 +00:00
210cfc31bc resetting repo 2025-08-13 22:59:45 +02:00
Skellers
1694bbe069 Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 4m58s
2025-08-08 23:19:29 +02:00
69ce4fc2ba [ci skip] push back from pipeline 2025-07-18 19:27:57 +00:00
Skellers
55fc8d9615 Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 36s
2025-07-18 21:27:18 +02:00
aa35247e3c [ci skip] push back from pipeline 2025-07-18 19:23:35 +00:00
Skellers
cc89e9cc0c Updating skins
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 6m11s
2025-07-18 21:17:23 +02:00
Skellers
f6d66c5187 Updating skins
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Has been cancelled
2025-07-18 21:16:22 +02:00
Skellers
0010d498fe Adding skins 2025-07-18 21:11:20 +02:00
Arlind
f965de92f9 Update .gitattributes from skins-template 2025-07-04 17:00:28 +02:00
Arlind
b93660c55c Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 18s
2025-07-04 17:00:28 +02:00
Arlind
219767d5da Update .gitattributes from skins-template 2025-07-04 16:13:39 +02:00
Arlind
9ef18a2166 Update CI from skins-template 2025-07-04 16:13:38 +02:00
9afc66ba6f [ci skip] push back from pipeline 2025-07-04 13:45:39 +00:00
Arlind
0a81d826fd Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 15s
2025-07-04 15:45:13 +02:00
8a52b10b3b [ci skip] push back from pipeline 2025-06-30 10:55:54 +00:00
Arlind
694e107ccb Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 12s
2025-06-30 12:55:28 +02:00
Arlind
7fe8d8ab33 Update CI from skins-template 2025-06-27 12:04:34 +02:00
4cb132ed6a [ci skip] push back from pipeline 2025-06-27 09:55:56 +00:00
Arlind
36284d3844 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 11s
2025-06-27 11:55:34 +02:00
c7d5f77bfb [ci skip] push back from pipeline 2025-06-27 08:55:41 +00:00
Arlind
92cee21e31 Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 11s
2025-06-27 10:55:13 +02:00
Arlind
9360371cb8 Update CI from skins-template
Some checks failed
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Failing after 34s
2025-06-27 10:42:45 +02:00
ce18767d73 [ci skip] push back from pipeline 2025-06-25 10:58:30 +00:00
Arlind
eebfd8294f Update CI from skins-template
All checks were successful
Generate Skin previews, OSK files and per skin documentation / Full CI/CD Pipeline (push) Successful in 24s
2025-06-25 12:57:53 +02:00
9b657f1b40 [ci skip] push back from pipeline 2025-06-25 10:39:10 +00:00
Arlind
921ef5ab59 Update CI from skins-template
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 23s
2025-06-25 12:38:36 +02:00
9c98c0d583 [ci skip] push back from pipeline 2025-06-22 09:18:28 +00:00
c235c5eef4 [ci skip] push back from pipeline 2025-06-20 11:14:49 +00:00
Arlind
96a17f1082 Update CI from skins-template
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 3m51s
2025-06-20 13:10:50 +02:00
Arlind
876360c732 Update CI from skins-template 2025-06-20 12:33:22 +02:00
840cc4feb7 [ci skip] push back from pipeline 2025-06-19 09:09:06 +00:00
Arlind
55794c5b71 Update CI from skins-template 2025-06-18 20:08:44 +02:00
6a48dc31db [ci skip] push back from pipeline 2025-06-18 18:08:31 +00:00
1753e63028 handle skin.ini name better
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 13s
2025-06-18 20:08:17 +02:00
Arlind
eaf87258d4 Update CI from skins-template 2025-06-18 19:49:10 +02:00
de47f6a2be [ci skip] push back from pipeline 2025-06-18 17:48:10 +00:00
5e52d79ffa Add author
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 14s
2025-06-18 19:47:53 +02:00
12b43274a0 [ci skip] push back from pipeline 2025-06-18 17:34:46 +00:00
7d4656aec2 remove debug
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 3m46s
2025-06-18 19:30:59 +02:00
26348c0680 [ci skip] push back from pipeline 2025-06-18 17:28:08 +00:00
d0f42a4224 yeah i have no idea
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 14s
2025-06-18 19:27:49 +02:00
cfe27ac7c1 never error on empty description
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 10s
2025-06-18 19:23:02 +02:00
adc9c6a738 use plain list
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 10s
2025-06-18 19:18:22 +02:00
5f0141495c add debug for skins.json
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 10s
2025-06-18 19:13:32 +02:00
8c083f0ea4 [ci skip] push back from pipeline 2025-06-18 17:05:41 +00:00
Arlind
0d1fe58807 Update .gitea/workflows/skins.json
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 3m25s
2025-06-18 19:02:19 +02:00
Arlind
2ef2c4c81a Update .gitea/workflows/skins.json
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 3m16s
2025-06-18 18:35:42 +02:00
Skellers
f4dcfa3e18 Updating skins
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 3m20s
2025-06-18 17:50:08 +02:00
Arlind
a9f89c6548 Update CI from skins-template 2025-06-17 16:34:44 +02:00
ac2d807a2d [ci skip] push back from pipeline 2025-06-17 14:33:31 +00:00
97b1dfb561 [ci skip] push back from pipeline 2025-06-17 14:32:30 +00:00
Arlind
5757ae421c Update .gitea/workflows/ci.yml
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 11s
2025-06-17 16:32:19 +02:00
05a7800d53 [ci skip] push back from pipeline 2025-06-17 14:13:13 +00:00
c7808a3702 [ci skip] push back from pipeline 2025-06-17 14:01:19 +00:00
Arlind
58a41a90b8 Update README.md 2025-06-17 16:01:01 +02:00
Arlind
f3637f75c4 Update CI from skins-template 2025-06-17 15:47:18 +02:00
Arlind
0dc6550187 Update .gitea/workflows/ci.yml
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Has been cancelled
2025-06-17 15:43:20 +02:00
Skellers
6f76319de7 Updating skins
Some checks failed
CI/CD Pipeline / Full CI/CD Pipeline (push) Failing after 34s
2025-06-17 15:02:34 +02:00
Skellers
38e34826b8 Updating skins 2025-06-17 14:53:20 +02:00
ad7250d7d3 [ci skip] push back from pipeline 2025-06-06 10:56:51 +00:00
a1af42b154 Fix paths and edit hardlink skin
All checks were successful
CI/CD Pipeline / Full CI/CD Pipeline (push) Successful in 3m46s
2025-06-06 12:53:02 +02:00
Skellers
3679b05366 Adding skins 2025-06-06 12:22:05 +02:00
26268 changed files with 79159 additions and 3409 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

46
.gitattributes vendored
View File

@@ -1,15 +1,33 @@
*.db filter=lfs diff=lfs merge=lfs -text *.db filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text *.exe filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text *.gif filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text *.JPG filter=lfs diff=lfs merge=lfs -text
*.PNG filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text *.PNG filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text *.pnG filter=lfs diff=lfs merge=lfs -text
*.osk filter=lfs diff=lfs merge=lfs -text *.jpeg filter=lfs diff=lfs merge=lfs -text
*.osr filter=lfs diff=lfs merge=lfs -text *.webp filter=lfs diff=lfs merge=lfs -text
*.osz filter=lfs diff=lfs merge=lfs -text *.psd filter=lfs diff=lfs merge=lfs -text
*.xcf filter=lfs diff=lfs merge=lfs -text
*.pxr filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.WAV filter=lfs diff=lfs merge=lfs -text
*.wav123321321 filter=lfs diff=lfs merge=lfs -text
*.sfk filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.lnk filter=lfs diff=lfs merge=lfs -text
*.pk filter=lfs diff=lfs merge=lfs -text
*.fig filter=lfs diff=lfs merge=lfs -text
*.fds filter=lfs diff=lfs merge=lfs -text
*.pdn filter=lfs diff=lfs merge=lfs -text
*.osk filter=lfs diff=lfs merge=lfs -text
*.osr filter=lfs diff=lfs merge=lfs -text
*.osz filter=lfs diff=lfs merge=lfs -text
*.pack filter=lfs diff=lfs merge=lfs -text *.pack filter=lfs diff=lfs merge=lfs -text
*.pdn filter=lfs diff=lfs merge=lfs -text *.mp4 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.WAV filter=lfs diff=lfs merge=lfs -text

View File

@@ -1,4 +1,4 @@
name: CI/CD Pipeline name: Generate Skin previews, OSK files and per skin documentation
on: on:
push: push:
@@ -12,884 +12,112 @@ on:
required: false required: false
default: 'false' default: 'false'
target_skins: target_skins:
description: 'Comma-separated list of skin folder names to rebuild (e.g., "Skin1,Skin2")' description: >
JSON array of skins to rebuild.
If a skin name contains a single quote ('), escape it for Bash.
Raw: ["Beyond Journey's End"]
Escaped: ["Beyond Journey'\''s End"]
Example: '[\"skin1\", \"skin2\"]'
required: false required: false
default: '' default: ''
env: env:
DANSER_PATH: "/app/danser/danser-cli"
DANSER_DIR: "/app/danser" DANSER_DIR: "/app/danser"
DANSER_VIDEO_DIR: "/app/danser/videos" DANSER_VIDEO_DIR: "/app/danser/videos"
DANSER_SCREENSHOT_DIR: "/app/danser/screenshots" DANSER_SCREENSHOT_DIR: "/app/danser/screenshots"
SKINS_DIR: "${{ github.workspace }}/Skins" SKINS_DIR: "${{ github.workspace }}/Skins"
DANSER_SKINS_DIR: "/app/danser/skins" DANSER_SKINS_DIR: "/app/danser/skins"
DEFAULT_SKIN_DIR: "${{ github.workspace }}/src/default-skin" DEFAULT_SKIN_DIR: "/app/danser/skins/default-skin"
REPO_SCREENSHOT_DIR: "${{ github.workspace }}/media/gameplay" REPO_SCREENSHOT_DIR: "${{ github.workspace }}/media/gameplay"
REPO_MOD_ICONS_DIR: "${{ github.workspace }}/media/icons" REPO_MOD_ICONS_DIR: "${{ github.workspace }}/media/icons"
REPO_RANKING_PANEL_DIR: "${{ github.workspace }}/media/panel" REPO_RANKING_PANEL_DIR: "${{ github.workspace }}/media/panel"
REPO_THUMBNAIL_DIR: "${{ github.workspace }}/media/thumbnail" REPO_THUMBNAIL_DIR: "${{ github.workspace }}/media/thumbnail"
SETTINGS_JSON_PATH: "/app/danser/settings/default.json"
README_PATH: "${{ github.workspace }}/README.md" README_PATH: "${{ github.workspace }}/README.md"
REPLAY_PATH: "${{ github.workspace }}/src/replay.osr" GAMEPLAY_REPLAY_PATH: "/app/danser/custom-replays/yomi_yori.osr"
THUMBNAIL_REPLAY_PATH: "/app/danser/custom-replays/combo_colors.osr"
PANEL_REPLAY_PATH: "/app/danser/custom-replays/2000_gekis.osr"
OSK_PATH: "${{ github.workspace }}/export" OSK_PATH: "${{ github.workspace }}/export"
IMAGE_NAME: osc/skins-image IMAGE_NAME: osc/skins-image
REGISTRY_URL: "https://${{ vars.CONTAINER_REGISTRY }}" REGISTRY_URL: "https://${{ vars.CONTAINER_REGISTRY }}"
OSU_ID: ${{ vars.OSUID }} OSU_ID: ${{ vars.OSUID }}
DOC_DIR: "${{ github.workspace }}/docs" DOC_DIR: "${{ github.workspace }}/docs"
permissions:
contents: write
jobs: jobs:
generate_everything: generate_everything:
name: Full CI/CD Pipeline name: Full CI/CD Pipeline
runs-on: ubuntu-latest runs-on: danser
container: container:
image: ${{ vars.CONTAINER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest image: ${{ vars.CONTAINER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest
options: >- options: >-
--gpus all --gpus all
--privileged --privileged
--security-opt seccomp=unconfined
--security-opt apparmor=unconfined
--cap-add=ALL
--env NVIDIA_DRIVER_CAPABILITIES=all --env NVIDIA_DRIVER_CAPABILITIES=all
--env NVIDIA_VISIBLE_DEVICES=all --env NVIDIA_VISIBLE_DEVICES=all
--user 0:0
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
tags: true token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.TOKEN }}
- name: Discover and Detect Skins
- name: Discover all skins id: discover
shell: bash uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/discover-skins@main
run: | with:
echo "Discovering all skins in $SKINS_DIR…" force_rebuild: ${{ github.event.inputs.force_rebuild }}
mapfile -t skins < <( target_skins: ${{ github.event.inputs.target_skins }}
find "$SKINS_DIR" -mindepth 1 -maxdepth 1 -type d \
| sed 's|'"$SKINS_DIR"'/||' - name: Pull Git LFS
) uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/pull-lfs@main
{ with:
echo 'ALL_SKINS_DIR<<EOF' changed_skins_file: ${{ steps.discover.outputs.changed_skins_file }}
for s in "${skins[@]}"; do
echo "$s" - name: Prepare Assets
done id: prepare
echo 'EOF' uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/prepare-assets@main
} >> "$GITHUB_ENV" with:
echo "→ ALL_SKINS_DIR set (newline-delimited list)" all_skins: ${{ steps.discover.outputs.all_skins }}
- name: Detect Changed Skin Directories - name: Create Tag
shell: bash id: tag
run: | uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/create-tag@main
echo "[Detect Changed Skin Directories Started]"
- name: Generate Previews
readarray -t all_skins <<< "$ALL_SKINS_DIR" uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/generate-previews@main
with:
force_rebuild="${{ github.event.inputs.force_rebuild }}" changed_skins_file: ${{ steps.discover.outputs.changed_skins_file }}
target_skins="${{ github.event.inputs.target_skins }}"
skins=() - name: Generate Mod Icons and Convert Images
deleted_skins=() uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/generate-icons@main
with:
echo "→ Force rebuild flag: $force_rebuild" changed_skins_file: ${{ steps.discover.outputs.changed_skins_file }}
echo "→ Target skins input: $target_skins"
- name: Generate OSK
if [[ "$force_rebuild" == "true" ]]; then uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/generate-osk@main
echo "→ Force rebuild is enabled. Using ALL_SKINS_DIR for full list…" with:
skins=("${all_skins[@]}") changed_skins_file: ${{ steps.discover.outputs.changed_skins_file }}
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
- name: Generate Documentation
elif [[ -n "$target_skins" ]]; then uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/generate-docs@main
echo "→ Target skins specified. Using target_skins input…" with:
IFS=',' read -r -a input_skins <<< "$target_skins" new_tag: ${{ steps.tag.outputs.new_tag }}
for s in "${input_skins[@]}"; do readme_path: ${{ env.README_PATH }}
s="${s#"${s%%[![:space:]]*}"}" # trim leading whitespace doc_dir: ${{ env.DOC_DIR }}
s="${s%"${s##*[![:space:]]}"}" # trim trailing whitespace user_repository: ${{ steps.prepare.outputs.user_repository }}
[[ -n "$s" ]] && skins+=("$s")
done - name: Cleanup Files
echo " ✓ Found ${#skins[@]} skin(s) from target_skins input" uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/cleanup@main
with:
else all_skins: ${{ steps.discover.outputs.all_skins }}
echo "→ No rebuild flags set. Finding latest git tag..."
latest_tag=$(git tag --sort=-creatordate | head -n 1 || true) - name: Commit and Push
uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/git-commit-push@main
if [[ -n "$latest_tag" ]]; then with:
echo "→ Latest tag found: $latest_tag" new_tag: ${{ steps.tag.outputs.new_tag }}
echo "→ Finding added/modified skins since $latest_tag…"
- name: Test links
mapfile -t skins < <( uses: ${{ env.REGISTRY_URL}}/osc/reusable-actions/.gitea/actions/test-links@main
git diff --name-only -z --diff-filter=AM "$latest_tag" HEAD \ with:
| while IFS= read -r -d '' file; do user_repository: ${{ steps.prepare.outputs.user_repository }}
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
done
)
echo " ✓ Found ${#skins[@]} added/modified skins"
echo "→ Finding deleted skins since $latest_tag…"
mapfile -t deleted_skins < <(
git diff --name-only -z --diff-filter=D "$latest_tag" HEAD \
| while IFS= read -r -d '' file; do
[[ $file == Skins/* ]] && echo "${file#Skins/}" | cut -d/ -f1
done
)
if [ "${#deleted_skins[@]}" -gt 0 ]; then
for d in "${deleted_skins[@]}"; do
echo "→ Skin '$d' was deleted"
done
else
echo " ✓ No skins deleted"
fi
else
echo "→ No tag found. Falling back to ALL_SKINS_DIR for full list…"
skins=("${all_skins[@]}")
echo " ✓ Found ${#skins[@]} skin directories (from ALL_SKINS_DIR)"
fi
fi
echo ""
echo "[Cleaning Skin Names]"
uniq_skins=()
for skin in "${skins[@]}"; do
skin="${skin#"${skin%%[![:space:]]*}"}"
skin="${skin%"${skin##*[![:space:]]}"}"
[[ -n "$skin" ]] && uniq_skins+=("$skin")
done
echo " ✓ ${#uniq_skins[@]} valid skin names after cleaning"
echo ""
if [ "${#uniq_skins[@]}" -eq 0 ]; then
echo "→ No added/modified skins detected."
echo "CHANGED_SKINS_FILE=" >> "$GITHUB_ENV"
else
echo "[Writing Changed Skins to File]"
changed_skins_file=$(mktemp)
printf "%s\n" "${uniq_skins[@]}" > "$changed_skins_file"
echo " ✓ Skins written to $changed_skins_file"
echo "CHANGED_SKINS_FILE=$changed_skins_file" >> "$GITHUB_ENV"
fi
echo ""
echo "[Detect Changed Skin Directories Complete — ${#uniq_skins[@]} skins processed, ${#deleted_skins[@]} skins deleted]"
- name: Pull Git LFS objects for changed skins (and core assets)
shell: bash
run: |
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping git pull lfs."
exit 0
fi
includes="src/**,export/**,media/**"
skin_includes=$(
while IFS= read -r skin; do
esc=$(printf '%s' "$skin" \
| sed -e 's/\[/\\[/g' -e 's/\]/\\]/g')
printf 'Skins/%s/**\n' "$esc"
done < "$CHANGED_SKINS_FILE" \
| paste -sd ','
)
includes="$includes,$skin_includes"
echo "→ Pulling LFS objects for patterns: $includes"
git lfs pull --include="$includes"
- name: Extract Repository path
shell: bash
run: |
echo "Extracting repository path..."
USER_REPOSITORY="${{ github.workspace }}"
USER_REPOSITORY="${USER_REPOSITORY#/workspace/}"
USER_REPOSITORY="${USER_REPOSITORY%/}"
echo "Repository path extracted: $USER_REPOSITORY"
echo "USER_REPOSITORY=$USER_REPOSITORY" >> $GITHUB_ENV
- name: Set XDG_RUNTIME_DIR
shell: bash
run: |
echo "Setting XDG_RUNTIME_DIR..."
mkdir -p /tmp/xdg_runtime_dir
chmod 0700 /tmp/xdg_runtime_dir
echo "XDG_RUNTIME_DIR=/tmp/xdg_runtime_dir" >> "$GITHUB_ENV"
echo "XDG_RUNTIME_DIR set."
- name: Create directories for assets
shell: bash
run: |
echo "Creating base directories for assets..."
mkdir -p "$REPO_SCREENSHOT_DIR" "$REPO_MOD_ICONS_DIR" "$REPO_RANKING_PANEL_DIR" "$OSK_PATH" "$REPO_THUMBNAIL_DIR"
readarray -t skins <<< "$ALL_SKINS_DIR"
for skin in "${skins[@]}"; do
echo " → Creating subdirs for '$skin'…"
mkdir -p \
"$REPO_SCREENSHOT_DIR/$skin" \
"$REPO_MOD_ICONS_DIR/$skin" \
"$REPO_RANKING_PANEL_DIR/$skin" \
"$OSK_PATH/$skin" \
"$REPO_THUMBNAIL_DIR/$skin"
done
echo "All asset directories created for ${#skins[@]} skins."
- name: Create New Tag
shell: bash
run: |
echo "Computing new tag..."
latest_tag=$(git describe --tags $(git rev-list --tags --max-count=1) 2>/dev/null || echo "")
if [ -z "$latest_tag" ]; then
new_tag="v1.0.0"
else
IFS='.' read -r major minor patch <<< "${latest_tag#v}"
minor=$((minor + 1))
patch=0
new_tag="v${major}.${minor}.${patch}"
fi
echo "new_tag=$new_tag" >> $GITHUB_ENV
echo "Computed new tag: $new_tag"
- name: Move Skin files to Danser Skins directory
shell: bash
run: |
echo "Moving Skin files to Danser Skins directory..."
mkdir -p "$DANSER_SKINS_DIR"
mv "$SKINS_DIR"/* "$DANSER_SKINS_DIR"
echo "Skin files moved."
- name: Generate Danser videos and screenshots
shell: bash
run: |
echo "[Danser Job Started]"
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping generation."
exit 0
fi
mapfile -t skins < "$CHANGED_SKINS_FILE"
[ "${#skins[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; }
SKIN_COUNT=${#skins[@]}
INDEX=1
for skin_path in "${skins[@]}"; do
[ -z "$skin_path" ] && continue
SKIN_DIR="$DANSER_SKINS_DIR/$skin_path"
[ ! -d "$SKIN_DIR" ] && { echo "Skipping missing skin: $skin_path"; continue; }
SKIN_NAME="$skin_path"
OUT_VIDEO_DIR="$REPO_SCREENSHOT_DIR/$SKIN_NAME"
OUT_PNG_DIR="$REPO_RANKING_PANEL_DIR/$SKIN_NAME"
OUT_THUMBNAIL_DIR="$REPO_THUMBNAIL_DIR/$SKIN_NAME"
echo ""
echo "[$INDEX/$SKIN_COUNT] Generating for skin: $SKIN_NAME"
LOGFILE="/tmp/danser_log_$INDEX.txt"
echo " → Generating video..."
if ! xvfb-run -a "$DANSER_DIR/danser-cli" \
-replay "$REPLAY_PATH" -record -skip -start=215 -end=230 -noupdatecheck \
-out="$SKIN_NAME" -skin="$SKIN_NAME" >"$LOGFILE" 2>&1; then
echo " ✖ Video failed for $SKIN_NAME"; cat "$LOGFILE"; INDEX=$((INDEX+1)); continue
fi
if [ -f "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4" ]; then
echo " → Trimming MP4 with ffmpeg..."
ffmpeg -hide_banner -loglevel error \
-i "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4" \
-ss 5 -t 10 \
-c:v h264_nvenc -preset fast -c:a aac -b:a 128k \
"$DANSER_VIDEO_DIR/${SKIN_NAME}_trimmed.mp4"
if [ -f "$DANSER_VIDEO_DIR/${SKIN_NAME}_trimmed.mp4" ]; then
mv "$DANSER_VIDEO_DIR/${SKIN_NAME}_trimmed.mp4" "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4"
mkdir -p "$OUT_VIDEO_DIR"
mv "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4" "$OUT_VIDEO_DIR/$SKIN_NAME.mp4"
echo " ✓ Trimmed MP4 moved to $OUT_VIDEO_DIR/"
else
echo " ✖ ffmpeg trimming failed for $SKIN_NAME"
fi
else
echo " ✖ No MP4 found for $SKIN_NAME"
fi
echo " → Taking screenshot..."
if ! xvfb-run -a "$DANSER_DIR/danser-cli" \
-replay "$REPLAY_PATH" -skip -noupdatecheck -ss 243 \
-out="$SKIN_NAME" -skin="$SKIN_NAME" >>"$LOGFILE" 2>&1; then
echo " ✖ Screenshot failed for $SKIN_NAME"; cat "$LOGFILE"; INDEX=$((INDEX+1)); continue
fi
if [ -f "$DANSER_SCREENSHOT_DIR/$SKIN_NAME.png" ]; then
mkdir -p "$OUT_PNG_DIR"
mv "$DANSER_SCREENSHOT_DIR/$SKIN_NAME.png" "$OUT_PNG_DIR/$SKIN_NAME.png"
echo " ✓ PNG moved to $OUT_PNG_DIR/"
else
echo " ✖ No PNG found for $SKIN_NAME"
fi
echo " → Taking thumbnail screenshot..."
if ! xvfb-run -a "$DANSER_DIR/danser-cli" \
-replay "$REPLAY_PATH" -skip -noupdatecheck -ss 220 \
-out="${SKIN_NAME}_thumb" -skin="$SKIN_NAME" >>"$LOGFILE" 2>&1; then
echo " ✖ Thumbnail screenshot failed for $SKIN_NAME"; cat "$LOGFILE"; INDEX=$((INDEX+1)); continue
fi
if [ -f "$DANSER_SCREENSHOT_DIR/${SKIN_NAME}_thumb.png" ]; then
mkdir -p "$OUT_THUMBNAIL_DIR"
mv "$DANSER_SCREENSHOT_DIR/${SKIN_NAME}_thumb.png" "$OUT_THUMBNAIL_DIR/$SKIN_NAME.png"
echo " ✓ Thumbnail PNG moved to $OUT_THUMBNAIL_DIR/"
else
echo " ✖ No thumbnail PNG found for $SKIN_NAME"
fi
INDEX=$((INDEX + 1))
done
echo ""
echo "[Danser Job Finished — processed $SKIN_COUNT skins]"
- name: Rename Generated Assets Based on skin.ini
shell: bash
run: |
echo "[Asset Renaming Job Started]"
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping asset renaming."
exit 0
fi
mapfile -t skins < "$CHANGED_SKINS_FILE"
[ "${#skins[@]}" -eq 0 ] && { echo "No skins to rename. Exiting."; exit 0; }
SKIN_COUNT=${#skins[@]}
INDEX=1
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
for skin_path in "${skins[@]}"; do
[ -z "$skin_path" ] && continue
SKIN_DIR_NAME="$skin_path"
SKIN_DIR="$DANSER_SKINS_DIR/$skin_path"
if [ ! -d "$SKIN_DIR" ]; then
echo "Skipping missing skin directory: $SKIN_DIR"
continue
fi
echo "Processing skin $INDEX/$SKIN_COUNT: $SKIN_DIR_NAME"
skin_header="$SKIN_DIR_NAME"
ini_file=$(find "$SKIN_DIR" -maxdepth 1 -iname "skin.ini" | head -n1 || true)
if [ -f "$ini_file" ]; then
name_line=$(grep -i '^[[:space:]]*Name:' "$ini_file" | head -n1 || true)
if [ -n "$name_line" ]; then
val="${name_line#*:}"
val="$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
sanitized="$(sanitize_filename "$val")"
[ -n "$sanitized" ] && skin_header="$sanitized"
fi
fi
VIDEO_DIR="$REPO_SCREENSHOT_DIR/$SKIN_DIR_NAME"
PNG_DIR="$REPO_RANKING_PANEL_DIR/$SKIN_DIR_NAME"
THUMBNAIL_DIR="$REPO_THUMBNAIL_DIR/$SKIN_DIR_NAME"
if [ -f "$VIDEO_DIR/$SKIN_DIR_NAME.mp4" ] && [ "$SKIN_DIR_NAME" != "$skin_header" ]; then
mv -f "$VIDEO_DIR/$SKIN_DIR_NAME.mp4" \
"$VIDEO_DIR/$skin_header.mp4" || true
echo " ✓ Renamed MP4 to $VIDEO_DIR/$skin_header.mp4"
fi
if [ -f "$PNG_DIR/$SKIN_DIR_NAME.png" ] && [ "$SKIN_DIR_NAME" != "$skin_header" ]; then
mv -f "$PNG_DIR/$SKIN_DIR_NAME.png" \
"$PNG_DIR/$skin_header.png" || true
echo " ✓ Renamed PNG to $PNG_DIR/$skin_header.png"
fi
if [ -f "$THUMBNAIL_DIR/$SKIN_DIR_NAME.png" ] && [ "$SKIN_DIR_NAME" != "$skin_header" ]; then
mv -f "$THUMBNAIL_DIR/$SKIN_DIR_NAME.png" \
"$THUMBNAIL_DIR/$skin_header.png" || true
echo " ✓ Renamed thumbnail to $THUMBNAIL_DIR/$skin_header.png"
fi
INDEX=$((INDEX + 1))
done
echo ""
echo "[Asset Renaming Complete — processed $SKIN_COUNT skins]"
- name: Generate Mod Icons (WEBP)
shell: bash
run: |
echo "[Mod Icon Generation Job Started]"
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping mod icon generation."
exit 0
fi
mapfile -t skin_dirs < "$CHANGED_SKINS_FILE"
[ "${#skin_dirs[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; }
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
ICONS_JSON_FILE="${{ github.workspace }}/.gitea/workflows/icons.json"
group1_icons=$(jq -r '.group1 | join(" ")' "$ICONS_JSON_FILE")
group2_icons=$(jq -r '.group2 | join(" ")' "$ICONS_JSON_FILE")
group3_icons=$(jq -r '.group3 | join(" ")' "$ICONS_JSON_FILE")
BLANK_IMAGE="blank.png"
magick -size "160x160" xc:none "$BLANK_IMAGE"
SKIN_COUNT=${#skin_dirs[@]}
INDEX=1
for skin_path in "${skin_dirs[@]}"; do
SKIN_DIR="$DANSER_SKINS_DIR/$skin_path"
[ ! -d "$SKIN_DIR" ] && { echo "Skipping missing skin directory: $SKIN_DIR"; ((INDEX++)); continue; }
skin_header="$skin_path"
ini_file=$(find "$SKIN_DIR" -maxdepth 1 -iname "skin.ini" | head -n1 || true)
if [ -f "$ini_file" ]; then
name_line=$(grep -i '^[[:space:]]*Name:' "$ini_file" | head -n1 || true)
if [ -n "$name_line" ]; then
val="${name_line#*:}"
val="$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
sanitized="$(sanitize_filename "$val")"
[ -n "$sanitized" ] && skin_header="$sanitized"
fi
fi
echo ""
echo "[$INDEX/$SKIN_COUNT] Skin: $skin_header"
ICON_FOLDER="$SKIN_DIR"
OUTPUT_DIR="$REPO_MOD_ICONS_DIR/$skin_path"
mkdir -p "$OUTPUT_DIR"
OUTPUT="$OUTPUT_DIR/${skin_header}-mod-icons.webp"
row_images=()
row_index=1
for group_list in "$group1_icons" "$group2_icons" "$group3_icons"; do
montage_files=()
for icon in $group_list; do
if [ -f "${ICON_FOLDER}/selection-mod-${icon}@2x.png" ]; then
montage_files+=("${ICON_FOLDER}/selection-mod-${icon}@2x.png")
elif [ -f "${DEFAULT_SKIN_DIR}/selection-mod-${icon}@2x.png" ]; then
montage_files+=("${DEFAULT_SKIN_DIR}/selection-mod-${icon}@2x.png")
fi
done
while [ "${#montage_files[@]}" -lt 7 ]; do
montage_files+=("$BLANK_IMAGE")
done
magick montage "${montage_files[@]}" \
-tile "7x1" -geometry "160x160+10+10" -background none \
"row_${row_index}.png"
row_images+=("row_${row_index}.png")
row_index=$((row_index + 1))
done
magick montage "${row_images[@]}" \
-tile "1x${#row_images[@]}" -geometry "+10+10" -background none \
"temp_combined.png"
magick "temp_combined.png" -define webp:lossless=true "$OUTPUT"
rm temp_combined.png row_*.png
echo " ✓ Mod Icons Generated at $OUTPUT"
INDEX=$((INDEX + 1))
done
rm "$BLANK_IMAGE"
echo ""
echo "[Mod Icon Generation Finished — processed $SKIN_COUNT skins]"
- name: Convert PNGs to WEBPs
shell: bash
run: |
echo "[Convert PNG → WEBP Started]"
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping conversion."
exit 0
fi
mapfile -t skins < "$CHANGED_SKINS_FILE"
[ "${#skins[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; }
convert_pngs_to_webp() {
local base_dir="$1"
local skin_path="$2"
local dir="$base_dir/$skin_path"
echo " → Processing: $dir"
[ ! -d "$dir" ] && { echo " ✖ Directory does not exist: $dir"; return; }
find "$dir" -type f -iname "*.png" | while read -r png; do
webp="${png%.png}.webp"
echo " ↳ Converting: $png → $webp"
magick "$png" -define webp:lossless=false -quality 90 "$webp" && rm -f "$png"
done
}
for skin_path in "${skins[@]}"; do
[ -z "$skin_path" ] && continue
convert_pngs_to_webp "$REPO_RANKING_PANEL_DIR" "$skin_path"
convert_pngs_to_webp "$REPO_THUMBNAIL_DIR" "$skin_path"
done
echo "[Convert PNG → WEBP Finished]"
- name: Create OSK Files
shell: bash
run: |
echo "[OSK Creation Job Started]"
if [ -z "${CHANGED_SKINS_FILE:-}" ] || [ ! -s "$CHANGED_SKINS_FILE" ]; then
echo "No skins changed. Skipping OSK creation."
exit 0
fi
mapfile -t skin_dirs < "$CHANGED_SKINS_FILE"
[ "${#skin_dirs[@]}" -eq 0 ] && { echo "No skins to process. Exiting."; exit 0; }
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
FIXED_TIMESTAMP="2025-01-01 00:00:00"
SKIN_COUNT=${#skin_dirs[@]}
INDEX=1
for skin_path in "${skin_dirs[@]}"; do
SKIN_DIR="$DANSER_SKINS_DIR/$skin_path"
[ ! -d "$SKIN_DIR" ] && { echo "Skipping missing skin directory: $SKIN_DIR"; ((INDEX++)); continue; }
OUTPUT_DIR="$OSK_PATH/$skin_path"
mkdir -p "$OUTPUT_DIR"
skin_header="$skin_path"
ini_file=$(find "$SKIN_DIR" -maxdepth 1 -iname "skin.ini" | head -n1 || true)
if [ -f "$ini_file" ]; then
name_line=$(grep -i '^[[:space:]]*name:' "$ini_file" | head -n1 || true)
if [ -n "$name_line" ]; then
val="${name_line#*:}"
val="$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
sanitized="$(sanitize_filename "$val")"
[ -n "$sanitized" ] && skin_header="$sanitized"
fi
fi
echo ""
echo "[$INDEX/$SKIN_COUNT] Processing skin: $skin_header"
(cd "$SKIN_DIR" && find . -type f -exec touch -d "$FIXED_TIMESTAMP" {} +)
(cd "$SKIN_DIR" && find . -type f | sort | \
zip -rq -D -X -9 --compression-method deflate \
"$OUTPUT_DIR/${skin_header}.osk" -@)
echo " ✓ OSK file created at $OUTPUT_DIR/${skin_header}.osk"
INDEX=$((INDEX + 1))
done
echo ""
echo "[OSK Creation Job Finished — processed $SKIN_COUNT skins]"
- name: Generate README
shell: bash
run: |
echo "Generating README index…"
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
url_encode_path() {
local IFS='/'
local parts=($1)
local encoded=""
for part in "${parts[@]}"; do
[ -n "$encoded" ] && encoded+="/"
encoded+=$(printf '%s' "$part" | jq -sRr @uri)
done
echo "$encoded"
}
SKINS_JSON_FILE="${{ github.workspace }}/.gitea/workflows/skins.json"
DESC_FILE=$(mktemp)
echo "---" > "$README_PATH"
echo "gitea: none" >> "$README_PATH"
echo "include_toc: true" >> "$README_PATH"
echo "---" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "# Skins" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "<!--" >> "$README_PATH"
echo "osuid: $OSU_ID" >> "$README_PATH"
echo "-->" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "**Go back to [osc/skins]($REGISTRY_URL/osc/skins)**" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "**Click on the Skin name to download it, or click on the thumbnail to see more about the skin, including a video preview, screenshots, and mod icons.**" >> "$README_PATH"
echo "" >> "$README_PATH"
jq -r '.descriptions | to_entries[] | "\(.key)=\(.value)"' "$SKINS_JSON_FILE" > "$DESC_FILE"
jq -r '.order[]?' "$SKINS_JSON_FILE" > order.txt
get_desc() {
grep -F -m1 -- "$1=" "$DESC_FILE" 2>/dev/null | cut -d '=' -f2-
}
declare -A ordered
while IFS= read -r skin; do
ordered["$skin"]=1
dir="$DANSER_SKINS_DIR/$skin"
[ ! -d "$dir" ] && continue
ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1)
skin_header="$skin"
if [ -f "$ini_file" ]; then
line=$(grep -i '^[[:space:]]*Name:' "$ini_file" | head -n1)
[ -n "$line" ] && skin_header=$(sanitize_filename "${line#*:}")
fi
raw_path="$(printf "%s/%s" "$skin" "$skin_header" | sed 's/^ *//;s/ *$//')"
base_path=$(url_encode_path "$raw_path")
echo "## [$skin_header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/${base_path}.osk)" >> "$README_PATH"
echo "" >> "$README_PATH"
desc=$(get_desc "$skin")
[ -n "$desc" ] && { echo "$desc" >> "$README_PATH"; echo "" >> "$README_PATH"; }
echo "[![$skin_header Thumbnail](media/thumbnail/${base_path}.webp)](/docs/${base_path}.md)" >> "$README_PATH"
echo "" >> "$README_PATH"
done < order.txt
echo "Adding extra skins not in order.json..."
for dir in "$DANSER_SKINS_DIR"/*; do
[ -d "$dir" ] || continue
skin=$(basename "$dir")
[[ -n "${ordered[$skin]}" ]] && continue
ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1)
skin_header="$skin"
if [ -f "$ini_file" ]; then
line=$(grep -i '^[[:space:]]*Name:' "$ini_file" | head -n1 2>/dev/null || true)
[ -n "$line" ] && skin_header=$(sanitize_filename "${line#*:}")
fi
raw_path="$(printf "%s/%s" "$skin" "$skin_header" | sed 's/^ *//;s/ *$//')"
base_path=$(url_encode_path "$raw_path")
echo "## [$skin_header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/${base_path}.osk)" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "[![$skin_header Thumbnail](media/thumbnail/${base_path}.webp)](/docs/${base_path}.md)" >> "$README_PATH"
echo "" >> "$README_PATH"
done
echo "# Build History" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "| Version | Date |" >> "$README_PATH"
echo "| ------- | ---- |" >> "$README_PATH"
current_commit_date=$(TZ="Europe/Zurich" date -d "$(git log -1 --format=%cI)" "+%d.%m.%Y %H:%M:%S")
echo "| [\`$new_tag (Current)\`]($REGISTRY_URL/$USER_REPOSITORY/src/tag/$new_tag/README.md) | $current_commit_date |" >> "$README_PATH"
old_tags=$(git tag --sort=-v:refname | grep -v "^$new_tag$" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' || true)
if [ -n "$old_tags" ]; then
echo "$old_tags" | while read -r tag; do
tag_date=$(git log -1 --format=%ci "$tag")
formatted_date=$(TZ="Europe/Zurich" date -d "$tag_date" "+%d.%m.%Y %H:%M:%S")
echo "| [\`$tag\`]($REGISTRY_URL/$USER_REPOSITORY/src/tag/$tag/README.md) | $formatted_date |" >> "$README_PATH"
done
fi
echo "README index generated successfully."
- name: Generate Per-Skin Pages
shell: bash
run: |
echo "Generating detailed per-skin markdown pages…"
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
url_encode_path() {
local IFS='/'
local parts=($1)
local encoded=""
for part in "${parts[@]}"; do
[ -n "$encoded" ] && encoded+="/"
encoded+=$(printf '%s' "$part" | jq -sRr @uri)
done
echo "$encoded"
}
mkdir -p "$DOC_DIR"
for dir in "$DANSER_SKINS_DIR"/*; do
[ -d "$dir" ] || continue
skin=$(basename "$dir")
ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1 || true)
skin_header="$skin"
if [ -f "$ini_file" ]; then
line=$(grep -i '^[[:space:]]*Name:' "$ini_file" | head -n1 || true)
[ -n "$line" ] && skin_header=$(sanitize_filename "${line#*:}")
fi
raw_path="${skin}/${skin_header}"
base_path=$(url_encode_path "$raw_path")
osk_url="$REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/${base_path}.osk"
md_file_path="${DOC_DIR}/${raw_path}.md"
mkdir -p "$(dirname "$md_file_path")"
video_url="$REGISTRY_URL/$USER_REPOSITORY/raw/tag/$new_tag/media/gameplay/${base_path}.mp4"
{
echo "# [$skin_header]($osk_url)"
echo ""
echo "<video controls autoplay loop muted playsinline src=\"$video_url\" type=\"video/mp4\">"
echo "</video>"
echo ""
echo "![](/media/panel/${base_path}.webp)"
echo ""
echo "![](/media/icons/${base_path}-mod-icons.webp)"
} > "$md_file_path"
echo " → Wrote $md_file_path"
done
echo "Per-skin markdown pages complete."
- name: Cleanup Extra Files
shell: bash
run: |
set -euo pipefail
echo "[Cleanup Extra Files Started]"
[ -f how-to-use.md ] && rm -f how-to-use.md
readarray -t skins <<< "$ALL_SKINS_DIR"
sanitize_filename() {
echo "$1" | \
tr -d '\000-\037' | \
sed -e 's#[\\/:\*\?"<>|]#-#g' | \
sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
prune_dir() {
local root="$1"
local skin="$2"
local expected="$3"
for f in "$root"/*; do
[ -f "$f" ] || continue
name="$(basename "$f")"
if printf '%s\n' "${skins[@]}" | grep -Fxq -- "$name"; then
continue
fi
echo " → Removing unexpected root file: $f"
rm -f "$f"
done
dir="$root/$skin"
[ -d "$dir" ] || return
for f in "$dir"/*; do
[ -e "$f" ] || continue
if [[ "$(basename "$f")" != "$expected" ]]; then
echo " → Removing unexpected file: $f"
rm -f "$f"
fi
done
}
for root in "$REPO_SCREENSHOT_DIR" "$REPO_RANKING_PANEL_DIR" "$REPO_MOD_ICONS_DIR" "$REPO_THUMBNAIL_DIR" "$OSK_PATH" "$DOC_DIR"; do
[ -d "$root" ] || continue
for dir in "$root"/*; do
[ -d "$dir" ] || continue
name="$(basename "$dir")"
if ! printf '%s\n' "${skins[@]}" | grep -Fxq -- "$name"; then
echo " → Skin '$name' deleted—removing directory $dir"
rm -rf "$dir"
fi
done
done
for skin in "${skins[@]}"; do
header=$(sanitize_filename "$skin")
ini=$(find "$DANSER_SKINS_DIR/$skin" -maxdepth 1 -type f -iname "skin.ini" -print -quit || true)
if [[ -f "$ini" ]]; then
raw=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1 || true)
raw="${raw#*:}"
tmp_header=$(sanitize_filename "$raw")
[[ -n "$tmp_header" ]] && header="$tmp_header"
fi
prune_dir "$REPO_SCREENSHOT_DIR" "$skin" "$header.mp4"
prune_dir "$REPO_RANKING_PANEL_DIR" "$skin" "$header.webp"
prune_dir "$REPO_MOD_ICONS_DIR" "$skin" "$header-mod-icons.webp"
prune_dir "$REPO_THUMBNAIL_DIR" "$skin" "$header.webp"
prune_dir "$OSK_PATH" "$skin" "$header.osk"
prune_dir "$DOC_DIR" "$skin" "$header.md"
done
echo "[Cleanup Extra Files Complete]"
- name: Configure Git
shell: bash
run: |
git config user.email "arlind@sulej.ch"
git config user.name "ci-bot"
- name: Add and Commit changes
shell: bash
run: |
git config advice.addIgnoredFile false
for p in docs/ media/gameplay media/thumbnail media/panel media/icons export README.md how-to-use.md src; do
if [ -e "$p" ]; then
git add -A "$p"
fi
done
git commit -m "[ci skip] push back from pipeline" -q || echo "No changes to commit"
- name: Push changes and create tag
shell: bash
run: |
if [ "${GITHUB_REF}" = "refs/heads/main" ]; then
git push origin HEAD:main || echo "No changes to push"
git tag "$new_tag"
git push origin "$new_tag"
else
git push origin HEAD:"${GITHUB_REF_NAME}" || echo "No changes to push"
fi

View File

@@ -1,10 +1,24 @@
{ {
"order": [ "order": [
"example1", "stella kii",
"example2" "stellerino 2",
], "rafis_gothic",
"descriptions": { "zadymiarz onymki",
"example1": "Description of example1", "zadymiarz onymki - Copy",
"example2": "Description of example2" "summer pockets (pink)",
} "- ⊹ aia",
"- rafis pinkity edit by henry",
"prezes",
"prezes - Copy",
"prezes - Copy - Copy",
"prezes - Copy (2)",
"prezes - Copy (2) - Copy - Copy",
"hyeok20441610-1",
"boop ts",
"mario+bro+⌞DT⌝",
"- kodama - nogi"
],
"descriptions": {
}
} }

391
README.md
View File

@@ -9,53 +9,410 @@ include_toc: true
osuid: 8040245 osuid: 8040245
--> -->
**Go back to [osc/skins](https://git.sulejmani.xyz/osc/skins)** **Go back to [osc/skins](https://git.sulej.net/osc/skins)**
**Click on the Skin name to download it, or click on the thumbnail to see more about the skin, including a video preview, screenshots, and mod icons.** **Click on the Skin name to download it, or click on the thumbnail to see more about the skin, including a video preview, screenshots, and mod icons.**
## [++scylla funny mix EPIC](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.osk) ## [stella kii](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/stella%20kii/stella%20kii.osk)
[![++scylla funny mix EPIC Thumbnail](media/thumbnail/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.webp)](/docs/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.md) **Author:** ypan kiirochii stellasu
## [no](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/-%20rafis%20pinkity%20edit%20by%20henry/no.osk) [![stella kii Thumbnail](media/thumbnail/stella%20kii/stella%20kii.webp)](/docs/stella%20kii/stella%20kii.md)
## [stellerino](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/stellerino%202/stellerino.osk)
**Author:** stellasu
[![stellerino Thumbnail](media/thumbnail/stellerino%202/stellerino.webp)](/docs/stellerino%202/stellerino.md)
## [Rafis 2018-03-26 HDDT](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/rafis_gothic/Rafis%202018-03-26%20HDDT.osk)
**Author:** DDK RPK
[![Rafis 2018-03-26 HDDT Thumbnail](media/thumbnail/rafis_gothic/Rafis%202018-03-26%20HDDT.webp)](/docs/rafis_gothic/Rafis%202018-03-26%20HDDT.md)
## [_• zadymiarz bandana 1](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/zadymiarz%20onymki/_%E2%80%A2%20zadymiarz%20bandana%201.osk)
[![_• zadymiarz bandana 1 Thumbnail](media/thumbnail/zadymiarz%20onymki/_%E2%80%A2%20zadymiarz%20bandana%201.webp)](/docs/zadymiarz%20onymki/_%E2%80%A2%20zadymiarz%20bandana%201.md)
## [_• zadymiarz bandana 1](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/zadymiarz%20onymki%20-%20Copy/_%E2%80%A2%20zadymiarz%20bandana%201.osk)
[![_• zadymiarz bandana 1 Thumbnail](media/thumbnail/zadymiarz%20onymki%20-%20Copy/_%E2%80%A2%20zadymiarz%20bandana%201.webp)](/docs/zadymiarz%20onymki%20-%20Copy/_%E2%80%A2%20zadymiarz%20bandana%201.md)
## [summer pockets (pink)](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/summer%20pockets%20%28pink%29/summer%20pockets%20%28pink%29.osk)
**Author:** xek
[![summer pockets (pink) Thumbnail](media/thumbnail/summer%20pockets%20%28pink%29/summer%20pockets%20%28pink%29.webp)](/docs/summer%20pockets%20%28pink%29/summer%20pockets%20%28pink%29.md)
## [- ⊹ aia](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20%E2%8A%B9%20aia/-%20%20%20%E2%8A%B9%20aia.osk)
**Author:** sera
[![- ⊹ aia Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia/-%20%20%20%E2%8A%B9%20aia.webp)](/docs/-%20%E2%8A%B9%20aia/-%20%20%20%E2%8A%B9%20aia.md)
## [no](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20rafis%20pinkity%20edit%20by%20henry/no.osk)
**Author:** henry
[![no Thumbnail](media/thumbnail/-%20rafis%20pinkity%20edit%20by%20henry/no.webp)](/docs/-%20rafis%20pinkity%20edit%20by%20henry/no.md) [![no Thumbnail](media/thumbnail/-%20rafis%20pinkity%20edit%20by%20henry/no.webp)](/docs/-%20rafis%20pinkity%20edit%20by%20henry/no.md)
## [- ⊹ aia](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/-%20%E2%8A%B9%20aia%20-%20Copy/-%20%20%20%E2%8A%B9%20aia.osk) ## [prezes](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes/prezes.osk)
[![- ⊹ aia Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%20-%20Copy/-%20%20%20%E2%8A%B9%20aia.webp)](/docs/-%20%E2%8A%B9%20aia%20-%20Copy/-%20%20%20%E2%8A%B9%20aia.md) [![prezes Thumbnail](media/thumbnail/prezes/prezes.webp)](/docs/prezes/prezes.md)
## [Utami (WubWoofWolf)](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/--/Utami%20%28WubWoofWolf%29.osk) ## [prezes red](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes%20-%20Copy/prezes%20red.osk)
[![prezes red Thumbnail](media/thumbnail/prezes%20-%20Copy/prezes%20red.webp)](/docs/prezes%20-%20Copy/prezes%20red.md)
## [prezes blue](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes%20-%20Copy%20-%20Copy/prezes%20blue.osk)
[![prezes blue Thumbnail](media/thumbnail/prezes%20-%20Copy%20-%20Copy/prezes%20blue.webp)](/docs/prezes%20-%20Copy%20-%20Copy/prezes%20blue.md)
## [prezes diff combo numbers](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes%20-%20Copy%20%282%29/prezes%20diff%20combo%20numbers.osk)
[![prezes diff combo numbers Thumbnail](media/thumbnail/prezes%20-%20Copy%20%282%29/prezes%20diff%20combo%20numbers.webp)](/docs/prezes%20-%20Copy%20%282%29/prezes%20diff%20combo%20numbers.md)
## [prezes](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes%20-%20Copy%20%282%29%20-%20Copy%20-%20Copy/prezes.osk)
[![prezes Thumbnail](media/thumbnail/prezes%20-%20Copy%20%282%29%20-%20Copy%20-%20Copy/prezes.webp)](/docs/prezes%20-%20Copy%20%282%29%20-%20Copy%20-%20Copy/prezes.md)
## [Hyeok2044](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/hyeok20441610-1/Hyeok2044.osk)
**Author:** fiery,fancylad,ryuk,alfie,velvet,hyeok2044
[![Hyeok2044 Thumbnail](media/thumbnail/hyeok20441610-1/Hyeok2044.webp)](/docs/hyeok20441610-1/Hyeok2044.md)
## [boop ts](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/boop%20ts/boop%20ts.osk)
**Author:** ieth
[![boop ts Thumbnail](media/thumbnail/boop%20ts/boop%20ts.webp)](/docs/boop%20ts/boop%20ts.md)
## [mario bro ⌞DT⌝](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/mario%2Bbro%2B%E2%8C%9EDT%E2%8C%9D/mario%20bro%20%E2%8C%9EDT%E2%8C%9D.osk)
**Author:** i forgor
[![mario bro ⌞DT⌝ Thumbnail](media/thumbnail/mario%2Bbro%2B%E2%8C%9EDT%E2%8C%9D/mario%20bro%20%E2%8C%9EDT%E2%8C%9D.webp)](/docs/mario%2Bbro%2B%E2%8C%9EDT%E2%8C%9D/mario%20bro%20%E2%8C%9EDT%E2%8C%9D.md)
## [nogi - heterochromia](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20kodama%20-%20nogi/nogi%20-%20heterochromia.osk)
**Author:** kodama
[![nogi - heterochromia Thumbnail](media/thumbnail/-%20kodama%20-%20nogi/nogi%20-%20heterochromia.webp)](/docs/-%20kodama%20-%20nogi/nogi%20-%20heterochromia.md)
## [++scylla funny mix EPIC](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.osk)
[![++scylla funny mix EPIC Thumbnail](media/thumbnail/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.webp)](/docs/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.md)
## [- + morgan spring](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20%2B%20morgan%20spring/-%20%2B%20morgan%20spring.osk)
[![- + morgan spring Thumbnail](media/thumbnail/-%20%2B%20morgan%20spring/-%20%2B%20morgan%20spring.webp)](/docs/-%20%2B%20morgan%20spring/-%20%2B%20morgan%20spring.md)
## [- Seoul v11 Asta Edit](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20Seoul%20v11%20Asta%20Edit/-%20Seoul%20v11%20Asta%20Edit.osk)
**Author:** Seouless
[![- Seoul v11 Asta Edit Thumbnail](media/thumbnail/-%20Seoul%20v11%20Asta%20Edit/-%20Seoul%20v11%20Asta%20Edit.webp)](/docs/-%20Seoul%20v11%20Asta%20Edit/-%20Seoul%20v11%20Asta%20Edit.md)
## [- TekkitoTopoi](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20TekkitoTopoi/-%20TekkitoTopoi.osk)
[![- TekkitoTopoi Thumbnail](media/thumbnail/-%20TekkitoTopoi/-%20TekkitoTopoi.webp)](/docs/-%20TekkitoTopoi/-%20TekkitoTopoi.md)
## [v1i4qqq](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20v1i4qqq/v1i4qqq.osk)
**Author:** osu! skin mixer by rednir
[![v1i4qqq Thumbnail](media/thumbnail/-%20v1i4qqq/v1i4qqq.webp)](/docs/-%20v1i4qqq/v1i4qqq.md)
## [aia edit 1](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20%E2%8A%B9%20aia%201/aia%20edit%201.osk)
**Author:** Skellers
[![aia edit 1 Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%201/aia%20edit%201.webp)](/docs/-%20%E2%8A%B9%20aia%201/aia%20edit%201.md)
## [aia edit 2](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20%E2%8A%B9%20aia%202/aia%20edit%202.osk)
**Author:** Skellers
[![aia edit 2 Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%202/aia%20edit%202.webp)](/docs/-%20%E2%8A%B9%20aia%202/aia%20edit%202.md)
## [aia edit 3](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/-%20%E2%8A%B9%20aia%203/aia%20edit%203.osk)
**Author:** Skellers
[![aia edit 3 Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%203/aia%20edit%203.webp)](/docs/-%20%E2%8A%B9%20aia%203/aia%20edit%203.md)
## [Utami (WubWoofWolf)](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/--/Utami%20%28WubWoofWolf%29.osk)
**Author:** Various Artists
[![Utami (WubWoofWolf) Thumbnail](media/thumbnail/--/Utami%20%28WubWoofWolf%29.webp)](/docs/--/Utami%20%28WubWoofWolf%29.md) [![Utami (WubWoofWolf) Thumbnail](media/thumbnail/--/Utami%20%28WubWoofWolf%29.webp)](/docs/--/Utami%20%28WubWoofWolf%29.md)
## [Aleph DT](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/Aleph%20DT/Aleph%20DT.osk) ## [33](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/7lqdv4/33.osk)
**Author:** osu! skin mixer by rednir
[![33 Thumbnail](media/thumbnail/7lqdv4/33.webp)](/docs/7lqdv4/33.md)
## [Aleph DT](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Aleph%20DT/Aleph%20DT.osk)
**Author:** various
[![Aleph DT Thumbnail](media/thumbnail/Aleph%20DT/Aleph%20DT.webp)](/docs/Aleph%20DT/Aleph%20DT.md) [![Aleph DT Thumbnail](media/thumbnail/Aleph%20DT/Aleph%20DT.webp)](/docs/Aleph%20DT/Aleph%20DT.md)
## [Rafis but SZ](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/Rafis%20but%20SZ/Rafis%20but%20SZ.osk) ## [Aristia(Edit)](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Aristia%28Edit%29%20%2B%20KaBa%20-%20Copy/Aristia%28Edit%29.osk)
**Author:** [Garin] + Aristia + Various
[![Aristia(Edit) Thumbnail](media/thumbnail/Aristia%28Edit%29%20%2B%20KaBa%20-%20Copy/Aristia%28Edit%29.webp)](/docs/Aristia%28Edit%29%20%2B%20KaBa%20-%20Copy/Aristia%28Edit%29.md)
## [Azer+ 2023](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Azer%2B%202023/Azer%2B%202023.osk)
**Author:** Azer, Various others
[![Azer+ 2023 Thumbnail](media/thumbnail/Azer%2B%202023/Azer%2B%202023.webp)](/docs/Azer%2B%202023/Azer%2B%202023.md)
## [tekkito2](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/ELBBANG%20-%20NM3.5%20%28Maliszewski%20x%20SWAGGYSWAGSTER%29/tekkito2.osk)
[![tekkito2 Thumbnail](media/thumbnail/ELBBANG%20-%20NM3.5%20%28Maliszewski%20x%20SWAGGYSWAGSTER%29/tekkito2.webp)](/docs/ELBBANG%20-%20NM3.5%20%28Maliszewski%20x%20SWAGGYSWAGSTER%29/tekkito2.md)
## [Prawilosc vJP without followpoints](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Luciano%20DT/Prawilosc%20vJP%20without%20followpoints.osk)
**Author:** DDK RPK
[![Prawilosc vJP without followpoints Thumbnail](media/thumbnail/Luciano%20DT/Prawilosc%20vJP%20without%20followpoints.webp)](/docs/Luciano%20DT/Prawilosc%20vJP%20without%20followpoints.md)
## [Aristia(Edit (Mistya))](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Luciano%20NM/Aristia%28Edit%20%28Mistya%29%29.osk)
**Author:** [Garin] + Aristia + Various
[![Aristia(Edit (Mistya)) Thumbnail](media/thumbnail/Luciano%20NM/Aristia%28Edit%20%28Mistya%29%29.webp)](/docs/Luciano%20NM/Aristia%28Edit%20%28Mistya%29%29.md)
## [cool skin](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Luciano%20The%20Game/cool%20skin.osk)
**Author:** soul
[![cool skin Thumbnail](media/thumbnail/Luciano%20The%20Game/cool%20skin.webp)](/docs/Luciano%20The%20Game/cool%20skin.md)
## [Niko-v5](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Niko-LUCIANO/Niko-v5.osk)
**Author:** some awesome people
[![Niko-v5 Thumbnail](media/thumbnail/Niko-LUCIANO/Niko-v5.webp)](/docs/Niko-LUCIANO/Niko-v5.md)
## [Rafis HDDT mrekk](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Rafis%20HDDT%20mrekk/Rafis%20HDDT%20mrekk.osk)
**Author:** DDK RPK (scorebar edit by DevenRam)
[![Rafis HDDT mrekk Thumbnail](media/thumbnail/Rafis%20HDDT%20mrekk/Rafis%20HDDT%20mrekk.webp)](/docs/Rafis%20HDDT%20mrekk/Rafis%20HDDT%20mrekk.md)
## [Rafis but SZ](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Rafis%20but%20SZ/Rafis%20but%20SZ.osk)
**Author:** DDK RPK
[![Rafis but SZ Thumbnail](media/thumbnail/Rafis%20but%20SZ/Rafis%20but%20SZ.webp)](/docs/Rafis%20but%20SZ/Rafis%20but%20SZ.md) [![Rafis but SZ Thumbnail](media/thumbnail/Rafis%20but%20SZ/Rafis%20but%20SZ.webp)](/docs/Rafis%20but%20SZ/Rafis%20but%20SZ.md)
## [adidas for3v3r](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.osk) ## [- + - tkori_r](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Rafis%20tkori_r/-%20%2B%20-%20tkori_r.osk)
**Author:** mixed
[![- + - tkori_r Thumbnail](media/thumbnail/Rafis%20tkori_r/-%20%2B%20-%20tkori_r.webp)](/docs/Rafis%20tkori_r/-%20%2B%20-%20tkori_r.md)
## [Replicant](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Replicant/Replicant.osk)
**Author:** altruism
[![Replicant Thumbnail](media/thumbnail/Replicant/Replicant.webp)](/docs/Replicant/Replicant.md)
## [Rohulk 5.0b](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Rohulk%205.0b/Rohulk%205.0b.osk)
**Author:** Fatal3ty/Rohulk (Interface/Menu from Clear Skin Ultra 3.0 by Fatal3ty)
[![Rohulk 5.0b Thumbnail](media/thumbnail/Rohulk%205.0b/Rohulk%205.0b.webp)](/docs/Rohulk%205.0b/Rohulk%205.0b.md)
## [Welter-azerinoo](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/Welter-azerinoo/Welter-azerinoo.osk)
**Author:** Gnahus-Remix-Welter
[![Welter-azerinoo Thumbnail](media/thumbnail/Welter-azerinoo/Welter-azerinoo.webp)](/docs/Welter-azerinoo/Welter-azerinoo.md)
## [ZachTV fixedexport](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/ZachTV%20Pink/ZachTV%20fixedexport.osk)
**Author:** Zach
[![ZachTV fixedexport Thumbnail](media/thumbnail/ZachTV%20Pink/ZachTV%20fixedexport.webp)](/docs/ZachTV%20Pink/ZachTV%20fixedexport.md)
## [adidas for3v3r](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.osk)
**Author:** adidas pocan
[![adidas for3v3r Thumbnail](media/thumbnail/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.webp)](/docs/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.md) [![adidas for3v3r Thumbnail](media/thumbnail/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.webp)](/docs/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.md)
## [019](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/a%D0%BB%D1%91/019.osk) ## [rafisedit](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/_%E2%80%A2%20rafisedit/rafisedit.osk)
[![019 Thumbnail](media/thumbnail/a%D0%BB%D1%91/019.webp)](/docs/a%D0%BB%D1%91/019.md) **Author:** draingang remake - https://github.com/thepro2k/Maliszewski-osu-skins/blob/main/skin.md
## [hddthr aristia](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/hddthr_aristia/hddthr%20aristia.osk) [![rafisedit Thumbnail](media/thumbnail/_%E2%80%A2%20rafisedit/rafisedit.webp)](/docs/_%E2%80%A2%20rafisedit/rafisedit.md)
## [altruism](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/altruism/altruism.osk)
**Author:** altruism
[![altruism Thumbnail](media/thumbnail/altruism/altruism.webp)](/docs/altruism/altruism.md)
## [altruism red niko cursor](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/altruism%20-%20Copy/altruism%20red%20niko%20cursor.osk)
**Author:** altruism
[![altruism red niko cursor Thumbnail](media/thumbnail/altruism%20-%20Copy/altruism%20red%20niko%20cursor.webp)](/docs/altruism%20-%20Copy/altruism%20red%20niko%20cursor.md)
## [altruism alt](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/altruism%20alt/altruism%20alt.osk)
**Author:** altruism
[![altruism alt Thumbnail](media/thumbnail/altruism%20alt/altruism%20alt.webp)](/docs/altruism%20alt/altruism%20alt.md)
## [awawawawadesu](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/awawawawadesu/awawawawadesu.osk)
**Author:** -duff
[![awawawawadesu Thumbnail](media/thumbnail/awawawawadesu/awawawawadesu.webp)](/docs/awawawawadesu/awawawawadesu.md)
## [boblow](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/boblowedit/boblow.osk)
**Author:** boblow
[![boblow Thumbnail](media/thumbnail/boblowedit/boblow.webp)](/docs/boblowedit/boblow.md)
## [+GN](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/boshyman%20gn%20white2/%2BGN.osk)
**Author:** -GN, eren-desu, Yasen etc.
[![+GN Thumbnail](media/thumbnail/boshyman%20gn%20white2/%2BGN.webp)](/docs/boshyman%20gn%20white2/%2BGN.md)
## [fukari alt](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/fukari%20alt/fukari%20alt.osk)
**Author:** Fukari-tan
[![fukari alt Thumbnail](media/thumbnail/fukari%20alt/fukari%20alt.webp)](/docs/fukari%20alt/fukari%20alt.md)
## [parannoul gold river SS](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/gold%20river/parannoul%20gold%20river%20SS.osk)
**Author:** draingang remake - https://github.com/thepro2k/Maliszewski-osu-skins/blob/main/skin.md
[![parannoul gold river SS Thumbnail](media/thumbnail/gold%20river/parannoul%20gold%20river%20SS.webp)](/docs/gold%20river/parannoul%20gold%20river%20SS.md)
## [hddthr aristia](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/hddthr_aristia/hddthr%20aristia.osk)
**Author:** some osu players
[![hddthr aristia Thumbnail](media/thumbnail/hddthr_aristia/hddthr%20aristia.webp)](/docs/hddthr_aristia/hddthr%20aristia.md) [![hddthr aristia Thumbnail](media/thumbnail/hddthr_aristia/hddthr%20aristia.webp)](/docs/hddthr_aristia/hddthr%20aristia.md)
## [prezes](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.1.0/export/prezes/prezes.osk) ## [herofest_v2](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/herofest_v2/herofest_v2.osk)
[![prezes Thumbnail](media/thumbnail/prezes/prezes.webp)](/docs/prezes/prezes.md) **Author:** unknown
[![herofest_v2 Thumbnail](media/thumbnail/herofest_v2/herofest_v2.webp)](/docs/herofest_v2/herofest_v2.md)
## [how the sky was](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/how%20the%20sky%20was/how%20the%20sky%20was.osk)
**Author:** Forever
[![how the sky was Thumbnail](media/thumbnail/how%20the%20sky%20was/how%20the%20sky%20was.webp)](/docs/how%20the%20sky%20was/how%20the%20sky%20was.md)
## [- oepep stoof edit -](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/hr%20%2B%20hr/-%20oepep%20stoof%20edit%20-.osk)
**Author:** Luciano / oepep
[![- oepep stoof edit - Thumbnail](media/thumbnail/hr%20%2B%20hr/-%20oepep%20stoof%20edit%20-.webp)](/docs/hr%20%2B%20hr/-%20oepep%20stoof%20edit%20-.md)
## [- oepep stoof edit -](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/hr%20%2B%20hr%20hard%20hs/-%20oepep%20stoof%20edit%20-.osk)
**Author:** Luciano / oepep
[![- oepep stoof edit - Thumbnail](media/thumbnail/hr%20%2B%20hr%20hard%20hs/-%20oepep%20stoof%20edit%20-.webp)](/docs/hr%20%2B%20hr%20hard%20hs/-%20oepep%20stoof%20edit%20-.md)
## [pew2022 LITE](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/pew2022%20LITE/pew2022%20LITE.osk)
[![pew2022 LITE Thumbnail](media/thumbnail/pew2022%20LITE/pew2022%20LITE.webp)](/docs/pew2022%20LITE/pew2022%20LITE.md)
## [prezes](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/prezes%20-%20Copy%20%282%29%20-%20Copy/prezes.osk)
[![prezes Thumbnail](media/thumbnail/prezes%20-%20Copy%20%282%29%20-%20Copy/prezes.webp)](/docs/prezes%20-%20Copy%20%282%29%20-%20Copy/prezes.md)
## [Rafis Gothic Lolita HS](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/rafis%20gothic%20hs/Rafis%20Gothic%20Lolita%20HS.osk)
**Author:** DDK RPK
[![Rafis Gothic Lolita HS Thumbnail](media/thumbnail/rafis%20gothic%20hs/Rafis%20Gothic%20Lolita%20HS.webp)](/docs/rafis%20gothic%20hs/Rafis%20Gothic%20Lolita%20HS.md)
## [sora](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/sora%20%28copy%29/sora.osk)
**Author:** Hidoi (onnneetti helped too)
[![sora Thumbnail](media/thumbnail/sora%20%28copy%29/sora.webp)](/docs/sora%20%28copy%29/sora.md)
## [spilicia - EZ](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/spilicia%20-%20EZ/spilicia%20-%20EZ.osk)
**Author:** spilicia
[![spilicia - EZ Thumbnail](media/thumbnail/spilicia%20-%20EZ/spilicia%20-%20EZ.webp)](/docs/spilicia%20-%20EZ/spilicia%20-%20EZ.md)
## [spilicia - NM](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/spilicia%20-%20NM/spilicia%20-%20NM.osk)
**Author:** spilicia
[![spilicia - NM Thumbnail](media/thumbnail/spilicia%20-%20NM/spilicia%20-%20NM.webp)](/docs/spilicia%20-%20NM/spilicia%20-%20NM.md)
## [stellerino](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/stellerino/stellerino.osk)
**Author:** stellasu
[![stellerino Thumbnail](media/thumbnail/stellerino/stellerino.webp)](/docs/stellerino/stellerino.md)
## [tekkito2 malisz](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/styl%20hong%20kong/tekkito2%20malisz.osk)
[![tekkito2 malisz Thumbnail](media/thumbnail/styl%20hong%20kong/tekkito2%20malisz.webp)](/docs/styl%20hong%20kong/tekkito2%20malisz.md)
## [tekkito2 malisz](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/styl%20hong%20kong%20-%20Copy/tekkito2%20malisz.osk)
[![tekkito2 malisz Thumbnail](media/thumbnail/styl%20hong%20kong%20-%20Copy/tekkito2%20malisz.webp)](/docs/styl%20hong%20kong%20-%20Copy/tekkito2%20malisz.md)
## [tekkito aleph edit](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/tekkito%2Baleph%2Bedit/tekkito%20aleph%20edit.osk)
[![tekkito aleph edit Thumbnail](media/thumbnail/tekkito%2Baleph%2Bedit/tekkito%20aleph%20edit.webp)](/docs/tekkito%2Baleph%2Bedit/tekkito%20aleph%20edit.md)
## [tko](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/tko%20reused/tko.osk)
**Author:** various authors
[![tko Thumbnail](media/thumbnail/tko%20reused/tko.webp)](/docs/tko%20reused/tko.md)
## [tourney player or somethin](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/tourney%20player%20or%20somethin/tourney%20player%20or%20somethin.osk)
**Author:** many//edited by zibi
[![tourney player or somethin Thumbnail](media/thumbnail/tourney%20player%20or%20somethin/tourney%20player%20or%20somethin.webp)](/docs/tourney%20player%20or%20somethin/tourney%20player%20or%20somethin.md)
## [- zibi instafade](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/whypan-azerino/-%20zibi%20instafade.osk)
**Author:** many//edited by zibi
[![- zibi instafade Thumbnail](media/thumbnail/whypan-azerino/-%20zibi%20instafade.webp)](/docs/whypan-azerino/-%20zibi%20instafade.md)
## [zadymiarz](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/zadymiarz/zadymiarz.osk)
[![zadymiarz Thumbnail](media/thumbnail/zadymiarz/zadymiarz.webp)](/docs/zadymiarz/zadymiarz.md)
## [# 心 Kokoro 「3.0」 DT](https://git.sulej.net/Skellers/ooga_booga/media/tag/v1.0.0/export/%E5%BF%83kokoro%20dt/%23%20%E5%BF%83%20Kokoro%20%E3%80%8C3.0%E3%80%8D%20DT.osk)
**Author:** Duckyzie
[![# 心 Kokoro 「3.0」 DT Thumbnail](media/thumbnail/%E5%BF%83kokoro%20dt/%23%20%E5%BF%83%20Kokoro%20%E3%80%8C3.0%E3%80%8D%20DT.webp)](/docs/%E5%BF%83kokoro%20dt/%23%20%E5%BF%83%20Kokoro%20%E3%80%8C3.0%E3%80%8D%20DT.md)
# Build History # Build History
| Version | Date | | Version | Date |
| ------- | ---- | | ------- | ---- |
| [`v1.1.0 (Current)`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.1.0/README.md) | 16.06.2025 21:12:46 | | [`v1.0.0 (Current)`](https://git.sulej.net/Skellers/ooga_booga/src/tag/v1.0.0/README.md) | 23.11.2025 17:02:03 |
| [`v1.0.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.0.0/README.md) | 16.06.2025 10:51:47 |

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,52 @@
[LocalizedFileNames]
taiko-soft-hitwhistle.wav=@taiko-soft-hitwhistle.wav,0
taiko-soft-hitnormal.wav=@taiko-soft-hitnormal.wav,0
taiko-soft-hitfinish.wav=@taiko-soft-hitfinish.wav,0
taiko-soft-hitclap.wav=@taiko-soft-hitclap.wav,0
taiko-normal-hitwhistle.wav=@taiko-normal-hitwhistle.wav,0
taiko-normal-hitnormal.wav=@taiko-normal-hitnormal.wav,0
taiko-normal-hitfinish.wav=@taiko-normal-hitfinish.wav,0
taiko-normal-hitclap.wav=@taiko-normal-hitclap.wav,0
soft-hitwhistle1.wav=@soft-hitwhistle1.wav,0
soft-hitnormal4.wav=@soft-hitnormal4.wav,0
soft-hitnormal3.wav=@soft-hitnormal3.wav,0
shutter.wav=@shutter.wav,0
match-start.wav=@match-start.wav,0
match-leave.wav=@match-leave.wav,0
match-join.wav=@match-join.wav,0
match-confirm.wav=@match-confirm.wav,0
count2s.WAV=@count2s.WAV,0
spinnerbonus.wav=@spinnerbonus.wav,0
spinnerspin.wav=@spinnerspin.wav,0
soft-sliderwhistle.wav=@soft-sliderwhistle.wav,0
soft-slidertick2.wav=@soft-slidertick2.wav,0
soft-sliderslide.wav=@soft-sliderslide.wav,0
soft-sliderslide2.wav=@soft-sliderslide2.wav,0
soft-slidertick.wav=@soft-slidertick.wav,0
soft-hitwhistle2.wav=@soft-hitwhistle2.wav,0
soft-hitwhistle.wav=@soft-hitwhistle.wav,0
soft-hitnormal2.wav=@soft-hitnormal2.wav,0
soft-hitnormal1.wav=@soft-hitnormal1.wav,0
soft-hitnormal.wav=@soft-hitnormal.wav,0
soft-hitfinish.wav=@soft-hitfinish.wav,0
soft-hitfinish2.wav=@soft-hitfinish2.wav,0
soft-hitclap.wav=@soft-hitclap.wav,0
soft-hitclap2.wav=@soft-hitclap2.wav,0
normal-slidertick.wav=@normal-slidertick.wav,0
normal-sliderwhistle.wav=@normal-sliderwhistle.wav,0
normal-sliderslide2.wav=@normal-sliderslide2.wav,0
normal-sliderslide.wav=@normal-sliderslide.wav,0
normal-hitwhistle2.wav=@normal-hitwhistle2.wav,0
normal-hitwhistle.wav=@normal-hitwhistle.wav,0
normal-hitnormal2.wav=@normal-hitnormal2.wav,0
normal-hitnormal.wav=@normal-hitnormal.wav,0
normal-hitfinish2.wav=@normal-hitfinish2.wav,0
normal-hitfinish.wav=@normal-hitfinish.wav,0
normal-hitclap2.wav=@normal-hitclap2.wav,0
normal-hitclap.wav=@normal-hitclap.wav,0
menuhit.wav=@menuhit.wav,0
menuclick.wav=@menuclick.wav,0
menuback.wav=@menuback.wav,0
gos.WAV=@gos.WAV,0
failsound.wav=@failsound.wav,0
count3s.WAV=@count3s.WAV,0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Skins/- + morgan spring/gos.WAV LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More