diff --git a/.gitattributes b/.gitattributes index d321d7bc..b5ae37b3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,15 +1,33 @@ -*.db filter=lfs diff=lfs merge=lfs -text -*.exe filter=lfs diff=lfs merge=lfs -text -*.gif 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 -*.ogg 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 +*.db filter=lfs diff=lfs merge=lfs -text +*.exe 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 +*.PNG filter=lfs diff=lfs merge=lfs -text +*.pnG filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.webp 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 -*.pdn filter=lfs diff=lfs merge=lfs -text -*.wav filter=lfs diff=lfs merge=lfs -text -*.WAV filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d640a221..4742f490 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -1,4 +1,4 @@ -name: CI/CD Pipeline +name: Generate Skin previews, OSK files and per skin documentation on: push: @@ -23,14 +23,16 @@ env: DANSER_SCREENSHOT_DIR: "/app/danser/screenshots" SKINS_DIR: "${{ github.workspace }}/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_MOD_ICONS_DIR: "${{ github.workspace }}/media/icons" REPO_RANKING_PANEL_DIR: "${{ github.workspace }}/media/panel" REPO_THUMBNAIL_DIR: "${{ github.workspace }}/media/thumbnail" SETTINGS_JSON_PATH: "/app/danser/settings/default.json" 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" IMAGE_NAME: osc/skins-image REGISTRY_URL: "https://${{ vars.CONTAINER_REGISTRY }}" @@ -40,7 +42,7 @@ env: jobs: generate_everything: name: Full CI/CD Pipeline - runs-on: ubuntu-latest + runs-on: danser container: image: ${{ vars.CONTAINER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest options: >- @@ -170,7 +172,6 @@ jobs: 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: | @@ -291,7 +292,7 @@ jobs: echo " → Generating video..." if ! xvfb-run -a "$DANSER_DIR/danser-cli" \ - -replay "$REPLAY_PATH" -record -skip -start=215 -end=230 -noupdatecheck \ + -replay "$GAMEPLAY_REPLAY_PATH" -record -skip -start=300 -end=307 -noupdatecheck \ -out="$SKIN_NAME" -skin="$SKIN_NAME" >"$LOGFILE" 2>&1; then echo " ✖ Video failed for $SKIN_NAME"; cat "$LOGFILE"; INDEX=$((INDEX+1)); continue fi @@ -299,9 +300,10 @@ jobs: if [ -f "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4" ]; then echo " → Trimming MP4 with ffmpeg..." ffmpeg -hide_banner -loglevel error \ + -ss 5 -t 6.5 \ -i "$DANSER_VIDEO_DIR/$SKIN_NAME.mp4" \ - -ss 5 -t 10 \ - -c:v h264_nvenc -preset fast -c:a aac -b:a 128k \ + -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 @@ -318,7 +320,7 @@ jobs: echo " → Taking screenshot..." if ! xvfb-run -a "$DANSER_DIR/danser-cli" \ - -replay "$REPLAY_PATH" -skip -noupdatecheck -ss 243 \ + -replay "$PANEL_REPLAY_PATH" -skip -noupdatecheck -ss 28 \ -out="$SKIN_NAME" -skin="$SKIN_NAME" >>"$LOGFILE" 2>&1; then echo " ✖ Screenshot failed for $SKIN_NAME"; cat "$LOGFILE"; INDEX=$((INDEX+1)); continue fi @@ -333,7 +335,7 @@ jobs: echo " → Taking thumbnail screenshot..." if ! xvfb-run -a "$DANSER_DIR/danser-cli" \ - -replay "$REPLAY_PATH" -skip -noupdatecheck -ss 220 \ + -replay "$THUMBNAIL_REPLAY_PATH" -skip -noupdatecheck -ss 1.3 \ -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 @@ -491,15 +493,22 @@ jobs: for group_list in "$group1_icons" "$group2_icons" "$group3_icons"; do montage_files=() for icon in $group_list; do + file="" if [ -f "${ICON_FOLDER}/selection-mod-${icon}@2x.png" ]; then - montage_files+=("${ICON_FOLDER}/selection-mod-${icon}@2x.png") + file="${ICON_FOLDER}/selection-mod-${icon}@2x.png" + elif [ -f "${ICON_FOLDER}/selection-mod-${icon}.png" ]; then + file="${ICON_FOLDER}/selection-mod-${icon}.png" elif [ -f "${DEFAULT_SKIN_DIR}/selection-mod-${icon}@2x.png" ]; then - montage_files+=("${DEFAULT_SKIN_DIR}/selection-mod-${icon}@2x.png") + file="${DEFAULT_SKIN_DIR}/selection-mod-${icon}@2x.png" fi + + [ -n "$file" ] && montage_files+=("$file") 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" @@ -626,8 +635,7 @@ jobs: sanitize_filename() { echo "$1" | \ tr -d '\000-\037' | \ - sed -e 's#[\\/:\*\?"<>|]#-#g' | \ - sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' + sed -e 's#[\\/:\*\?"<>|]#-#g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' } url_encode_path() { @@ -643,6 +651,7 @@ jobs: 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" @@ -663,25 +672,30 @@ jobs: jq -r '.order[]?' "$SKINS_JSON_FILE" > order.txt get_desc() { - grep -F -m1 -- "$1=" "$DESC_FILE" 2>/dev/null | cut -d '=' -f2- + grep -F -m1 -- "$1=" "$DESC_FILE" 2>/dev/null | cut -d '=' -f2- || true } declare -A ordered while IFS= read -r skin; do + [ "$skin" = "default-skin" ] && continue ordered["$skin"]=1 dir="$DANSER_SKINS_DIR/$skin" [ ! -d "$dir" ] && continue - ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1) + + 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) - if [ -n "$line" ]; then - val="${line#*:}" + name_line=$(grep -a -i -m1 'Name[[:space:]]*:' "$ini_file" || true) + if [ -n "$name_line" ]; then + val="${name_line#*:}" val="$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" - if [ -n "$val" ]; then - skin_header=$(sanitize_filename "$val") - fi + [ -n "$val" ] && skin_header=$(sanitize_filename "$val") + else + skin_header=$(sanitize_filename "$skin") fi + else + continue fi raw_path="$(printf "%s/%s" "$skin" "$skin_header" | sed 's/^ *//;s/ *$//')" @@ -693,28 +707,38 @@ jobs: desc=$(get_desc "$skin") [ -n "$desc" ] && { echo "$desc" >> "$README_PATH"; echo "" >> "$README_PATH"; } + if [ -f "$ini_file" ]; then + author_line=$(grep -i '^[[:space:]]*Author:' "$ini_file" | head -n1 || true) + if [ -n "$author_line" ]; then + author=$(echo "$author_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + [ -n "$author" ] && { echo "**Author:** $author" >> "$README_PATH"; echo "" >> "$README_PATH"; } + fi + fi + 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") + skin="$(basename "$dir")" + [ "$skin" = "default-skin" ] && continue [[ -n "${ordered[$skin]}" ]] && continue 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) - if [ -n "$line" ]; then - val="${line#*:}" + name_line=$(grep -a -i -m1 'Name[[:space:]]*:' "$ini_file" || true) + if [ -n "$name_line" ]; then + val="${name_line#*:}" val="$(echo "$val" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" - if [ -n "$val" ]; then - skin_header=$(sanitize_filename "$val") - fi + [ -n "$val" ] && skin_header=$(sanitize_filename "$val") + else + skin_header=$(sanitize_filename "$skin") fi + else + continue fi raw_path="$(printf "%s/%s" "$skin" "$skin_header" | sed 's/^ *//;s/ *$//')" @@ -722,6 +746,15 @@ jobs: echo "## [$skin_header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/${base_path}.osk)" >> "$README_PATH" echo "" >> "$README_PATH" + + if [ -f "$ini_file" ]; then + author_line=$(grep -i '^[[:space:]]*Author:' "$ini_file" | head -n1 || true) + if [ -n "$author_line" ]; then + author=$(echo "$author_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + [ -n "$author" ] && { echo "**Author:** $author" >> "$README_PATH"; echo "" >> "$README_PATH"; } + fi + fi + echo "[![$skin_header Thumbnail](media/thumbnail/${base_path}.webp)](/docs/${base_path}.md)" >> "$README_PATH" echo "" >> "$README_PATH" done @@ -774,6 +807,7 @@ jobs: [ -d "$dir" ] || continue skin=$(basename "$dir") + [ "$skin" = "default-skin" ] && continue ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n1 || true) skin_header="$skin" @@ -797,15 +831,53 @@ jobs: video_url="$REGISTRY_URL/$USER_REPOSITORY/raw/tag/$new_tag/media/gameplay/${base_path}.mp4" + author="" + if [ -f "$ini_file" ]; then + author_line=$(grep -i '^[[:space:]]*Author:' "$ini_file" | head -n1 || true) + if [ -n "$author_line" ]; then + author=$(echo "$author_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + fi + fi + { echo "# [$skin_header]($osk_url)" echo "" + [ -n "$author" ] && echo "**Author:** $author" + [ -n "$author" ] && echo "" + + echo "## Hitsounds" echo "" echo "" + + echo "## Ranking Panel" echo "![](/media/panel/${base_path}.webp)" echo "" + + echo "## Mod Icons" echo "![](/media/icons/${base_path}-mod-icons.webp)" + + echo "" + echo "## Build History" + echo "" + echo "| Version | Date |" + echo "| ------- | ---- |" + + 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/docs/${base_path}.md) | $current_commit_date |" + + 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 + raw_osk_path="export/${skin}/${skin_header}.osk" + if git ls-tree -r --name-only "$tag" | grep -Fx -- "$raw_osk_path" >/dev/null; then + 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/docs/${base_path}.md) | $formatted_date |" + fi + done + fi + } > "$md_file_path" echo " → Wrote $md_file_path" @@ -820,6 +892,8 @@ jobs: echo "[Cleanup Extra Files Started]" [ -f how-to-use.md ] && rm -f how-to-use.md + [ -f src/replay.osr ] && rm -f src/replay.osr + [ -d src/default-skin ] && rm -rf src/default-skin readarray -t skins <<< "$ALL_SKINS_DIR" diff --git a/.gitea/workflows/skins.json b/.gitea/workflows/skins.json index ac2ac916..50c8bded 100644 --- a/.gitea/workflows/skins.json +++ b/.gitea/workflows/skins.json @@ -1,45 +1,42 @@ { - "order": [ - "- ⊹ aia 1", - "- ⊹ aia 2", - "- ⊹ aia 3", - "boop ts", - "- rafis pinkity edit by henry", - "_• adidas for3v3r", - "hddthr_aristia", - "++scylla funny mix EPIC", - "Aristia rgby", - "- + morgan spring", - "- Seoul v11 Asta Edit", - "-#-B- RizerAristia V2+ - [NM+Abyssal]", - "awawawawadesu", - "bleh", - "fukari alt", - "how the sky was", - "pew2022 LITE", - "prezes", - "sora (copy)", - "--", - "_• rafisedit", - "Aleph DT", - "aлё", - "BOIIII_idk MIX Skin", - "mario+bro+⌞DT⌝", - "Rafis but SZ", - "心kokoro dt", - "- ⊹ aia 3 blue hitcircleoverlay", - "- ⊹ aia 3 red hitcircleoverlay" - - ], - "descriptions": { - "- ⊹ aia 3 blue hitcircleoverlay": "Experimental Skin", - "- ⊹ aia 3 red hitcircleoverlay": "Experimental Skin", - "- ⊹ aia 1": "Main", - "- ⊹ aia 2": "Main, diff hitcircles", - "- ⊹ aia 3": "Main, diff hitcircles", - "boop ts": "Triple Stacked Rafis", - "- rafis pinkity edit by henry": "Main Rafis Edit" - - - } + "order": [ + "- ⊹ aia 1", + "- ⊹ aia 2", + "- ⊹ aia 3", + "boop ts", + "- rafis pinkity edit by henry", + "_• adidas for3v3r", + "hddthr_aristia", + "++scylla funny mix EPIC", + "Aristia rgby", + "- + morgan spring", + "- Seoul v11 Asta Edit", + "-#-B- RizerAristia V2+ - [NM+Abyssal]", + "awawawawadesu", + "bleh", + "fukari alt", + "how the sky was", + "pew2022 LITE", + "prezes", + "sora (copy)", + "--", + "_• rafisedit", + "Aleph DT", + "aлё", + "BOIIII_idk MIX Skin", + "mario+bro+⌞DT⌝", + "Rafis but SZ", + "心kokoro dt", + "- ⊹ aia 3 blue hitcircleoverlay", + "- ⊹ aia 3 red hitcircleoverlay" + ], + "descriptions": { + "- ⊹ aia 3 blue hitcircleoverlay": "Experimental Skin", + "- ⊹ aia 3 red hitcircleoverlay": "Experimental Skin", + "- ⊹ aia 1": "Main", + "- ⊹ aia 2": "Main, diff hitcircles", + "- ⊹ aia 3": "Main, diff hitcircles", + "boop ts": "Triple Stacked Rafis", + "- rafis pinkity edit by henry": "Main Rafis Edit" + } } diff --git a/README.md b/README.md index 33e7c61e..27576179 100644 --- a/README.md +++ b/README.md @@ -13,107 +13,201 @@ osuid: 8040245 **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.3.0/export/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.osk) +## [aia edit 1](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20%E2%8A%B9%20aia%201/aia%20edit%201.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) +Main -## [- Seoul v11 Asta Edit](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/-%20Seoul%20v11%20Asta%20Edit/-%20Seoul%20v11%20Asta%20Edit.osk) +**Author:** Skellers -[![- 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) +[![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) -## [no](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/-%20rafis%20pinkity%20edit%20by%20henry/no.osk) +## [aia edit 2](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20%E2%8A%B9%20aia%202/aia%20edit%202.osk) -[![no Thumbnail](media/thumbnail/-%20rafis%20pinkity%20edit%20by%20henry/no.webp)](/docs/-%20rafis%20pinkity%20edit%20by%20henry/no.md) +Main, diff hitcircles -## [- ⊹ aia](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/-%20%E2%8A%B9%20aia%20-%20Copy/-%20%20%20%E2%8A%B9%20aia.osk) +**Author:** Skellers -[![- ⊹ 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) +[![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) -## [-#-B- RizerAristia V2+ - [NM]](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.osk) +## [aia edit 3](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20%E2%8A%B9%20aia%203/aia%20edit%203.osk) -[![-#-B- RizerAristia V2+ - [NM] Thumbnail](media/thumbnail/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.webp)](/docs/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.md) +Main, diff hitcircles -## [Utami (WubWoofWolf)](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/--/Utami%20%28WubWoofWolf%29.osk) +**Author:** Skellers -[![Utami (WubWoofWolf) Thumbnail](media/thumbnail/--/Utami%20%28WubWoofWolf%29.webp)](/docs/--/Utami%20%28WubWoofWolf%29.md) +[![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) -## [Aleph DT](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/Aleph%20DT/Aleph%20DT.osk) +## [boop ts](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/boop%20ts/boop%20ts.osk) -[![Aleph DT Thumbnail](media/thumbnail/Aleph%20DT/Aleph%20DT.webp)](/docs/Aleph%20DT/Aleph%20DT.md) +Triple Stacked Rafis -## [Aristia rgby](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/Aristia%20rgby/Aristia%20rgby.osk) - -[![Aristia rgby Thumbnail](media/thumbnail/Aristia%20rgby/Aristia%20rgby.webp)](/docs/Aristia%20rgby/Aristia%20rgby.md) - -## [BOIIII_idk MIX Skin](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.osk) - -[![BOIIII_idk MIX Skin Thumbnail](media/thumbnail/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.webp)](/docs/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.md) - -## [Rafis but SZ](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/Rafis%20but%20SZ/Rafis%20but%20SZ.osk) - -[![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.3.0/export/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.osk) - -[![adidas for3v3r Thumbnail](media/thumbnail/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.webp)](/docs/_%E2%80%A2%20adidas%20for3v3r/adidas%20for3v3r.md) - -## [rafisedit](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/_%E2%80%A2%20rafisedit/rafisedit.osk) - -[![rafisedit Thumbnail](media/thumbnail/_%E2%80%A2%20rafisedit/rafisedit.webp)](/docs/_%E2%80%A2%20rafisedit/rafisedit.md) - -## [awawawawadesu](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/awawawawadesu/awawawawadesu.osk) - -[![awawawawadesu Thumbnail](media/thumbnail/awawawawadesu/awawawawadesu.webp)](/docs/awawawawadesu/awawawawadesu.md) - -## [019](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/a%D0%BB%D1%91/019.osk) - -[![019 Thumbnail](media/thumbnail/a%D0%BB%D1%91/019.webp)](/docs/a%D0%BB%D1%91/019.md) - -## [bleh](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/bleh/bleh.osk) - -[![bleh Thumbnail](media/thumbnail/bleh/bleh.webp)](/docs/bleh/bleh.md) - -## [boop ts](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.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) -## [fukari alt](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/fukari%20alt/fukari%20alt.osk) +## [no](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20rafis%20pinkity%20edit%20by%20henry/no.osk) -[![fukari alt Thumbnail](media/thumbnail/fukari%20alt/fukari%20alt.webp)](/docs/fukari%20alt/fukari%20alt.md) +Main Rafis Edit -## [hddthr aristia](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/hddthr_aristia/hddthr%20aristia.osk) +**Author:** henry + +[![no Thumbnail](media/thumbnail/-%20rafis%20pinkity%20edit%20by%20henry/no.webp)](/docs/-%20rafis%20pinkity%20edit%20by%20henry/no.md) + +## [adidas for3v3r](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [hddthr aristia](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) -## [how the sky was](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/how%20the%20sky%20was/how%20the%20sky%20was.osk) +## [++scylla funny mix EPIC](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [Aristia rgby](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/Aristia%20rgby/Aristia%20rgby.osk) + +**Author:** [Garin] + Aristia + Various + +[![Aristia rgby Thumbnail](media/thumbnail/Aristia%20rgby/Aristia%20rgby.webp)](/docs/Aristia%20rgby/Aristia%20rgby.md) + +## [- + morgan spring](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [-#-B- RizerAristia V2+ - [NM]](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.osk) + +**Author:** [Garin] + Aristia + Various+ BekkusU + +[![-#-B- RizerAristia V2+ - [NM] Thumbnail](media/thumbnail/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.webp)](/docs/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%2BAbyssal%5D/-%23-B-%20RizerAristia%20V2%2B%20-%20%5BNM%5D.md) + +## [awawawawadesu](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/awawawawadesu/awawawawadesu.osk) + +**Author:** -duff + +[![awawawawadesu Thumbnail](media/thumbnail/awawawawadesu/awawawawadesu.webp)](/docs/awawawawadesu/awawawawadesu.md) + +## [bleh](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/bleh/bleh.osk) + +**Author:** :p + +[![bleh Thumbnail](media/thumbnail/bleh/bleh.webp)](/docs/bleh/bleh.md) + +## [fukari alt](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [how the sky was](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) -## [mario bro ⌞DT⌝](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/mario%2Bbro%2B%E2%8C%9EDT%E2%8C%9D/mario%20bro%20%E2%8C%9EDT%E2%8C%9D.osk) - -[![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) - -## [pew2022 LITE](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/pew2022%20LITE/pew2022%20LITE.osk) +## [pew2022 LITE](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/prezes/prezes.osk) +## [prezes](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/prezes/prezes.osk) [![prezes Thumbnail](media/thumbnail/prezes/prezes.webp)](/docs/prezes/prezes.md) -## [sora](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/sora%20%28copy%29/sora.osk) +## [sora](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) -## [# 心 Kokoro 「3.0」 DT](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/%E5%BF%83kokoro%20dt/%23%20%E5%BF%83%20Kokoro%20%E3%80%8C3.0%E3%80%8D%20DT.osk) +## [Utami (WubWoofWolf)](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [rafisedit](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/_%E2%80%A2%20rafisedit/rafisedit.osk) + +**Author:** draingang remake - https://github.com/thepro2k/Maliszewski-osu-skins/blob/main/skin.md + +[![rafisedit Thumbnail](media/thumbnail/_%E2%80%A2%20rafisedit/rafisedit.webp)](/docs/_%E2%80%A2%20rafisedit/rafisedit.md) + +## [Aleph DT](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [019](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/a%D0%BB%D1%91/019.osk) + +[![019 Thumbnail](media/thumbnail/a%D0%BB%D1%91/019.webp)](/docs/a%D0%BB%D1%91/019.md) + +## [BOIIII_idk MIX Skin](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.osk) + +**Author:** Various Artists + +[![BOIIII_idk MIX Skin Thumbnail](media/thumbnail/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.webp)](/docs/BOIIII_idk%20MIX%20Skin/BOIIII_idk%20MIX%20Skin.md) + +## [mario bro ⌞DT⌝](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [Rafis but SZ](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) + +## [# 心 Kokoro 「3.0」 DT](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.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) +## [aia edit 3](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20%E2%8A%B9%20aia%203%20blue%20hitcircleoverlay/aia%20edit%203.osk) + +Experimental Skin + +**Author:** Skellers + +[![aia edit 3 Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%203%20blue%20hitcircleoverlay/aia%20edit%203.webp)](/docs/-%20%E2%8A%B9%20aia%203%20blue%20hitcircleoverlay/aia%20edit%203.md) + +## [aia edit 3](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/-%20%E2%8A%B9%20aia%203%20red%20hitcircleoverlay/aia%20edit%203.osk) + +Experimental Skin + +**Author:** Skellers + +[![aia edit 3 Thumbnail](media/thumbnail/-%20%E2%8A%B9%20aia%203%20red%20hitcircleoverlay/aia%20edit%203.webp)](/docs/-%20%E2%8A%B9%20aia%203%20red%20hitcircleoverlay/aia%20edit%203.md) + +## [Default](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/default-skin/Default.osk) + +**Author:** Developers + +[![Default Thumbnail](media/thumbnail/default-skin/Default.webp)](/docs/default-skin/Default.md) + # Build History | Version | Date | | ------- | ---- | -| [`v1.3.0 (Current)`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.3.0/README.md) | 17.06.2025 16:32:30 | -| [`v1.2.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.2.0/README.md) | 17.06.2025 16:32:30 | +| [`v1.9.0 (Current)`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.9.0/README.md) | 04.07.2025 15:45:13 | +| [`v1.8.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.8.0/README.md) | 30.06.2025 12:55:54 | +| [`v1.7.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.7.0/README.md) | 27.06.2025 11:55:56 | +| [`v1.6.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.6.0/README.md) | 27.06.2025 10:55:41 | +| [`v1.5.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.5.0/README.md) | 25.06.2025 12:58:30 | +| [`v1.4.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.4.0/README.md) | 25.06.2025 12:39:10 | +| [`v1.3.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.3.0/README.md) | 22.06.2025 11:18:28 | +| [`v1.2.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.2.0/README.md) | 20.06.2025 13:14:49 | | [`v1.1.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.1.0/README.md) | 17.06.2025 16:13:13 | | [`v1.0.0`](https://git.sulejmani.xyz/Skellers/ooga_booga/src/tag/v1.0.0/README.md) | 16.06.2025 10:51:47 | diff --git a/docs/++scylla funny mix EPIC/++scylla funny mix EPIC.md b/docs/++scylla funny mix EPIC/++scylla funny mix EPIC.md index b3d4e396..860ae253 100644 --- a/docs/++scylla funny mix EPIC/++scylla funny mix EPIC.md +++ b/docs/++scylla funny mix EPIC/++scylla funny mix EPIC.md @@ -1,8 +1,26 @@ -# [++scylla funny mix EPIC](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.3.0/export/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.osk) +# [++scylla funny mix EPIC](https://git.sulejmani.xyz/Skellers/ooga_booga/media/tag/v1.9.0/export/%2B%2Bscylla%20funny%20mix%20EPIC/%2B%2Bscylla%20funny%20mix%20EPIC.osk) -