├── osuT5 ├── __init__.py ├── osuT5 │ ├── __init__.py │ ├── dataset │ │ └── __init__.py │ ├── model │ │ ├── __init__.py │ │ └── custom_transformers │ │ │ └── __init__.py │ ├── utils │ │ ├── __init__.py │ │ ├── init_utils.py │ │ └── log_utils.py │ └── inference │ │ ├── __init__.py │ │ ├── template.osu │ │ └── cache_utils.py ├── plot_difficulties.py └── clean_wandb_models.py ├── rcomplexion ├── __init__.py ├── libs │ ├── __init__.py │ ├── model │ │ └── __init__.py │ ├── tokenizer │ │ ├── __init__.py │ │ └── event.py │ ├── dataset │ │ ├── __init__.py │ │ └── data_utils.py │ └── utils │ │ ├── __init__.py │ │ ├── init_utils.py │ │ └── log_utils.py ├── configs │ ├── model │ │ └── osu_r.yaml │ ├── inference_v2.yaml │ ├── train_v2.yaml │ ├── inference.yaml │ └── train_v3.yaml ├── README.md ├── clean_wandb_models.py └── test.py ├── osu_diffusion ├── utils │ ├── export │ │ └── __init__.py │ ├── __init__.py │ └── diffusion │ │ └── __init__.py ├── requirements.txt ├── sample.bat ├── viewlog.sh ├── .gitignore ├── train.bat ├── environment.yml ├── __init__.py ├── testing │ ├── validate_beatmap_dataframe.py │ ├── print_ckpt.py │ ├── find_similar_beatmaps.py │ ├── toy_datasets │ │ ├── visual_spacing │ │ │ ├── test - visual spacing (OliBomby) [test0].osu │ │ │ ├── test - visual spacing (OliBomby) [test1].osu │ │ │ ├── test - visual spacing (OliBomby) [test6].osu │ │ │ ├── test - visual spacing (OliBomby) [test9].osu │ │ │ ├── test - visual spacing (OliBomby) [test5].osu │ │ │ ├── test - visual spacing (OliBomby) [test3].osu │ │ │ ├── test - visual spacing (OliBomby) [test4].osu │ │ │ ├── test - visual spacing (OliBomby) [test7].osu │ │ │ ├── test - visual spacing (OliBomby) [test8].osu │ │ │ ├── test - visual spacing (OliBomby) [test10].osu │ │ │ ├── test - visual spacing (OliBomby) [test2].osu │ │ │ ├── test - visual spacing (OliBomby) [test11].osu │ │ │ └── test - visual spacing (OliBomby) [test12].osu │ │ ├── geometry │ │ │ ├── test - geometry (OliBomby) [test12].osu │ │ │ ├── test - geometry (OliBomby) [test2].osu │ │ │ ├── test - geometry (OliBomby) [test8].osu │ │ │ ├── test - geometry (OliBomby) [test0].osu │ │ │ ├── test - geometry (OliBomby) [test11].osu │ │ │ ├── test - geometry (OliBomby) [test1].osu │ │ │ ├── test - geometry (OliBomby) [test4].osu │ │ │ ├── test - geometry (OliBomby) [test7].osu │ │ │ ├── test - geometry (OliBomby) [test3].osu │ │ │ ├── test - geometry (OliBomby) [test16].osu │ │ │ ├── test - geometry (OliBomby) [test5].osu │ │ │ ├── test - geometry (OliBomby) [test10].osu │ │ │ ├── test - geometry (OliBomby) [test14].osu │ │ │ ├── test - geometry (OliBomby) [test13].osu │ │ │ ├── test - geometry (OliBomby) [test6].osu │ │ │ ├── test - geometry (OliBomby) [test9].osu │ │ │ └── test - geometry (OliBomby) [test15].osu │ │ ├── symmetry │ │ │ ├── test - symmetry (OliBomby) [test0].osu │ │ │ ├── test - symmetry (OliBomby) [test6].osu │ │ │ ├── test - symmetry (OliBomby) [test9].osu │ │ │ ├── test - symmetry (OliBomby) [test1].osu │ │ │ ├── test - symmetry (OliBomby) [test11].osu │ │ │ ├── test - symmetry (OliBomby) [test2].osu │ │ │ ├── test - symmetry (OliBomby) [test10].osu │ │ │ ├── test - symmetry (OliBomby) [test5].osu │ │ │ ├── test - symmetry (OliBomby) [test8].osu │ │ │ ├── test - symmetry (OliBomby) [test4].osu │ │ │ ├── test - symmetry (OliBomby) [test7].osu │ │ │ └── test - symmetry (OliBomby) [test3].osu │ │ └── stream │ │ │ ├── test - stream (OliBomby) [test16].osu │ │ │ ├── test - stream (OliBomby) [test7].osu │ │ │ ├── test - stream (OliBomby) [test6].osu │ │ │ ├── test - stream (OliBomby) [test8].osu │ │ │ ├── test - stream (OliBomby) [test10].osu │ │ │ ├── test - stream (OliBomby) [test15].osu │ │ │ ├── test - stream (OliBomby) [test1].osu │ │ │ ├── test - stream (OliBomby) [test9].osu │ │ │ ├── test - stream (OliBomby) [test0].osu │ │ │ ├── test - stream (OliBomby) [test2].osu │ │ │ ├── test - stream (OliBomby) [test3].osu │ │ │ ├── test - stream (OliBomby) [test4].osu │ │ │ ├── test - stream (OliBomby) [test5].osu │ │ │ ├── test - stream (OliBomby) [test13].osu │ │ │ ├── test - stream (OliBomby) [test11].osu │ │ │ ├── test - stream (OliBomby) [test17].osu │ │ │ ├── test - stream (OliBomby) [test12].osu │ │ │ ├── test - stream (OliBomby) [test14].osu │ │ │ ├── test - stream (OliBomby) [test19].osu │ │ │ └── test - stream (OliBomby) [test18].osu │ ├── find_unique_beatmaps.py │ ├── distance_distance.py │ └── plot_loss.py ├── Pipfile ├── .pre-commit-config.yaml ├── train.sh └── test_data_loading.py ├── classifier ├── libs │ ├── model │ │ ├── __init__.py │ │ └── spectrogram.py │ ├── utils │ │ ├── __init__.py │ │ └── routed_pickle.py │ ├── tokenizer │ │ ├── __init__.py │ │ └── event.py │ ├── __init__.py │ └── dataset │ │ └── __init__.py ├── configs │ ├── train_v1.yaml │ ├── model │ │ ├── whisper_base.yaml │ │ ├── whisper_tiny.yaml │ │ ├── whisper_small.yaml │ │ ├── whisper_base_v2.yaml │ │ └── model.yaml │ ├── train_v2.yaml │ ├── train_v3.yaml │ └── inference.yaml └── test.py ├── static └── icon.png ├── datasets └── removed_users.txt ├── configs ├── model │ ├── t5_base.yaml │ ├── t5_small_v4.yaml │ ├── t5_small_v9.yaml │ ├── t5_small.yaml │ ├── whisper_base.yaml │ ├── whisper_medium.yaml │ ├── whisper_small.yaml │ ├── nwhisper_base.yaml │ ├── whisper_tiny_v2.yaml │ ├── whisper_small_v2.yaml │ └── default.yaml ├── legacy │ ├── inference_v1.yaml │ ├── inference_v4.yaml │ ├── inference_v5.yaml │ ├── inference_v6.yaml │ ├── inference_v10.yaml │ ├── inference_v8.yaml │ ├── inference_v9.yaml │ ├── inference_v8_gd.yaml │ ├── inference_v10_GD.yaml │ ├── inference_v7.yaml │ ├── train_v1.yaml │ ├── inference_v11.yaml │ ├── inference_v12.yaml │ ├── inference_v14.yaml │ ├── inference_v15.yaml │ ├── inference_v10_1_GD.yaml │ ├── inference_v16.yaml │ ├── inference_v17.yaml │ ├── train_v5.yaml │ ├── inference_v18.yaml │ ├── train_v6.yaml │ ├── train_v9.yaml │ ├── train_v1.1.yaml │ ├── train_v10.yaml │ ├── train_v8.yaml │ ├── train_v14.yaml │ ├── train_v11.yaml │ ├── train_v4.yaml │ ├── train_v7.yaml │ ├── train_v15.yaml │ ├── train_v13.yaml │ ├── train_v10_gd.yaml │ ├── train_v8_gd.yaml │ ├── train_v12.yaml │ ├── inference_timer_v24.yaml │ ├── train_v16.yaml │ ├── train_v17.yaml │ ├── train_timer_v24.yaml │ └── train_v18.yaml ├── inference │ ├── v22.yaml │ ├── v25.yaml │ ├── v26.yaml │ ├── v20.yaml │ ├── v21.yaml │ ├── v19.yaml │ ├── v23.yaml │ ├── v28.yaml │ ├── v29.yaml │ ├── v30.yaml │ ├── tiny_dist5.yaml │ ├── tiny_dist6.yaml │ ├── tiny_dist7.yaml │ ├── tiny_dist8.yaml │ ├── tiny_dist9.yaml │ ├── tiny_dist10.yaml │ ├── tiny_dist11.yaml │ ├── tiny_dist12.yaml │ ├── tiny_dist13.yaml │ ├── tiny_dist14.yaml │ ├── tiny_dist17.yaml │ ├── tiny_dist19.yaml │ ├── tiny_dist15.yaml │ ├── tiny_dist16.yaml │ ├── tiny_dist18.yaml │ ├── tiny_dist20.yaml │ ├── tiny_dist21.yaml │ ├── tiny_dist22.yaml │ ├── v31.yaml │ ├── tiny_dist.yaml │ ├── tiny_dist2.yaml │ ├── tiny_dist3.yaml │ ├── tiny_dist4.yaml │ └── tiny_nodist.yaml ├── mai_mod.yaml ├── train │ └── lora.yaml └── calc_fid.yaml ├── .gitignore ├── requirements.txt ├── Dockerfile ├── routed_pickle.py ├── compose.yaml ├── .github └── FUNDING.yml ├── excepthook.py ├── LICENSE ├── .devcontainer ├── docker-compose.yml └── devcontainer.json └── fix_dataset.py /osuT5/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /osuT5/osuT5/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rcomplexion/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rcomplexion/libs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /osuT5/osuT5/dataset/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /osu_diffusion/utils/export/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rcomplexion/libs/model/__init__.py: -------------------------------------------------------------------------------- 1 | from .osu_r import OsuR 2 | -------------------------------------------------------------------------------- /classifier/libs/model/__init__.py: -------------------------------------------------------------------------------- 1 | from .model import OsuClassifier -------------------------------------------------------------------------------- /classifier/libs/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .model_utils import * 2 | -------------------------------------------------------------------------------- /osu_diffusion/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .tokenizer import Tokenizer 2 | -------------------------------------------------------------------------------- /osu_diffusion/requirements.txt: -------------------------------------------------------------------------------- 1 | torch 2 | numpy 3 | matplotlib 4 | pandas 5 | slider -------------------------------------------------------------------------------- /rcomplexion/configs/model/osu_r.yaml: -------------------------------------------------------------------------------- 1 | 2 | name: 'osu_r' 3 | 4 | hidden_size: 512 5 | -------------------------------------------------------------------------------- /osuT5/osuT5/model/__init__.py: -------------------------------------------------------------------------------- 1 | from .modeling_mapperatorinator import Mapperatorinator 2 | -------------------------------------------------------------------------------- /static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OliBomby/Mapperatorinator/HEAD/static/icon.png -------------------------------------------------------------------------------- /datasets/removed_users.txt: -------------------------------------------------------------------------------- 1 | 13015896 2 | 689997 3 | 8688812 4 | 22241162 5 | 16516525 6 | 14781224 -------------------------------------------------------------------------------- /osu_diffusion/sample.bat: -------------------------------------------------------------------------------- 1 | pipenv run python .\sample.py --model DiT-L --ckpt ..\1880000.pt %* 2 | -------------------------------------------------------------------------------- /classifier/configs/train_v1.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_tiny 5 | -------------------------------------------------------------------------------- /classifier/libs/tokenizer/__init__.py: -------------------------------------------------------------------------------- 1 | from .event import * 2 | from .tokenizer import Tokenizer 3 | -------------------------------------------------------------------------------- /rcomplexion/configs/inference_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train_v2 3 | - inference 4 | - _self_ 5 | -------------------------------------------------------------------------------- /rcomplexion/configs/train_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: osu_r 5 | 6 | -------------------------------------------------------------------------------- /rcomplexion/libs/tokenizer/__init__.py: -------------------------------------------------------------------------------- 1 | from .event import * 2 | from .tokenizer import Tokenizer 3 | -------------------------------------------------------------------------------- /rcomplexion/libs/dataset/__init__.py: -------------------------------------------------------------------------------- 1 | from .ors_dataset import OrsDataset 2 | from .osu_parser import OsuParser 3 | -------------------------------------------------------------------------------- /classifier/libs/__init__.py: -------------------------------------------------------------------------------- 1 | from .utils.model_utils import get_dataloaders, get_optimizer, get_scheduler, get_tokenizer 2 | -------------------------------------------------------------------------------- /osuT5/osuT5/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .init_utils import * 2 | from .model_utils import * 3 | from .train_utils import * 4 | -------------------------------------------------------------------------------- /osuT5/osuT5/inference/__init__.py: -------------------------------------------------------------------------------- 1 | from .processor import * 2 | from .preprocessor import * 3 | from .postprocessor import * 4 | -------------------------------------------------------------------------------- /rcomplexion/libs/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .init_utils import * 2 | from .model_utils import * 3 | from .train_utils import * 4 | -------------------------------------------------------------------------------- /configs/model/t5_base.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'google/t5-v1_1-base' 6 | overwrite: 7 | dropout_rate: 0.0 -------------------------------------------------------------------------------- /classifier/configs/model/whisper_base.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - model 3 | - _self_ 4 | 5 | name: 'openai/whisper-base' 6 | input_features: true 7 | -------------------------------------------------------------------------------- /classifier/configs/model/whisper_tiny.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - model 3 | - _self_ 4 | 5 | name: 'openai/whisper-tiny' 6 | input_features: true 7 | -------------------------------------------------------------------------------- /configs/model/t5_small_v4.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'google/t5-v1_1-small' 6 | overwrite: 7 | dropout_rate: 0.0 -------------------------------------------------------------------------------- /osu_diffusion/viewlog.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | PARENT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) 3 | cd $PARENT_PATH 4 | tail -f ./logs/* 5 | -------------------------------------------------------------------------------- /classifier/configs/model/whisper_small.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - model 3 | - _self_ 4 | 5 | name: 'openai/whisper-small' 6 | input_features: true 7 | -------------------------------------------------------------------------------- /classifier/libs/dataset/__init__.py: -------------------------------------------------------------------------------- 1 | from .ors_dataset import OrsDataset 2 | from .osu_parser import OsuParser 3 | from .data_utils import update_event_times 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .venv 2 | __pycache__ 3 | logs 4 | logs_fid 5 | multirun 6 | tensorboard_logs 7 | .idea 8 | test 9 | test_inference.py 10 | test_inference_mai_mod.py -------------------------------------------------------------------------------- /configs/model/t5_small_v9.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | do_style_embed: false 6 | 7 | name: 'google/t5-v1_1-small' 8 | overwrite: 9 | dropout_rate: 0.0 -------------------------------------------------------------------------------- /classifier/configs/model/whisper_base_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - model 3 | - _self_ 4 | 5 | name: 'openai/whisper-base' 6 | input_features: true 7 | classifier_proj_size: 2048 8 | -------------------------------------------------------------------------------- /configs/legacy/inference_v1.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v1 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V1' # Beatmap version 8 | -------------------------------------------------------------------------------- /configs/legacy/inference_v4.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v4 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V4' # Beatmap version 8 | -------------------------------------------------------------------------------- /configs/legacy/inference_v5.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v5 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V5' # Beatmap version 8 | -------------------------------------------------------------------------------- /configs/legacy/inference_v6.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v6 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V6' # Beatmap version 8 | -------------------------------------------------------------------------------- /osu_diffusion/.gitignore: -------------------------------------------------------------------------------- 1 | results/ 2 | /testing/beatmap_df.pkl 3 | /testing/2d-embs.npy 4 | Pipfile.lock 5 | .venv/ 6 | logs/ 7 | /embeddings/*.csv 8 | *.pickle 9 | __pycache__ 10 | -------------------------------------------------------------------------------- /rcomplexion/configs/inference.yaml: -------------------------------------------------------------------------------- 1 | model_path: '' # Path to trained model 2 | 3 | hydra: 4 | job: 5 | chdir: False 6 | run: 7 | dir: ./logs/${now:%Y-%m-%d}/${now:%H-%M-%S} -------------------------------------------------------------------------------- /configs/model/t5_small.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'google/t5-v1_1-small' 6 | overwrite: 7 | dropout_rate: 0.0 8 | 9 | spectrogram: 10 | n_mels: 512 -------------------------------------------------------------------------------- /classifier/configs/model/model.yaml: -------------------------------------------------------------------------------- 1 | input_features: false 2 | do_style_embed: true 3 | classifier_proj_size: 256 4 | 5 | spectrogram: 6 | sample_rate: 16000 7 | hop_length: 128 8 | n_fft: 1024 9 | n_mels: 388 -------------------------------------------------------------------------------- /configs/model/whisper_base.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'openai/whisper-base' 6 | input_features: true 7 | do_style_embed: false 8 | 9 | overwrite: 10 | tie_word_embeddings: false -------------------------------------------------------------------------------- /osu_diffusion/train.bat: -------------------------------------------------------------------------------- 1 | pipenv run torchrun --nproc-per-node=1 train.py --data-path "../ORS13402_no_audio" --model DiT-L --num-workers 1 --epochs 100 --global-batch-size 32 --ckpt-every 20000 --seq-len 128 --dist gloo 2 | -------------------------------------------------------------------------------- /configs/model/whisper_medium.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'openai/whisper-medium' 6 | input_features: true 7 | do_style_embed: false 8 | 9 | overwrite: 10 | tie_word_embeddings: false -------------------------------------------------------------------------------- /configs/model/whisper_small.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'openai/whisper-small' 6 | input_features: true 7 | do_style_embed: false 8 | 9 | overwrite: 10 | tie_word_embeddings: false -------------------------------------------------------------------------------- /osu_diffusion/environment.yml: -------------------------------------------------------------------------------- 1 | name: osu-diffusion 2 | channels: 3 | - pytorch 4 | - nvidia 5 | dependencies: 6 | - python >= 3.8 7 | - pytorch >= 1.13 8 | - pytorch-cuda=11.7 9 | - pip: 10 | - accelerate 11 | - slider 12 | -------------------------------------------------------------------------------- /osu_diffusion/__init__.py: -------------------------------------------------------------------------------- 1 | from .utils.data_loading import repeat_type 2 | from .utils.tokenizer import Tokenizer 3 | from .utils.positional_embedding import timestep_embedding 4 | from .utils.diffusion import create_diffusion 5 | from .utils.models import DiT_models, DiT 6 | -------------------------------------------------------------------------------- /configs/legacy/inference_v10.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v10 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V10' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | -------------------------------------------------------------------------------- /configs/legacy/inference_v8.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v8 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V8' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | -------------------------------------------------------------------------------- /configs/legacy/inference_v9.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v9 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V9' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | -------------------------------------------------------------------------------- /configs/legacy/inference_v8_gd.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v8_gd 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V8 GD' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | -------------------------------------------------------------------------------- /configs/legacy/inference_v10_GD.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v10_gd 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V10 GD' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | -------------------------------------------------------------------------------- /configs/legacy/inference_v7.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v7 4 | - diffusion: v1 5 | - _self_ 6 | - model: t5_base 7 | 8 | version: 'osuT5 V7' # Beatmap version 9 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 10 | -------------------------------------------------------------------------------- /configs/model/nwhisper_base.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'olibomby/nwhisper-base' 6 | input_features: true 7 | do_style_embed: false 8 | embed_decoder_input: false 9 | manual_norm_weights: true 10 | 11 | overwrite: 12 | tie_word_embeddings: false 13 | manual_norm_weights: true 14 | -------------------------------------------------------------------------------- /configs/inference/v22.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v22 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v22' # Path to trained model 8 | version: 'Mapperatorinator V22' # Beatmap version 9 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 10 | max_batch_size: 8 11 | -------------------------------------------------------------------------------- /configs/inference/v25.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v25 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v25' # Path to trained model 8 | version: 'Mapperatorinator V25' # Beatmap version 9 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 10 | max_batch_size: 8 11 | -------------------------------------------------------------------------------- /configs/inference/v26.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v26 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v26' # Path to trained model 8 | version: 'Mapperatorinator V26' # Beatmap version 9 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 10 | max_batch_size: 8 11 | -------------------------------------------------------------------------------- /osuT5/osuT5/model/custom_transformers/__init__.py: -------------------------------------------------------------------------------- 1 | from .configuration_nwhisper import NWhisperConfig 2 | from .modeling_nwhisper import NWhisperModel, NWhisperForConditionalGeneration 3 | from .configuration_ropewhisper import RoPEWhisperConfig 4 | from .modeling_ropewhisper import RoPEWhisperModel, RoPEWhisperForConditionalGeneration 5 | from .t5 import T5 6 | -------------------------------------------------------------------------------- /osu_diffusion/testing/validate_beatmap_dataframe.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | 4 | df = pd.read_pickle("beatmap_df.pkl") 5 | print("Number of unique beatmap IDs = %s" % df["BeatmapID"].nunique()) 6 | id_counts = df["BeatmapID"].value_counts() 7 | duplicated = id_counts[id_counts > 1] 8 | print("Duplicates:") 9 | print(df[df["BeatmapID"].isin(duplicated.index)]) 10 | -------------------------------------------------------------------------------- /configs/legacy/train_v1.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small 5 | 6 | data: # Data settings 7 | tgt_seq_len: 512 8 | center_pad_decoder: true # Center pad decoder input 9 | add_empty_sequences: false 10 | add_empty_sequences_at_step: 35000 11 | 12 | logging: # Logging settings 13 | every_steps: 100 -------------------------------------------------------------------------------- /configs/legacy/inference_v11.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v11 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V11' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | -------------------------------------------------------------------------------- /configs/legacy/inference_v12.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v12 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V12' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | -------------------------------------------------------------------------------- /configs/legacy/inference_v14.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v14 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V14' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | -------------------------------------------------------------------------------- /configs/legacy/inference_v15.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v15 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V15' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | -------------------------------------------------------------------------------- /configs/inference/v20.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v20 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v20' # Path to trained model 8 | version: 'Mapperatorinator V20' # Beatmap version 9 | timeshift_bias: -1.5 # Logit bias for sampling timeshift tokens 10 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 11 | max_batch_size: 8 12 | -------------------------------------------------------------------------------- /configs/inference/v21.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v21 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v21' # Path to trained model 8 | version: 'Mapperatorinator V21' # Beatmap version 9 | timeshift_bias: -1.5 # Logit bias for sampling timeshift tokens 10 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 11 | max_batch_size: 8 12 | -------------------------------------------------------------------------------- /configs/legacy/inference_v10_1_GD.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v10_gd 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V10.1 GD' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | -------------------------------------------------------------------------------- /configs/mai_mod.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - base_mai_mod 3 | - inference: v30 4 | - _self_ 5 | - override hydra/hydra_logging: disabled 6 | - override hydra/job_logging: disabled 7 | 8 | beatmap_path: '' 9 | audio_path: '' 10 | raw_output: false 11 | precision: 'amp' # Lower precision for speed (fp32/bf16/amp) 12 | 13 | hydra: 14 | output_subdir: null 15 | run: 16 | dir: . 17 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | accelerate 2 | pydub 3 | nnAudio 4 | PyYAML 5 | transformers==4.53.3 6 | hydra-core 7 | tensorboard 8 | slider @ git+https://github.com/OliBomby/slider.git@gedagedigedagedaoh 9 | torch_tb_profiler 10 | wandb 11 | matplotlib 12 | pandas 13 | pyarrow 14 | einops 15 | lightning 16 | pywebview[qt] 17 | pyqtwebengine 18 | flask 19 | audioop-lts; python_version>='3.13' 20 | rich 21 | peft -------------------------------------------------------------------------------- /classifier/configs/train_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_base 5 | 6 | pretrained_path: "../../../test/ckpt_v22" 7 | 8 | optim: # Optimizer settings 9 | base_lr: 1e-4 # Should be scaled with the number of devices present 10 | batch_size: 64 # This is the batch size per GPU 11 | total_steps: 32218 12 | warmup_steps: 2000 13 | grad_acc: 2 14 | final_cosine: 1e-5 15 | -------------------------------------------------------------------------------- /configs/inference/v19.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v19 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v19' # Path to trained model 8 | version: 'Mapperatorinator V19' # Beatmap version 9 | timeshift_bias: -1.5 # Logit bias for sampling timeshift tokens 10 | 11 | # Diffusion settings 12 | generate_positions: false # Use diffusion to generate object positions 13 | -------------------------------------------------------------------------------- /configs/legacy/inference_v16.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v16 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V16' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | in_context: ["none"] # Context type of other beatmap 11 | -------------------------------------------------------------------------------- /configs/legacy/inference_v17.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v17 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V17' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | in_context: ["none"] # Context type of other beatmap 11 | -------------------------------------------------------------------------------- /configs/legacy/train_v5.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | data: # Data settings 7 | per_track: true # Loads all beatmaps in a track sequentially which optimizes audio data loading 8 | add_diff_token: true 9 | add_style_token: true 10 | add_empty_sequences: false 11 | add_empty_sequences_at_step: 35000 12 | 13 | logging: # Logging settings 14 | every_steps: 100 -------------------------------------------------------------------------------- /rcomplexion/configs/train_v3.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: osu_r 5 | 6 | data: 7 | time_resolution: 0.1 # Steps per millisecond 8 | min_time: 80 # Minimum time to represent as tokens 9 | max_time: 250 # Maximum time to represent as tokens 10 | 11 | optim: # Optimizer settings 12 | base_lr: 1e-2 # Should be scaled with the number of devices present 13 | total_steps: 16384 14 | warmup_steps: 5000 -------------------------------------------------------------------------------- /classifier/configs/train_v3.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_base_v2 5 | 6 | pretrained_path: "../../../test/ckpt_v22" 7 | 8 | data: 9 | augment_flip: true 10 | 11 | optim: # Optimizer settings 12 | base_lr: 1e-3 # Should be scaled with the number of devices present 13 | batch_size: 128 # This is the batch size per GPU 14 | total_steps: 65536 15 | warmup_steps: 2000 16 | grad_acc: 4 17 | final_cosine: 1e-5 18 | -------------------------------------------------------------------------------- /configs/inference/v23.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v23 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/ckpt_v23' # Path to trained model 8 | version: 'Mapperatorinator V23' # Beatmap version 9 | super_timing: true # Use super timing generator (slow but accurate timing) 10 | timing_leniency: 3 # Number of milliseconds of error to allow for timing generation 11 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 12 | max_batch_size: 8 13 | -------------------------------------------------------------------------------- /configs/legacy/inference_v18.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_v18 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V18' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | in_context: ["none"] # Context type of other beatmap 11 | timeshift_bias: -1.5 # Logit bias for sampling timeshift tokens 12 | -------------------------------------------------------------------------------- /configs/legacy/train_v6.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | 14 | dataloader: # Dataloader settings 15 | num_workers: 3 16 | 17 | optim: # Optimizer settings 18 | batch_size: 128 19 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/legacy/train_v9.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'bf16' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | 14 | dataloader: # Dataloader settings 15 | num_workers: 3 16 | 17 | optim: # Optimizer settings 18 | batch_size: 128 19 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/model/whisper_tiny_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'Tiger14n/ropewhisper-tiny' 6 | input_features: true 7 | project_encoder_input: false 8 | 9 | do_style_embed: false 10 | do_difficulty_embed: true 11 | do_mapper_embed: true 12 | do_song_position_embed: true 13 | cond_dim: 128 14 | cond_size: 384 15 | 16 | spectrogram: 17 | implementation: 'torchaudio' 18 | log_scale: true 19 | n_mels: 80 20 | f_min: 20 21 | pad_mode: 'reflect' 22 | 23 | overwrite: 24 | tie_word_embeddings: false -------------------------------------------------------------------------------- /configs/legacy/train_v1.1.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | tgt_seq_len: 512 11 | center_pad_decoder: true # Center pad decoder input 12 | 13 | dataloader: # Dataloader settings 14 | num_workers: 3 15 | 16 | optim: # Optimizer settings 17 | batch_size: 128 18 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/model/whisper_small_v2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - _self_ 4 | 5 | name: 'Tiger14n/ropewhisper-small' 6 | input_features: true 7 | project_encoder_input: false 8 | 9 | do_style_embed: false 10 | do_difficulty_embed: true 11 | do_mapper_embed: true 12 | do_song_position_embed: true 13 | cond_dim: 128 14 | cond_size: 384 15 | 16 | spectrogram: 17 | implementation: 'torchaudio' 18 | log_scale: true 19 | n_mels: 80 20 | f_min: 20 21 | pad_mode: 'reflect' 22 | 23 | overwrite: 24 | tie_word_embeddings: false -------------------------------------------------------------------------------- /configs/inference/v28.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v28 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: 'OliBomby/Mapperatorinator-v28' 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator V28' # Beatmap version 10 | output_type: [TIMING, KIAI, MAP, SV] # Output type (map, timing) 11 | super_timing: true # Use super timing generator (slow but accurate timing) 12 | timing_leniency: 3 # Number of milliseconds of error to allow for timing generation 13 | max_batch_size: 8 -------------------------------------------------------------------------------- /rcomplexion/README.md: -------------------------------------------------------------------------------- 1 | # RComplexion 2 | 3 | RComplexion is an attempt to estimate the complexity of rhythm in osu! beatmaps using cross entropy. 4 | A deep model is trained to predict the timing of the next note in a beatmap given the timing of the previous notes. 5 | The theory is that the more complex the rhythm, the harder it is to predict the timing of the next note. 6 | 7 | See `datasets/rhythm_complexities.csv` for the estimated complexities of some beatmaps. 8 | The first column is the beatmap ID, and the second column is the estimated complexity. 9 | -------------------------------------------------------------------------------- /osu_diffusion/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [[source]] 7 | url = "https://download.pytorch.org/whl/cu117" 8 | verify_ssl = true 9 | name = "downloadpytorch" 10 | 11 | [packages] 12 | torch = {version = "*", index = "downloadpytorch"} 13 | torchvision = {version = "*", index = "downloadpytorch"} 14 | torchaudio = {version = "*", index = "downloadpytorch"} 15 | scipy = "*" 16 | matplotlib = "*" 17 | tqdm = "*" 18 | 19 | [dev-packages] 20 | pre-commit = "*" 21 | 22 | [requires] 23 | python_version = "3.11" 24 | -------------------------------------------------------------------------------- /configs/legacy/train_v10.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_base 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | 14 | dataloader: # Dataloader settings 15 | num_workers: 3 16 | 17 | optim: # Optimizer settings 18 | base_lr: 1e-2 # Should be scaled with the number of devices present 19 | batch_size: 128 20 | grad_acc: 32 -------------------------------------------------------------------------------- /configs/legacy/train_v8.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | 14 | dataloader: # Dataloader settings 15 | num_workers: 3 16 | 17 | optim: # Optimizer settings 18 | base_lr: 5e-3 # Should be scaled with the number of devices present 19 | batch_size: 128 20 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/legacy/train_v14.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v9 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | timing_random_offset: 2 13 | tgt_seq_len: 512 14 | 15 | dataloader: # Dataloader settings 16 | num_workers: 8 17 | 18 | optim: # Optimizer settings 19 | base_lr: 5e-3 # Should be scaled with the number of devices present 20 | batch_size: 128 21 | grad_acc: 4 -------------------------------------------------------------------------------- /configs/legacy/train_v11.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | timing_random_offset: 2 14 | 15 | dataloader: # Dataloader settings 16 | num_workers: 3 17 | 18 | optim: # Optimizer settings 19 | base_lr: 1e-2 # Should be scaled with the number of devices present 20 | batch_size: 128 21 | grad_acc: 8 -------------------------------------------------------------------------------- /classifier/configs/inference.yaml: -------------------------------------------------------------------------------- 1 | compile: true # PyTorch 2.0 optimization 2 | device: gpu # Training device (cpu/gpu) 3 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 4 | checkpoint_path: 'OliBomby/osu-classifier' # Project checkpoint directory (to resume training) 5 | beatmap_path: '' # Path to beatmap to classify 6 | audio_path: '' # Path to audio to classify 7 | time: 0 # Time to classify 8 | mappers_path: './/datasets/beatmap_users.json' # Path to mappers dataset 9 | 10 | hydra: 11 | job: 12 | chdir: False 13 | run: 14 | dir: ./logs/${now:%Y-%m-%d}/${now:%H-%M-%S} -------------------------------------------------------------------------------- /configs/inference/v29.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v29 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: 'OliBomby/Mapperatorinator-v29.1' 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator V29.1' # Beatmap version 10 | output_type: [TIMING, KIAI, MAP, SV] # Output type (map, timing) 11 | super_timing: true # Use super timing generator (slow but accurate timing) 12 | timing_leniency: 3 # Number of milliseconds of error to allow for timing generation 13 | temperature: 0.9 # Sampling temperature 14 | top_p: 0.9 # Top-p sampling threshold 15 | max_batch_size: 8 -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel 2 | 3 | RUN apt-get -y update && apt-get -y upgrade && apt-get install -y git && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 4 | RUN pip install accelerate pydub nnAudio PyYAML transformers==4.53.3 hydra-core tensorboard lightning pandas pyarrow einops 'git+https://github.com/OliBomby/slider.git@gedagedigedagedaoh#egg=slider' torch_tb_profiler wandb ninja peft 5 | RUN MAX_JOBS=4 pip install flash-attn==2.7.4.post1 --no-build-isolation 6 | 7 | # Modify .bashrc to include the custom prompt 8 | RUN echo 'if [ -f /.dockerenv ]; then export PS1="(docker) $PS1"; fi' >> /root/.bashrc 9 | -------------------------------------------------------------------------------- /configs/legacy/train_v4.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | add_empty_sequences: false 13 | add_empty_sequences_at_step: 15000 14 | add_pre_tokens: false 15 | add_pre_tokens_at_step: 15000 16 | max_pre_token_len: -1 17 | 18 | dataloader: # Dataloader settings 19 | num_workers: 3 20 | 21 | optim: # Optimizer settings 22 | batch_size: 128 23 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/model/default.yaml: -------------------------------------------------------------------------------- 1 | input_features: false 2 | project_encoder_input: true 3 | embed_decoder_input: true 4 | manual_norm_weights: false 5 | 6 | # Information to be fed to the model directly 7 | do_style_embed: true 8 | do_difficulty_embed: false 9 | do_mapper_embed: false 10 | do_song_position_embed: false 11 | cond_dim: 128 12 | cond_size: 0 13 | 14 | rope_type: "dynamic" 15 | rope_encoder_scaling_factor: 1.0 16 | rope_decoder_scaling_factor: 1.0 17 | 18 | spectrogram: 19 | implementation: 'nnAudio' 20 | log_scale: false 21 | sample_rate: 16000 22 | hop_length: 128 23 | n_fft: 1024 24 | n_mels: 388 25 | f_min: 0 26 | f_max: 8000 27 | pad_mode: 'constant' -------------------------------------------------------------------------------- /routed_pickle.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | from typing import Dict 3 | 4 | 5 | class Unpickler(pickle.Unpickler): 6 | load_module_mapping: Dict[str, str] = { 7 | 'osuT5.tokenizer.event': 'osuT5.osuT5.event', 8 | 'libs.tokenizer.event': 'classifier.libs.tokenizer.event', 9 | 'libs.tokenizer.tokenizer': 'classifier.libs.tokenizer.tokenizer', 10 | 'osuT5.event': 'osuT5.osuT5.event', 11 | 'libs.event': 'classifier.libs.tokenizer.event', 12 | 'libs.tokenizer': 'classifier.libs.tokenizer.tokenizer', 13 | } 14 | 15 | def find_class(self, mod_name, name): 16 | mod_name = self.load_module_mapping.get(mod_name, mod_name) 17 | return super().find_class(mod_name, name) 18 | -------------------------------------------------------------------------------- /classifier/libs/utils/routed_pickle.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | from typing import Dict 3 | 4 | 5 | class Unpickler(pickle.Unpickler): 6 | load_module_mapping: Dict[str, str] = { 7 | 'osuT5.tokenizer.event': 'osuT5.osuT5.event', 8 | 'libs.tokenizer.event': 'classifier.libs.tokenizer.event', 9 | 'libs.tokenizer.tokenizer': 'classifier.libs.tokenizer.tokenizer', 10 | 'osuT5.event': 'osuT5.osuT5.event', 11 | 'libs.event': 'classifier.libs.tokenizer.event', 12 | 'libs.tokenizer': 'classifier.libs.tokenizer.tokenizer', 13 | } 14 | 15 | def find_class(self, mod_name, name): 16 | mod_name = self.load_module_mapping.get(mod_name, mod_name) 17 | return super().find_class(mod_name, name) 18 | -------------------------------------------------------------------------------- /configs/legacy/train_v7.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_base 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'bf16' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | src_seq_len: 1024 11 | tgt_seq_len: 512 12 | add_diff_token: true 13 | add_style_token: true 14 | max_pre_token_len: 4 15 | 16 | dataloader: # Dataloader settings 17 | num_workers: 8 18 | 19 | optim: # Optimizer settings 20 | batch_size: 126 21 | grad_acc: 21 22 | # base_lr: 4e-2 # Should be scaled with the number of devices present 23 | # final_cosine: 2e-5 24 | 25 | logging: # Logging settings 26 | every_steps: 10 -------------------------------------------------------------------------------- /osu_diffusion/testing/print_ckpt.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | 4 | def print_state_dict(obj): 5 | for param_tensor in obj: 6 | param = obj[param_tensor] if isinstance(obj, dict) else param_tensor 7 | if isinstance(param, dict) or isinstance(param, list): 8 | print(param_tensor, "\t", "state dict:") 9 | print_state_dict(param) 10 | elif isinstance(param, torch.Tensor): 11 | print(param_tensor, "\t", param.size()) 12 | else: 13 | print(param_tensor, "\t", param) 14 | 15 | 16 | ckpt = torch.load("D:\\DiT-B-0130000.pt") 17 | embedding_table = ckpt["ema"]["y_embedder.embedding_table.weight"] 18 | 19 | # Print model's state_dict 20 | print("Model's state_dict:") 21 | print_state_dict(ckpt) 22 | -------------------------------------------------------------------------------- /configs/legacy/train_v15.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v9 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | timing_random_offset: 2 13 | tgt_seq_len: 512 14 | rhythm_weight: 2.0 # Weight of rhythm tokens in the loss calculation 15 | sample_weights_path: "../../../datasets/rhythm_complexities.csv" # Path to sample weights 16 | 17 | dataloader: # Dataloader settings 18 | num_workers: 8 19 | 20 | optim: # Optimizer settings 21 | base_lr: 1e-2 # Should be scaled with the number of devices present 22 | batch_size: 128 23 | grad_acc: 4 -------------------------------------------------------------------------------- /rcomplexion/libs/tokenizer/event.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import dataclasses 4 | from enum import Enum 5 | 6 | 7 | class EventType(Enum): 8 | TIME_SHIFT = "t" 9 | CIRCLE = "circle" 10 | SPINNER = "spinner" 11 | SPINNER_END = "spinner_end" 12 | SLIDER_HEAD = "slider_head" 13 | LAST_ANCHOR = "last_anchor" 14 | SLIDER_END = "slider_end" 15 | 16 | 17 | @dataclasses.dataclass 18 | class EventRange: 19 | type: EventType 20 | min_value: int 21 | max_value: int 22 | 23 | 24 | @dataclasses.dataclass 25 | class Event: 26 | type: EventType 27 | value: int = 0 28 | 29 | def __repr__(self) -> str: 30 | return f"{self.type.value}{self.value}" 31 | 32 | def __str__(self) -> str: 33 | return f"{self.type.value}{self.value}" 34 | -------------------------------------------------------------------------------- /configs/legacy/train_v13.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | max_pre_token_len: 4 13 | timing_random_offset: 2 14 | rhythm_weight: 4.0 # Weight of rhythm tokens in the loss calculation 15 | # sample_weights_path: "../../../datasets/rhythm_complexities.csv" # Path to sample weights 16 | 17 | dataloader: # Dataloader settings 18 | num_workers: 3 19 | 20 | optim: # Optimizer settings 21 | base_lr: 5e-3 # Should be scaled with the number of devices present 22 | batch_size: 128 23 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/inference/v30.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v30 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: 'OliBomby/Mapperatorinator-v30' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator V30' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | generate_positions: false 15 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/legacy/train_v10_gd.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_base 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | pretrained_path: '' # Path to pretrained model weights (to do transfer learning) 9 | 10 | data: # Data settings 11 | add_diff_token: true 12 | add_style_token: true 13 | max_pre_token_len: 4 14 | add_gd_context: true # Prefix the decoder with tokens of another beatmap in the mapset 15 | 16 | dataloader: # Dataloader settings 17 | num_workers: 6 18 | 19 | optim: # Optimizer settings 20 | base_lr: 2e-3 # Should be scaled with the number of devices present 21 | batch_size: 128 22 | grad_acc: 16 23 | total_steps: 32768 24 | warmup_steps: 5000 -------------------------------------------------------------------------------- /configs/legacy/train_v8_gd.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | pretrained_path: '' # Path to pretrained model weights (to do transfer learning) 9 | 10 | data: # Data settings 11 | add_diff_token: true 12 | add_style_token: true 13 | max_pre_token_len: 4 14 | add_gd_context: true # Prefix the decoder with tokens of another beatmap in the mapset 15 | 16 | dataloader: # Dataloader settings 17 | num_workers: 3 18 | 19 | optim: # Optimizer settings 20 | batch_size: 128 21 | grad_acc: 8 22 | base_lr: 1.25e-3 # Should be scaled with the number of devices present 23 | total_steps: 32768 24 | warmup_steps: 5000 -------------------------------------------------------------------------------- /configs/legacy/train_v12.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v4 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_style_token: true 12 | add_pre_tokens: false 13 | timing_random_offset: 2 14 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 15 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 16 | 17 | dataloader: # Dataloader settings 18 | num_workers: 3 19 | 20 | optim: # Optimizer settings 21 | base_lr: 1e-2 # Should be scaled with the number of devices present 22 | batch_size: 128 23 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/inference/tiny_dist5.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist5 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist5/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist5' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist6.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist6 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist6/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist6' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist7.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist7 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist7/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist7' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist8.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist8 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist8/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist8' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist9.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist8 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist9/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist9' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /classifier/test.py: -------------------------------------------------------------------------------- 1 | import hydra 2 | import lightning 3 | import torch 4 | from omegaconf import DictConfig 5 | 6 | from classifier.libs.utils import load_ckpt 7 | from libs import ( 8 | get_dataloaders, 9 | ) 10 | 11 | torch.set_float32_matmul_precision('high') 12 | 13 | 14 | @hydra.main(config_path="configs", config_name="train_v1", version_base="1.1") 15 | def main(args: DictConfig): 16 | model, model_args, tokenizer = load_ckpt(args.checkpoint_path, route_pickle=False) 17 | 18 | _, val_dataloader = get_dataloaders(tokenizer, args) 19 | 20 | if args.compile: 21 | model.model = torch.compile(model.model) 22 | 23 | trainer = lightning.Trainer( 24 | accelerator=args.device, 25 | precision=args.precision, 26 | ) 27 | 28 | trainer.test(model, val_dataloader) 29 | 30 | 31 | if __name__ == "__main__": 32 | main() 33 | -------------------------------------------------------------------------------- /configs/inference/tiny_dist10.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist10/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist10' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist11.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist11/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist11' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist12.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist12 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist12/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist12' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist13.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist13 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist13/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist13' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist14.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist14 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist14/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist14' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist17.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist17 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist17/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist17' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist19.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist19 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist19/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist19' 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist15.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist15 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist15/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist15' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist16.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist16 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist16/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist16' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist18.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist18 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist18/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist18' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist20.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist20 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist20/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist20' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist21.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist21 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist21/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist21' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist22.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist22 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist22/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist22' 10 | in_context: [] 11 | output_type: [TIMING, MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/v31.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: v31 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: 'OliBomby/Mapperatorinator-v31' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator V31' # Beatmap version 10 | output_type: [TIMING, KIAI, MAP, SV] # Output type (map, timing) 11 | temperature: 0.9 # Sampling temperature 12 | top_p: 0.9 # Top-p sampling threshold 13 | max_batch_size: 8 # Maximum batch size for inference 14 | generate_positions: false 15 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /compose.yaml: -------------------------------------------------------------------------------- 1 | name: mapperatorinator 2 | services: 3 | mapperatorinator: 4 | stdin_open: true 5 | tty: true 6 | deploy: 7 | resources: 8 | reservations: 9 | devices: 10 | - driver: nvidia 11 | count: all 12 | capabilities: 13 | - gpu 14 | volumes: 15 | - .:/workspace/Mapperatorinator 16 | - ../datasets:/workspace/datasets 17 | network_mode: host 18 | container_name: mapperatorinator_space 19 | shm_size: 8gb 20 | build: . 21 | # image: my_fixed_image 22 | command: /bin/bash 23 | environment: 24 | - PROJECT_PATH=/workspace/Mapperatorinator 25 | - WANDB_API_KEY=${WANDB_API_KEY} 26 | - WANDB_ENTITY=${WANDB_ENTITY} -------------------------------------------------------------------------------- /configs/inference/tiny_dist.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist2.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist3 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist2/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist2' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist3.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist3 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist3/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist3' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_dist4.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_dist4 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-dist4/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny dist4' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/inference/tiny_nodist.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default 3 | - ../train@train: tiny_nodist 4 | - ../diffusion@diffusion: v1 5 | - _self_ 6 | 7 | model_path: './test/tiny-nodist/' # Path to trained model 8 | diff_ckpt: 'OliBomby/osu-diffusion-v2' 9 | version: 'Mapperatorinator tiny nodist' # Beatmap version 10 | in_context: [] 11 | output_type: [MAP] # Output type (map, timing) 12 | temperature: 0.9 # Sampling temperature 13 | top_p: 0.9 # Top-p sampling threshold 14 | max_batch_size: 32 # Maximum batch size for inference 15 | generate_positions: false 16 | timesteps: [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process -------------------------------------------------------------------------------- /configs/legacy/inference_timer_v24.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - inference 3 | - osut5: train_timer_v24 4 | - diffusion: v1 5 | - _self_ 6 | 7 | version: 'osuT5 V24' # Beatmap version 8 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 9 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 10 | in_context: ["none"] # Context type of other beatmap 11 | temperature: 0.9 # Sampling temperature 12 | top_p: 0.95 # Top-p sampling threshold 13 | 14 | # Diffusion settings 15 | random_init: false 16 | #timesteps: [50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process 17 | timesteps: [100,0,0,0,0,0,0,0,0,0] # The number of timesteps we want to take from equally-sized portions of the original process 18 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: OliBomby 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /osu_diffusion/testing/find_similar_beatmaps.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | from pathlib import Path 3 | 4 | import numpy as np 5 | import scipy 6 | import torch 7 | 8 | 9 | # beatmap_id = int(input("Input beatmap ID: ")) 10 | beatmap_id = 2116103 11 | 12 | p = Path(__file__).parent.with_name("beatmap_idx.pickle") 13 | with p.open("rb") as f: 14 | beatmap_idx = pickle.load(f) 15 | idx_beatmap = {v: k for k, v in beatmap_idx.items()} 16 | 17 | idx = beatmap_idx[beatmap_id] 18 | 19 | ckpt = torch.load( 20 | "D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new\\s512\\0080000.pt", 21 | ) 22 | embedding_table = ckpt["ema"]["y_embedder.embedding_table.weight"].cpu() 23 | 24 | query = embedding_table[idx] 25 | dist = scipy.spatial.distance.cdist(embedding_table, query.unsqueeze(0))[:, 0] 26 | 27 | k = 10 28 | min_idx = np.argpartition(dist, -k)[-k:] 29 | for x in min_idx: 30 | try: 31 | print(idx_beatmap[x], dist[x]) 32 | except KeyError: 33 | pass 34 | -------------------------------------------------------------------------------- /excepthook.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | # Store the original excepthook 4 | original_excepthook = sys.excepthook 5 | 6 | 7 | def custom_excepthook(exc_type, exc_value, exc_traceback): 8 | """ 9 | Custom exception hook to modify ModuleNotFoundError messages. 10 | """ 11 | if issubclass(exc_type, ModuleNotFoundError): 12 | # Still print the original traceback for debugging purposes 13 | original_excepthook(exc_type, exc_value, exc_traceback) 14 | 15 | missing_module = str(exc_value).split("'")[-2] # Extract the module name 16 | print(f"\nError: The module '{missing_module}' was not found.", file=sys.stderr) 17 | print("To fix this, please ensure all required packages are installed by running:", file=sys.stderr) 18 | print("`pip install -r requirements.txt`", file=sys.stderr) 19 | else: 20 | # For other exceptions, call the original excepthook 21 | original_excepthook(exc_type, exc_value, exc_traceback) 22 | 23 | # Set the custom excepthook 24 | sys.excepthook = custom_excepthook 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 OliBomby 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | services: 3 | # Update this to the name of the service you want to work with in your docker-compose.yml file 4 | mapperatorinator: 5 | # Uncomment if you want to override the service's Dockerfile to one in the .devcontainer 6 | # folder. Note that the path of the Dockerfile and context is relative to the *primary* 7 | # docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile" 8 | # array). The sample below assumes your primary file is in the root of your project. 9 | # 10 | # build: 11 | # context: . 12 | # dockerfile: .devcontainer/Dockerfile 13 | 14 | volumes: 15 | # Update this to wherever you want VS Code to mount the folder of your project 16 | - ..:/workspace:cached 17 | 18 | # Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust. 19 | # cap_add: 20 | # - SYS_PTRACE 21 | # security_opt: 22 | # - seccomp:unconfined 23 | 24 | # Overrides default command so things don't shut down after the process ends. 25 | command: /bin/sh -c "while sleep 1000; do :; done" 26 | 27 | -------------------------------------------------------------------------------- /osuT5/plot_difficulties.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import json 3 | from pathlib import Path 4 | import matplotlib.pyplot as plt 5 | 6 | from tqdm import tqdm 7 | 8 | 9 | def main(args): 10 | path = Path(args.dataset_path) 11 | diffs = [] 12 | 13 | print("Collecting beatmap difficulties...") 14 | 15 | for track in tqdm(path.iterdir()): 16 | if not track.is_dir(): 17 | continue 18 | metadata_file = track / "metadata.json" 19 | with open(metadata_file) as f: 20 | metadata = json.load(f) 21 | for beatmap_name in metadata["Beatmaps"]: 22 | beatmap_metadata = metadata["Beatmaps"][beatmap_name] 23 | diff = beatmap_metadata["StandardStarRating"]["0"] 24 | diffs.append(diff) 25 | 26 | # Plot the difficulties as a histogram 27 | plt.hist(diffs, bins=50) 28 | plt.xlabel("Difficulty") 29 | plt.ylabel("Count") 30 | plt.title("Beatmap Difficulty Distribution") 31 | plt.show() 32 | 33 | print("Done.") 34 | 35 | if __name__ == "__main__": 36 | parser = argparse.ArgumentParser() 37 | parser.add_argument("--dataset_path", type=str) 38 | args = parser.parse_args() 39 | 40 | main(args) 41 | -------------------------------------------------------------------------------- /osuT5/osuT5/inference/template.osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: $audio_filename 5 | AudioLeadIn: 0 6 | PreviewTime: $preview_time 7 | Countdown: 0 8 | SampleSet: All 9 | StackLeniency: 0.7 10 | Mode: $mode 11 | LetterboxInBreaks: 0 12 | WidescreenStoryboard: 1 13 | OverlayPosition: Above 14 | 15 | [Editor] 16 | Bookmarks:-330001 17 | DistanceSpacing: 1.0 18 | BeatDivisor: 4 19 | GridSize: 8 20 | TimelineZoom: 2.20004 21 | 22 | [Metadata] 23 | Title:$title 24 | TitleUnicode:$title_unicode 25 | Artist:$artist 26 | ArtistUnicode:$artist_unicode 27 | Creator:$creator 28 | Version:$version 29 | Source:$source 30 | Tags:$tags 31 | 32 | [Difficulty] 33 | HPDrainRate:$hp_drain_rate 34 | CircleSize:$circle_size 35 | OverallDifficulty:$overall_difficulty 36 | ApproachRate:$approach_rate 37 | SliderMultiplier:$slider_multiplier 38 | SliderTickRate:$slider_tick_rate 39 | 40 | [Events] 41 | //Background and Video events 42 | $background_line//Break Periods 43 | //Storyboard Layer 0 (Background) 44 | //Storyboard Layer 1 (Fail) 45 | //Storyboard Layer 2 (Pass) 46 | //Storyboard Layer 3 (Foreground) 47 | //Storyboard Layer 4 (Overlay) 48 | //Storyboard Sound Samples 49 | 50 | [TimingPoints] 51 | $timing_points 52 | 53 | [Colours] 54 | 55 | [HitObjects] 56 | $hit_objects -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test0].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test0 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 136,230,300,2,0,P|182:164|290:194,1,200 58 | 219,240,1050,1,0,0:0:0:0: 59 | -------------------------------------------------------------------------------- /osu_diffusion/.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # See https://pre-commit.com for more information 2 | # See https://pre-commit.com/hooks.html for more hooks 3 | repos: 4 | - repo: https://github.com/pre-commit/pre-commit-hooks 5 | rev: v4.4.0 6 | hooks: 7 | - id: check-ast 8 | - id: check-builtin-literals 9 | - id: debug-statements 10 | - id: end-of-file-fixer 11 | - id: requirements-txt-fixer 12 | - id: trailing-whitespace 13 | - repo: https://github.com/psf/black 14 | rev: 23.7.0 15 | hooks: 16 | - id: black 17 | - repo: https://github.com/asottile/pyupgrade 18 | rev: v3.10.1 19 | hooks: 20 | - id: pyupgrade 21 | args: [--py311-plus, --keep-runtime-typing] 22 | - repo: https://github.com/asottile/reorder-python-imports 23 | rev: v3.10.0 24 | hooks: 25 | - id: reorder-python-imports 26 | args: [--py311-plus] 27 | - repo: https://github.com/asottile/add-trailing-comma 28 | rev: v3.1.0 29 | hooks: 30 | - id: add-trailing-comma 31 | - repo: https://github.com/asottile/blacken-docs 32 | rev: 1.16.0 33 | hooks: 34 | - id: blacken-docs 35 | - repo: https://github.com/hadialqattan/pycln 36 | rev: v2.2.2 37 | hooks: 38 | - id: pycln 39 | 40 | default_language_version: 41 | python: python3.11 42 | -------------------------------------------------------------------------------- /osuT5/osuT5/utils/init_utils.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import os 3 | 4 | from accelerate.utils import set_seed 5 | from omegaconf import open_dict 6 | 7 | from ..config import TrainConfig 8 | 9 | 10 | def check_args_and_env(args: TrainConfig) -> None: 11 | assert args.optim.batch_size % args.optim.grad_acc == 0 12 | # Train log must happen before eval log 13 | assert args.eval.every_steps % args.logging.every_steps == 0 14 | 15 | if args.device == "gpu": 16 | assert torch.cuda.is_available(), "We use GPU to train/eval the model" 17 | 18 | 19 | def opti_flags(args: TrainConfig) -> None: 20 | # This lines reduce training step by 2.4x 21 | torch.backends.cuda.matmul.allow_tf32 = True 22 | torch.backends.cudnn.allow_tf32 = True 23 | 24 | 25 | def update_args_with_env_info(args: TrainConfig) -> None: 26 | with open_dict(args): 27 | slurm_id = os.getenv("SLURM_JOB_ID") 28 | 29 | if slurm_id is not None: 30 | args.slurm_id = slurm_id 31 | else: 32 | args.slurm_id = "none" 33 | 34 | args.working_dir = os.getcwd() 35 | 36 | 37 | def setup_args(args: TrainConfig) -> None: 38 | check_args_and_env(args) 39 | update_args_with_env_info(args) 40 | opti_flags(args) 41 | 42 | if args.seed is not None: 43 | set_seed(args.seed) 44 | -------------------------------------------------------------------------------- /configs/train/lora.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - v30 3 | - _self_ 4 | 5 | compile: true # PyTorch 2.0 optimization 6 | precision: 'bf16' # Enable mixed precision (no/fp16/bf16/fp8) 7 | flash_attention: false # Enable Flash Attention 8 | enable_lora: true # Use LoRA for finetuning 9 | 10 | pretrained_path: "OliBomby/Mapperatorinator-v30" # Path to pretrained model weights 11 | 12 | data: # Data settings 13 | dataset_type: "mmrs" 14 | train_dataset_path: "" 15 | test_dataset_path: "" 16 | train_dataset_start: 0 17 | train_dataset_end: 38689 18 | test_dataset_start: 38689 19 | test_dataset_end: 39389 20 | 21 | optim: # Optimizer settings 22 | name: muon 23 | base_lr: 0.0004 # Should be scaled with the number of devices present 24 | base_lr_2: 0.0001 # Secondary learning rate for the internal optimizer 25 | batch_size: 32 26 | grad_acc: 16 27 | total_steps: 1000 28 | warmup_steps: 0 29 | sustain_steps: 0 # Steps to sustain the learning rate after warmup 30 | weight_decay: 0.01 31 | lr_scheduler: cosine 32 | final_cosine: 0 33 | 34 | lora: 35 | r: 64 36 | lora_alpha: 128 37 | target_modules: ['k_proj', 'v_proj', 'q_proj', 'out_proj'] 38 | lora_dropout: 0.05 39 | bias: "none" 40 | init_lora_weights: "pissa" 41 | 42 | -------------------------------------------------------------------------------- /rcomplexion/libs/utils/init_utils.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import os 3 | 4 | from accelerate.utils import set_seed 5 | from omegaconf import open_dict, DictConfig 6 | from hydra.utils import to_absolute_path 7 | 8 | 9 | def check_args_and_env(args: DictConfig) -> None: 10 | assert args.optim.batch_size % args.optim.grad_acc == 0 11 | # Train log must happen before eval log 12 | assert args.eval.every_steps % args.logging.every_steps == 0 13 | 14 | if args.device == "gpu": 15 | assert torch.cuda.is_available(), "We use GPU to train/eval the model" 16 | 17 | 18 | def opti_flags(args: DictConfig) -> None: 19 | # This lines reduce training step by 2.4x 20 | torch.backends.cuda.matmul.allow_tf32 = True 21 | torch.backends.cudnn.allow_tf32 = True 22 | 23 | 24 | def update_args_with_env_info(args: DictConfig) -> None: 25 | with open_dict(args): 26 | slurm_id = os.getenv("SLURM_JOB_ID") 27 | 28 | if slurm_id is not None: 29 | args.slurm_id = slurm_id 30 | else: 31 | args.slurm_id = "none" 32 | 33 | args.working_dir = os.getcwd() 34 | 35 | 36 | def setup_args(args: DictConfig) -> None: 37 | check_args_and_env(args) 38 | update_args_with_env_info(args) 39 | opti_flags(args) 40 | 41 | if args.seed is not None: 42 | set_seed(args.seed) 43 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test12].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test12 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 130,300,333,1,0,0:0:0:0: 59 | 69,93,499,1,0,0:0:0:0: 60 | 197,273,666,5,0,0:0:0:0: 61 | 136,66,832,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test2].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test2 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 68,134,333,1,0,0:0:0:0: 59 | 155,116,499,1,0,0:0:0:0: 60 | 137,27,666,1,0,0:0:0:0: 61 | 49,46,833,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test8].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test8 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 200,306,333,1,0,0:0:0:0: 59 | 311,77,499,1,0,0:0:0:0: 60 | 141,136,666,1,0,0:0:0:0: 61 | 370,247,833,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test0].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test0 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 256,255,333,1,0,0:0:0:0: 59 | 192,192,416,1,0,0:0:0:0: 60 | 256,128,500,1,0,0:0:0:0: 61 | 319,192,583,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test11].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test11 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 256,384,333,1,0,0:0:0:0: 59 | 448,192,666,1,0,0:0:0:0: 60 | 256,0,999,1,0,0:0:0:0: 61 | 64,192,1333,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test1].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test1 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 256,255,333,1,0,0:0:0:0: 59 | 192,192,499,1,0,0:0:0:0: 60 | 256,128,666,1,0,0:0:0:0: 61 | 319,192,833,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test1].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test1 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 279,221,600,2,0,P|233:287|125:257,1,200 58 | 196,211,1500,1,0,0:0:0:0: 59 | 163,137,1800,2,0,P|209:71|317:101,1,200 60 | 246,147,2700,1,0,0:0:0:0: 61 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test6].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.700006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test6 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 600,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 113,126,750,2,0,L|239:107,1,100 59 | 111,116,1125,2,0,L|237:97,1,100 60 | 176,226,1500,1,0,0:0:0:0: 61 | 174,216,1687,1,0,0:0:0:0: 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test9].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.700006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test9 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:6 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 281,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 222,151,375,2,0,P|174:156|149:198,1,100 59 | 206,205,750,2,0,P|211:253|253:279,1,100 60 | 261,222,1125,2,0,P|309:216|334:175,1,100 61 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test5].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.700006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test5 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 600,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 134,124,750,2,0,L|195:114,1,50 59 | 137,132,937,2,0,L|198:122,1,50 60 | 270,154,1125,6,0,L|331:164,1,50 61 | 267,162,1312,2,0,L|328:172,1,50 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test4].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test4 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 316,381,333,1,0,0:0:0:0: 59 | 93,308,499,1,0,0:0:0:0: 60 | 93,73,666,1,0,0:0:0:0: 61 | 316,0,833,1,0,0:0:0:0: 62 | 454,192,999,1,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test7].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test7 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 303,337,333,1,0,0:0:0:0: 59 | 132,101,499,1,0,0:0:0:0: 60 | 409,192,666,1,0,0:0:0:0: 61 | 132,282,833,1,0,0:0:0:0: 62 | 303,46,999,1,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test3].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test3 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 285,283,333,1,0,0:0:0:0: 59 | 178,248,499,1,0,0:0:0:0: 60 | 178,135,666,1,0,0:0:0:0: 61 | 285,100,833,1,0,0:0:0:0: 62 | 351,192,999,1,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /classifier/libs/tokenizer/event.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import dataclasses 4 | from enum import Enum 5 | 6 | 7 | class EventType(Enum): 8 | TIME_SHIFT = "t" 9 | SNAPPING = "snap" 10 | DISTANCE = "dist" 11 | NEW_COMBO = "new_combo" 12 | HITSOUND = "hitsound" 13 | VOLUME = "volume" 14 | CIRCLE = "circle" 15 | SPINNER = "spinner" 16 | SPINNER_END = "spinner_end" 17 | SLIDER_HEAD = "slider_head" 18 | BEZIER_ANCHOR = "bezier_anchor" 19 | PERFECT_ANCHOR = "perfect_anchor" 20 | CATMULL_ANCHOR = "catmull_anchor" 21 | RED_ANCHOR = "red_anchor" 22 | LAST_ANCHOR = "last_anchor" 23 | SLIDER_END = "slider_end" 24 | BEAT = "beat" 25 | MEASURE = "measure" 26 | TIMING_POINT = "timing_point" 27 | STYLE = "style" 28 | DIFFICULTY = "difficulty" 29 | MAPPER = "mapper" 30 | DESCRIPTOR = "descriptor" 31 | POS_X = "pos_x" 32 | POS_Y = "pos_y" 33 | POS = "pos" 34 | CS = "cs" 35 | 36 | 37 | @dataclasses.dataclass 38 | class EventRange: 39 | type: EventType 40 | min_value: int 41 | max_value: int 42 | 43 | 44 | @dataclasses.dataclass 45 | class Event: 46 | type: EventType 47 | value: int = 0 48 | 49 | def __repr__(self) -> str: 50 | return f"{self.type.value}{self.value}" 51 | 52 | def __str__(self) -> str: 53 | return f"{self.type.value}{self.value}" 54 | -------------------------------------------------------------------------------- /osu_diffusion/testing/find_unique_beatmaps.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import scipy 4 | import torch 5 | 6 | 7 | def get_maps(mapper): 8 | regex = f"(?!\\s?(de\\s)?(it|that|{mapper}))(((^|[^\\S\r\n])(\\S)*([sz]'|'s))|((^|[^\\S\r\n])de\\s(\\S)*))" 9 | return df[ 10 | ((df["Creator"] == mapper) | df["Version"].str.contains(mapper)) 11 | & ~df["Version"].str.contains(regex) 12 | ] 13 | 14 | 15 | mapper = input("Input mapper name: ") 16 | mapper = "Sotarks" 17 | 18 | df = pd.read_pickle("beatmap_df.pkl") 19 | # print("Number of unique beatmap IDs = %s" % df["BeatmapID"].nunique()) 20 | # id_counts = df["BeatmapID"].value_counts() 21 | # duplicated = id_counts[id_counts > 1] 22 | # print(df[df["BeatmapID"].isin(duplicated.index)]) 23 | ckpt = torch.load("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\DiT-B-0130000.pt") 24 | 25 | maps = get_maps(mapper) 26 | print(f"Found {len(maps)} beatmaps.") 27 | embedding_table = ckpt["ema"]["y_embedder.embedding_table.weight"].cpu().numpy() 28 | 29 | query = embedding_table[maps.index] 30 | dist = np.mean(scipy.spatial.distance.cdist(embedding_table, query), 0) 31 | 32 | k = min(10, len(dist)) 33 | min_idx = np.argpartition(dist, -k)[-k:] 34 | for x in min_idx: 35 | print( 36 | dist[x], 37 | f"{maps.iloc[x]['Title']} [{maps.iloc[x]['Version']}]", 38 | maps.iloc[x]["BeatmapID"], 39 | ) 40 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test16].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test16 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 81,68,333,2,0,P|69:49|51:34,1,37.5000014305115 59 | 170,102,499,2,0,P|192:101|214:93,1,37.5000014305115 60 | 96,162,666,2,0,P|85:181|81:204,1,37.5000014305115 61 | -------------------------------------------------------------------------------- /configs/calc_fid.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - base_fid 3 | - inference: tiny_dist7 4 | - _self_ 5 | 6 | compile: false 7 | num_processes: 32 8 | seed: 0 9 | 10 | skip_generation: false 11 | fid: true 12 | fid_cm3p: true 13 | rhythm_stats: true 14 | 15 | classifier_ckpt: 'OliBomby/osu-classifier' 16 | classifier_batch_size: 32 17 | 18 | cm3p_ckpt: 'OliBomby/CM3P' 19 | cm3p_batch_size: 32 20 | 21 | training_set_ids_path: null 22 | 23 | dataset_type: "mmrs" 24 | dataset_path: C:/Users/Olivier/Documents/Collections/Beatmap ML Datasets/MMRS2025 25 | dataset_start: 0 26 | dataset_end: 106 # Contains 324 std beatmaps 27 | gamemodes: [0] # List of gamemodes to include in the dataset 28 | 29 | inference: 30 | super_timing: false 31 | temperature: 0.9 # Sampling temperature 32 | top_p: 0.9 # Top-p sampling threshold 33 | lookback: 0.5 # Fraction of audio sequence to fill with tokens from previous inference window 34 | lookahead: 0.4 # Fraction of audio sequence to skip at the end of the audio window 35 | year: 2023 36 | resnap_events: true 37 | use_server: true 38 | 39 | hydra: 40 | job: 41 | chdir: True 42 | name: calc_fid 43 | run: 44 | dir: ./logs_fid/${now:%Y-%m-%d}/${now:%H-%M-%S} 45 | # dir: ./logs_fid/sweeps/test_1/inference=inference_v30 46 | sweep: 47 | dir: ./logs_fid/sweeps/test_1 48 | subdir: ${hydra.job.override_dirname} 49 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test3].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test3 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 600,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 116,326,600,2,0,B|78:235|181:196|170:191|229:152|178:46,1,300 59 | 35,232,1200,2,0,B|125:194|164:297|169:286|208:345|314:293,1,300 60 | 241,231,1800,2,0,L|304:213,1,50 61 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test5].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test5 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 76,192,333,1,0,0:0:0:0: 59 | 165,36,500,1,0,0:0:0:0: 60 | 346,36,666,1,0,0:0:0:0: 61 | 436,191,833,1,0,0:0:0:0: 62 | 346,347,1000,1,0,0:0:0:0: 63 | 166,347,1166,1,0,0:0:0:0: 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test0].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test0 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 130,250,333,1,0,0:0:0:0: 59 | 186,179,499,1,0,0:0:0:0: 60 | 122,57,666,1,0,0:0:0:0: 61 | 382,250,833,1,0,0:0:0:0: 62 | 326,179,999,1,0,0:0:0:0: 63 | 390,57,1166,1,0,0:0:0:0: 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test10].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test10 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 222,229,333,1,0,0:0:0:0: 59 | 300,191,499,1,0,0:0:0:0: 60 | 229,143,666,1,0,0:0:0:0: 61 | 293,277,833,1,0,0:0:0:0: 62 | 378,155,999,1,0,0:0:0:0: 63 | 144,265,1166,1,0,0:0:0:0: 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test16].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test16 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 308,384,300,1,0,0:0:0:0: 58 | 323,377,375,1,0,0:0:0:0: 59 | 320,307,450,1,0,0:0:0:0: 60 | 336,308,525,1,0,0:0:0:0: 61 | 365,244,600,1,0,0:0:0:0: 62 | 378,253,675,1,0,0:0:0:0: 63 | 437,215,750,1,0,0:0:0:0: 64 | 444,230,825,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test6].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test6 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 59,261,333,1,0,0:0:0:0: 59 | 146,280,499,1,0,0:0:0:0: 60 | 187,357,666,1,0,0:0:0:0: 61 | 453,261,999,1,0,0:0:0:0: 62 | 366,280,1165,1,0,0:0:0:0: 63 | 325,357,1332,1,0,0:0:0:0: 64 | -------------------------------------------------------------------------------- /osu_diffusion/train.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Grid Engine options (lines prefixed with #$) 4 | # 5 | # Set name of job 6 | #$ -N osu-diffusion-training 7 | # 8 | # Set working directory to the directory where the job is submitted from: 9 | #$ -cwd 10 | # 11 | # Request one GPU in the gpu queue: 12 | #$ -q gpu 13 | #$ -pe gpu-a100 2 14 | # 15 | # Request 96 GB system RAM 16 | # the total system RAM available to the job is the value specified here multiplied by 17 | # the number of requested GPUs (above) 18 | #$ -l h_vmem=96G 19 | # 20 | # Log file 21 | #$ -o logs/train.log 22 | #$ -e logs/train.err 23 | # 24 | # Initialise the environment modules and load CUDA version 11.0.2 25 | . /etc/profile.d/modules.sh 26 | module load cuda 27 | module load python/3.11.4 28 | # Run the executable 29 | export PATH=~/.local/bin:$PATH 30 | export 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512' 31 | export CURRENT_CHECKPOINT="results/005-DiT-L/checkpoints/0500000.pt" 32 | while true 33 | do 34 | # torchrun --nproc-per-node=2 train.py --data-path "../ORS13402_no_audio" --model DiT-L --num-workers 1 --epochs 100 --global-batch-size 128 --ckpt-every 20000 --seq-len 128 --ckpt $CURRENT_CHECKPOINT 35 | # Fallback to batchsize 64 36 | torchrun --nproc-per-node=2 train.py --data-path "../ORS13402_no_audio" --model DiT-L --num-workers 1 --epochs 100 --global-batch-size 64 --ckpt-every 20000 --seq-len 128 --ckpt $CURRENT_CHECKPOINT 37 | sleep 1 38 | done 39 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test14].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test14 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 128,108,333,2,0,B|172:130|172:130|211:65,1,100 59 | 172,320,666,2,0,B|194:276|194:276|129:237,1,100 60 | 384,276,999,2,0,B|340:254|340:254|301:319,1,100 61 | 340,64,1332,2,0,B|318:108|318:108|383:147,1,100 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test13].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test13 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 210,210,333,2,0,L|271:197,1,37.5000014305115 59 | 450,272,499,2,0,L|389:259,1,37.5000014305115 60 | 206,286,666,2,0,L|267:273,1,37.5000014305115 61 | 446,348,832,2,0,L|385:335,1,37.5000014305115 62 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test9].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test9 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 100,275,333,2,0,B|100:227|100:227|164:131|164:131|164:67,1,225.000008583069 59 | 84,99,999,1,0,0:0:0:0: 60 | 180,259,1166,1,0,0:0:0:0: 61 | 67,94,1333,1,0,0:0:0:0: 62 | 197,264,1499,1,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test4].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test4 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 600,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 31,93,600,1,0,0:0:0:0: 59 | 40,82,675,2,0,L|178:54,1,100 60 | 115,248,900,5,0,0:0:0:0: 61 | 128,251,975,2,0,P|130:191|85:139,1,100 62 | 299,158,1200,5,0,0:0:0:0: 63 | 293,146,1275,2,0,L|167:123,1,100 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test1].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test1 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 130,250,333,1,0,0:0:0:0: 59 | 186,179,499,1,0,0:0:0:0: 60 | 122,57,666,1,0,0:0:0:0: 61 | 256,0,833,1,0,0:0:0:0: 62 | 390,57,999,1,0,0:0:0:0: 63 | 326,179,1166,1,0,0:0:0:0: 64 | 382,250,1332,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test7].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.700006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test7 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 600,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 92,223,750,2,0,P|90:170|103:120,1,100 59 | 420,161,1125,2,0,P|422:214|409:264,1,100 60 | 219,270,1500,2,0,P|175:218|179:156,1,100 61 | 293,114,1875,2,0,P|337:166|333:228,1,100 62 | 256,192,2250,1,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test6].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test6 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 347,306,333,1,0,0:0:0:0: 59 | 223,335,499,1,0,0:0:0:0: 60 | 123,255,666,1,0,0:0:0:0: 61 | 123,128,833,1,0,0:0:0:0: 62 | 223,48,999,1,0,0:0:0:0: 63 | 347,77,1166,1,0,0:0:0:0: 64 | 402,192,1333,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test9].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 2 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test9 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 347,306,333,1,0,0:0:0:0: 59 | 223,48,499,1,0,0:0:0:0: 60 | 223,335,666,1,0,0:0:0:0: 61 | 347,77,833,1,0,0:0:0:0: 62 | 123,255,999,1,0,0:0:0:0: 63 | 402,192,1166,1,0,0:0:0:0: 64 | 123,128,1333,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test7].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test7 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 163,12,375,5,0,0:0:0:0: 58 | 152,35,468,1,0,0:0:0:0: 59 | 135,53,562,1,0,0:0:0:0: 60 | 113,66,656,1,0,0:0:0:0: 61 | 89,71,750,1,0,0:0:0:0: 62 | 64,69,843,1,0,0:0:0:0: 63 | 41,60,937,1,0,0:0:0:0: 64 | 21,45,1031,1,0,0:0:0:0: 65 | 7,24,1125,1,0,0:0:0:0: 66 | 0,0,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test6].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test6 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 512,12,375,5,0,0:0:0:0: 58 | 501,35,468,1,0,0:0:0:0: 59 | 484,53,562,1,0,0:0:0:0: 60 | 462,66,656,1,0,0:0:0:0: 61 | 438,71,750,1,0,0:0:0:0: 62 | 413,69,843,1,0,0:0:0:0: 63 | 390,60,937,1,0,0:0:0:0: 64 | 370,45,1031,1,0,0:0:0:0: 65 | 356,24,1125,1,0,0:0:0:0: 66 | 349,0,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test8].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test8 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 163,325,375,5,0,0:0:0:0: 58 | 152,348,468,1,0,0:0:0:0: 59 | 135,366,562,1,0,0:0:0:0: 60 | 113,379,656,1,0,0:0:0:0: 61 | 89,384,750,1,0,0:0:0:0: 62 | 64,382,843,1,0,0:0:0:0: 63 | 41,373,937,1,0,0:0:0:0: 64 | 21,358,1031,1,0,0:0:0:0: 65 | 7,337,1125,1,0,0:0:0:0: 66 | 0,313,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /rcomplexion/libs/dataset/data_utils.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | from ..tokenizer import Event, EventType, Tokenizer 4 | 5 | 6 | def create_sequences(tokens: torch.Tensor, src_seq_len: int, tokenizer: Tokenizer) -> tuple[list[torch.Tensor], list[torch.Tensor]]: 7 | """Create sequences from the tokenized event sequence. 8 | 9 | Args: 10 | tokens: The tokenized event sequence. 11 | src_seq_len: The source sequence length. 12 | tokenizer: The tokenizer to use. 13 | 14 | Returns: 15 | The sequences and labels. 16 | """ 17 | sequences = [] 18 | labels = [] 19 | timed_events = [tokenizer.encode(Event(EventType.CIRCLE)), tokenizer.encode(Event(EventType.SLIDER_HEAD))] 20 | for i in range(src_seq_len + 1, len(tokens)): 21 | if tokens[i] not in timed_events: 22 | continue 23 | 24 | sequences.append(tokens[i - 1 - src_seq_len:i - 1]) 25 | labels.append(tokens[i - 1]) 26 | 27 | return sequences, labels 28 | 29 | 30 | def tokenize_events(events: list[Event], tokenizer: Tokenizer) -> torch.Tensor: 31 | """Tokenize the event sequence. 32 | 33 | Args: 34 | events: The input events. 35 | tokenizer: The tokenizer to use. 36 | 37 | Returns: 38 | The tokenized events. 39 | """ 40 | tokens = torch.empty(len(events), dtype=torch.long) 41 | for i, event in enumerate(events): 42 | tokens[i] = tokenizer.encode(event) 43 | return tokens 44 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test10].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test10 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 512,181,300,5,0,0:0:0:0: 58 | 482,241,374,1,0,0:0:0:0: 59 | 436,288,449,1,0,0:0:0:0: 60 | 378,323,524,1,0,0:0:0:0: 61 | 314,336,600,1,0,0:0:0:0: 62 | 248,331,674,1,0,0:0:0:0: 63 | 188,307,749,1,0,0:0:0:0: 64 | 135,267,824,1,0,0:0:0:0: 65 | 97,211,900,1,0,0:0:0:0: 66 | 80,148,974,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test15].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test15 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 152,285,300,1,0,0:0:0:0: 58 | 140,242,374,1,0,0:0:0:0: 59 | 129,200,450,1,0,0:0:0:0: 60 | 118,158,524,1,0,0:0:0:0: 61 | 106,115,600,1,0,0:0:0:0: 62 | 310,0,750,5,0,0:0:0:0: 63 | 299,42,825,1,0,0:0:0:0: 64 | 288,84,900,1,0,0:0:0:0: 65 | 277,126,975,1,0,0:0:0:0: 66 | 265,169,1050,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test1].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test1 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 336,216,300,1,0,0:0:0:0: 58 | 325,239,374,1,0,0:0:0:0: 59 | 308,257,449,1,0,0:0:0:0: 60 | 286,270,524,1,0,0:0:0:0: 61 | 262,275,600,1,0,0:0:0:0: 62 | 237,273,674,1,0,0:0:0:0: 63 | 214,264,749,1,0,0:0:0:0: 64 | 194,249,824,1,0,0:0:0:0: 65 | 180,228,900,1,0,0:0:0:0: 66 | 173,204,974,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test9].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test9 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 512,181,375,5,0,0:0:0:0: 58 | 482,241,468,1,0,0:0:0:0: 59 | 436,288,562,1,0,0:0:0:0: 60 | 378,323,656,1,0,0:0:0:0: 61 | 314,336,750,1,0,0:0:0:0: 62 | 248,331,843,1,0,0:0:0:0: 63 | 188,307,937,1,0,0:0:0:0: 64 | 135,267,1031,1,0,0:0:0:0: 65 | 97,211,1125,1,0,0:0:0:0: 66 | 80,148,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test11].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test11 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-71.4285714285714,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 0,57,333,1,0,0:0:0:0: 59 | 107,159,666,1,0,0:0:0:0: 60 | 41,221,833,1,0,0:0:0:0: 61 | 71,307,1000,2,0,P|199:355|327:307,1,279.999991455078 62 | 357,221,1833,1,0,0:0:0:0: 63 | 291,159,2000,1,0,0:0:0:0: 64 | 398,57,2332,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test2].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test2 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 192,336,333,2,0,P|128:288|128:208,1,150.000005722046 59 | 177,144,833,1,0,0:0:0:0: 60 | 109,77,999,1,0,0:0:0:0: 61 | 320,336,1333,6,0,P|384:288|384:208,1,150.000005722046 62 | 335,144,1833,1,0,0:0:0:0: 63 | 403,77,1999,1,0,0:0:0:0: 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test0].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test0 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 336,216,375,1,0,0:0:0:0: 58 | 325,239,468,1,0,0:0:0:0: 59 | 308,257,562,1,0,0:0:0:0: 60 | 286,270,656,1,0,0:0:0:0: 61 | 262,275,750,1,0,0:0:0:0: 62 | 237,273,843,1,0,0:0:0:0: 63 | 214,264,937,1,0,0:0:0:0: 64 | 194,249,1031,1,0,0:0:0:0: 65 | 180,228,1125,1,0,0:0:0:0: 66 | 173,204,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test2].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test2 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 336,168,375,5,0,0:0:0:0: 58 | 325,145,468,1,0,0:0:0:0: 59 | 308,127,562,1,0,0:0:0:0: 60 | 286,114,656,1,0,0:0:0:0: 61 | 262,109,750,1,0,0:0:0:0: 62 | 237,111,843,1,0,0:0:0:0: 63 | 214,120,937,1,0,0:0:0:0: 64 | 194,135,1031,1,0,0:0:0:0: 65 | 180,156,1125,1,0,0:0:0:0: 66 | 173,180,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test3].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test3 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 176,168,375,5,0,0:0:0:0: 58 | 187,145,468,1,0,0:0:0:0: 59 | 204,127,562,1,0,0:0:0:0: 60 | 226,114,656,1,0,0:0:0:0: 61 | 250,109,750,1,0,0:0:0:0: 62 | 275,111,843,1,0,0:0:0:0: 63 | 298,120,937,1,0,0:0:0:0: 64 | 318,135,1031,1,0,0:0:0:0: 65 | 332,156,1125,1,0,0:0:0:0: 66 | 339,180,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test4].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test4 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 176,216,375,5,0,0:0:0:0: 58 | 187,239,468,1,0,0:0:0:0: 59 | 204,257,562,1,0,0:0:0:0: 60 | 226,270,656,1,0,0:0:0:0: 61 | 250,275,750,1,0,0:0:0:0: 62 | 275,273,843,1,0,0:0:0:0: 63 | 298,264,937,1,0,0:0:0:0: 64 | 318,249,1031,1,0,0:0:0:0: 65 | 332,228,1125,1,0,0:0:0:0: 66 | 339,204,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test5].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test5 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 512,325,375,5,0,0:0:0:0: 58 | 501,348,468,1,0,0:0:0:0: 59 | 484,366,562,1,0,0:0:0:0: 60 | 462,379,656,1,0,0:0:0:0: 61 | 438,384,750,1,0,0:0:0:0: 62 | 413,382,843,1,0,0:0:0:0: 63 | 390,373,937,1,0,0:0:0:0: 64 | 370,358,1031,1,0,0:0:0:0: 65 | 356,337,1125,1,0,0:0:0:0: 66 | 349,313,1218,1,0,0:0:0:0: 67 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test10].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test10 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-71.4285714285714,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 57,22,333,1,0,0:0:0:0: 59 | 164,124,666,1,0,0:0:0:0: 60 | 98,186,833,1,0,0:0:0:0: 61 | 128,272,1000,2,0,P|256:320|384:272,1,279.999991455078 62 | 414,186,1833,1,0,0:0:0:0: 63 | 348,124,2000,1,0,0:0:0:0: 64 | 455,22,2332,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test5].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test5 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 126,324,333,1,0,0:0:0:0: 59 | 208,242,499,1,0,0:0:0:0: 60 | 386,324,666,1,0,0:0:0:0: 61 | 304,242,832,1,0,0:0:0:0: 62 | 386,60,999,1,0,0:0:0:0: 63 | 304,142,1165,1,0,0:0:0:0: 64 | 126,60,1332,1,0,0:0:0:0: 65 | 208,142,1498,1,0,0:0:0:0: 66 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test8].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.700006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test8 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 281,-50,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 193,161,562,1,0,0:0:0:0: 59 | 185,146,657,1,0,0:0:0:0: 60 | 177,131,750,2,0,P|151:124|114:132,1,50 61 | 331,153,937,1,0,0:0:0:0: 62 | 348,154,1030,2,0,P|367:135|378:99,1,50 63 | 251,276,1218,1,0,0:0:0:0: 64 | 242,290,1311,2,0,P|249:316|275:344,1,50 65 | -------------------------------------------------------------------------------- /osu_diffusion/test_data_loading.py: -------------------------------------------------------------------------------- 1 | import hydra 2 | import torch 3 | from tqdm import tqdm 4 | 5 | from utils.positional_embedding import position_sequence_embedding 6 | from utils.data_loading import get_data_loader 7 | from utils.tokenizer import Tokenizer 8 | 9 | 10 | @hydra.main(config_path="../configs/diffusion", config_name="v1", version_base="1.1") 11 | def main(args): 12 | tokenizer = Tokenizer(args) 13 | dataloader = get_data_loader( 14 | args=args, 15 | tokenizer=tokenizer, 16 | pin_memory=False, 17 | drop_last=True, 18 | ) 19 | 20 | if args.mode == "plotfirst": 21 | import matplotlib.pyplot as plt 22 | 23 | for (x, c), y in dataloader: 24 | x = torch.swapaxes(x, 1, 2) # (N, T, C) 25 | c = torch.swapaxes(c, 1, 2) # (N, T, E) 26 | print(x.shape, c.shape, y.shape) 27 | batch_pos_emb = position_sequence_embedding(x * 512, 128) 28 | print(batch_pos_emb.shape) 29 | print(y) 30 | 31 | for j in range(args.optim.batch_size): 32 | fig, axs = plt.subplots(2, figsize=(5, 5)) 33 | axs[0].imshow(batch_pos_emb[j]) 34 | axs[1].imshow(c[j]) 35 | print(y[j]) 36 | plt.show() 37 | break 38 | elif args.mode == "benchmark": 39 | for _ in tqdm(dataloader, total=7000, smoothing=0.01): 40 | pass 41 | 42 | 43 | if __name__ == "__main__": 44 | main() 45 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test8].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test8 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 288,352,82,1,0,0:0:0:0: 59 | 352,154,249,2,0,L|376:77,1,75 60 | 205,190,666,2,0,B|260:174|260:174|311:275|412:223|412:223|448:269,1,300.000011444092 61 | 200,104,1499,1,0,0:0:0:0: 62 | 504,203,1666,1,0,0:0:0:0: 63 | 231,266,1833,1,0,0:0:0:0: 64 | 383,315,1999,1,0,0:0:0:0: 65 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test13].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test13 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 322,329,333,1,0,0:0:0:0: 58 | 300,258,417,1,0,0:0:0:0: 59 | 240,214,500,1,0,0:0:0:0: 60 | 167,215,583,1,0,0:0:0:0: 61 | 110,258,666,5,0,0:0:0:0: 62 | 182,275,750,1,0,0:0:0:0: 63 | 250,243,833,1,0,0:0:0:0: 64 | 284,179,916,1,0,0:0:0:0: 65 | 273,108,999,5,0,0:0:0:0: 66 | 225,164,1084,1,0,0:0:0:0: 67 | 221,238,1166,1,0,0:0:0:0: 68 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test4].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test4 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 52,263,333,2,0,L|113:342,1,75.0000028610231 59 | 218,320,666,2,0,L|261:240,1,75.0000028610231 60 | 378,263,999,2,0,L|424:341,1,75.0000028610231 61 | 460,121,1333,6,0,L|399:42,1,75.0000028610231 62 | 294,64,1666,2,0,L|251:144,1,75.0000028610231 63 | 134,121,1999,2,0,L|88:43,1,75.0000028610231 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/geometry/test - geometry (OliBomby) [test15].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:geometry 23 | TitleUnicode:geometry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test15 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 116,141,333,2,0,L|146:185,1,37.5000014305115 59 | 205,113,499,2,0,L|208:166,1,37.5000014305115 60 | 294,137,666,2,0,L|270:184,1,37.5000014305115 61 | 283,336,833,6,0,L|313:292,1,37.5000014305115 62 | 372,364,999,2,0,L|375:310,1,37.5000014305115 63 | 461,340,1166,2,0,L|437:292,1,37.5000014305115 64 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test10].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test10 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:7 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 600,-142.857142857143,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 172,144,600,6,0,L|202:148,1,17.4999994659424,0|0,2:0|2:0,2:0:0:0: 59 | 229,196,750,2,0,L|207:193,1,17.4999994659424,0|0,2:0|2:0,2:0:0:0: 60 | 259,157,900,2,0,L|288:160,1,17.4999994659424,0|0,2:0|2:0,2:0:0:0: 61 | 315,209,1050,2,0,L|293:206,1,17.4999994659424,0|0,2:0|2:0,2:0:0:0: 62 | 256,238,1200,5,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test2].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test2 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 600,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 114,111,600,2,0,L|164:118,1,37.5000014305115,0|0,2:0|2:0,2:0:0:0: 59 | 210,200,750,2,0,L|173:195,1,37.5000014305115,0|0,2:0|2:0,2:0:0:0: 60 | 262,133,900,2,0,L|312:139,1,37.5000014305115,0|0,2:0|2:0,2:0:0:0: 61 | 358,222,1050,2,0,L|320:217,1,37.5000014305115,0|0,2:0|2:0,2:0:0:0: 62 | 257,272,1200,5,0,0:0:0:0: 63 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test11].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test11 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,375,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 160,249,375,1,0,0:0:0:0: 58 | 184,340,469,1,0,0:0:0:0: 59 | 272,377,562,1,0,0:0:0:0: 60 | 355,332,656,1,0,0:0:0:0: 61 | 372,238,750,1,0,0:0:0:0: 62 | 309,166,844,1,0,0:0:0:0: 63 | 214,171,937,1,0,0:0:0:0: 64 | 134,224,1030,1,0,0:0:0:0: 65 | 44,194,1124,1,0,0:0:0:0: 66 | 10,106,1218,1,0,0:0:0:0: 67 | 58,24,1312,1,0,0:0:0:0: 68 | 152,10,1405,1,0,0:0:0:0: 69 | 221,76,1499,1,0,0:0:0:0: 70 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test17].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test17 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 120,334,300,1,0,0:0:0:0: 58 | 144,331,375,1,0,0:0:0:0: 59 | 166,319,450,1,0,0:0:0:0: 60 | 183,301,525,1,0,0:0:0:0: 61 | 250,283,600,5,0,0:0:0:0: 62 | 248,258,675,1,0,0:0:0:0: 63 | 237,236,750,1,0,0:0:0:0: 64 | 220,218,825,1,0,0:0:0:0: 65 | 156,187,900,5,0,0:0:0:0: 66 | 163,164,975,1,0,0:0:0:0: 67 | 180,145,1050,1,0,0:0:0:0: 68 | 201,132,1125,1,0,0:0:0:0: 69 | 232,70,1200,5,0,0:0:0:0: 70 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test12].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test12 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 352,249,333,1,0,0:0:0:0: 58 | 328,340,416,1,0,0:0:0:0: 59 | 240,377,499,1,0,0:0:0:0: 60 | 157,332,583,1,0,0:0:0:0: 61 | 140,238,666,1,0,0:0:0:0: 62 | 203,166,750,1,0,0:0:0:0: 63 | 298,171,832,1,0,0:0:0:0: 64 | 378,224,915,1,0,0:0:0:0: 65 | 468,194,999,1,0,0:0:0:0: 66 | 502,106,1082,1,0,0:0:0:0: 67 | 454,24,1166,1,0,0:0:0:0: 68 | 360,10,1248,1,0,0:0:0:0: 69 | 291,76,1332,1,0,0:0:0:0: 70 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test14].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test14 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,250,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 181,194,249,1,0,0:0:0:0: 58 | 173,185,312,1,0,0:0:0:0: 59 | 169,175,374,1,0,0:0:0:0: 60 | 168,165,436,1,0,0:0:0:0: 61 | 171,154,499,1,0,0:0:0:0: 62 | 177,145,561,1,0,0:0:0:0: 63 | 186,139,624,1,0,0:0:0:0: 64 | 196,136,687,1,0,0:0:0:0: 65 | 207,136,749,1,0,0:0:0:0: 66 | 217,140,811,1,0,0:0:0:0: 67 | 225,147,874,1,0,0:0:0:0: 68 | 231,156,936,1,0,0:0:0:0: 69 | 232,167,999,1,0,0:0:0:0: 70 | 231,178,1062,1,0,0:0:0:0: 71 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test7].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test7 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 59,261,333,1,0,0:0:0:0: 59 | 146,280,499,1,0,0:0:0:0: 60 | 187,357,666,1,0,0:0:0:0: 61 | 453,261,999,1,0,0:0:0:0: 62 | 366,280,1165,1,0,0:0:0:0: 63 | 325,357,1332,1,0,0:0:0:0: 64 | 59,123,1666,1,0,0:0:0:0: 65 | 146,104,1832,1,0,0:0:0:0: 66 | 187,27,1999,1,0,0:0:0:0: 67 | 453,123,2332,1,0,0:0:0:0: 68 | 366,104,2498,1,0,0:0:0:0: 69 | 325,27,2665,1,0,0:0:0:0: 70 | -------------------------------------------------------------------------------- /configs/legacy/train_v16.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: t5_small_v9 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_mapper_token: true 12 | add_descriptors: true 13 | timing_random_offset: 2 14 | tgt_seq_len: 768 15 | rhythm_weight: 3.0 # Weight of rhythm tokens in the loss calculation 16 | sample_weights_path: "../../../datasets/rhythm_complexities.csv" # Path to sample weights 17 | context_types: [ 18 | {"in": ["none"], "out": ["map"]}, 19 | {"in": ["timing"], "out": ["map"]}, 20 | {"in": ["no_hs"], "out": ["map"]}, 21 | {"in": ["gd"], "out": ["map"]} 22 | ] # List of context types to include in the dataset 23 | context_weights: [3, 1, 1, 1] # List of weights for each context type. Determines how often each context type is sampled 24 | descriptors_path: "../../../datasets/beatmap_descriptors.csv" # Path to file with all beatmap descriptors 25 | mappers_path: "../../../datasets/beatmap_users.json" # Path to file with all beatmap mappers 26 | add_timing: true # Model beatmap timing 27 | add_snapping: true # Model hit object snapping 28 | add_hitsounds: true # Model beatmap hitsounds 29 | add_pre_tokens: false 30 | 31 | dataloader: # Dataloader settings 32 | num_workers: 8 33 | 34 | optim: # Optimizer settings 35 | base_lr: 1e-2 # Should be scaled with the number of devices present 36 | batch_size: 126 37 | grad_acc: 6 -------------------------------------------------------------------------------- /configs/legacy/train_v17.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_base 5 | 6 | compile: false # PyTorch 2.0 optimization 7 | precision: 'no' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | add_diff_token: true 11 | add_mapper_token: true 12 | add_descriptors: true 13 | timing_random_offset: 2 14 | tgt_seq_len: 768 15 | rhythm_weight: 3.0 # Weight of rhythm tokens in the loss calculation 16 | sample_weights_path: "../../../datasets/rhythm_complexities.csv" # Path to sample weights 17 | context_types: [ 18 | {"in": ["none"], "out": ["map"]}, 19 | {"in": ["timing"], "out": ["map"]}, 20 | {"in": ["no_hs"], "out": ["map"]}, 21 | {"in": ["gd"], "out": ["map"]} 22 | ] # List of context types to include in the dataset 23 | context_weights: [3, 1, 1, 1] # List of weights for each context type. Determines how often each context type is sampled 24 | descriptors_path: "../../../datasets/beatmap_descriptors.csv" # Path to file with all beatmap descriptors 25 | mappers_path: "../../../datasets/beatmap_users.json" # Path to file with all beatmap mappers 26 | add_timing: true # Model beatmap timing 27 | add_snapping: true # Model hit object snapping 28 | add_hitsounds: true # Model beatmap hitsounds 29 | add_pre_tokens: false 30 | 31 | dataloader: # Dataloader settings 32 | num_workers: 3 33 | 34 | optim: # Optimizer settings 35 | base_lr: 1e-2 # Should be scaled with the number of devices present 36 | batch_size: 128 37 | grad_acc: 8 -------------------------------------------------------------------------------- /configs/legacy/train_timer_v24.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_base 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'bf16' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | train_dataset_path: "/workspace/datasets/ORS16291" 11 | test_dataset_path: "/workspace/datasets/ORS16291" 12 | add_descriptors: true 13 | timing_random_offset: 2 14 | src_seq_len: 1024 15 | tgt_seq_len: 128 16 | rhythm_weight: 3.0 # Weight of rhythm tokens in the loss calculation 17 | context_types: [ 18 | {"in": ["none"], "out": "timing"} 19 | ] # List of context types to include in the dataset 20 | context_weights: [1] # List of weights for each context type. Determines how often each context type is sampled 21 | descriptors_path: "../../../datasets/beatmap_descriptors.csv" # Path to file with all beatmap descriptors 22 | add_timing_points: true # Model beatmap timing with timing points 23 | add_pre_tokens: false 24 | per_track: true 25 | only_last_beatmap: true # Only use the last beatmap in the mapset 26 | dt_augment_prob: 0.7 # Probability of augmenting the dataset with DT 27 | dt_augment_range: [1.25, 1.5] # Range of DT augmentation 28 | types_first: true # Put the type token at the start of the group before the timeshift token 29 | 30 | dataloader: # Dataloader settings 31 | num_workers: 8 32 | 33 | optim: # Optimizer settings 34 | base_lr: 1e-2 # Should not be scaled with the number of devices present 35 | batch_size: 128 36 | grad_acc: 2 -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test19].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test19 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 376,362,600,1,0,0:0:0:0: 58 | 331,384,675,1,0,0:0:0:0: 59 | 282,383,750,1,0,0:0:0:0: 60 | 238,361,825,1,0,0:0:0:0: 61 | 209,321,900,1,0,0:0:0:0: 62 | 181,281,975,1,0,0:0:0:0: 63 | 136,259,1050,1,0,0:0:0:0: 64 | 87,258,1125,1,0,0:0:0:0: 65 | 43,281,1200,5,0,0:0:0:0: 66 | 90,296,1275,1,0,0:0:0:0: 67 | 139,288,1350,1,0,0:0:0:0: 68 | 179,259,1425,1,0,0:0:0:0: 69 | 201,215,1500,1,0,0:0:0:0: 70 | 223,171,1575,1,0,0:0:0:0: 71 | 263,142,1650,1,0,0:0:0:0: 72 | -------------------------------------------------------------------------------- /osu_diffusion/testing/distance_distance.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import glob 3 | 4 | import matplotlib.pyplot as plt 5 | import torch 6 | 7 | from data_loading import beatmap_to_sequence, calc_distances 8 | from slider import Beatmap 9 | 10 | 11 | def main(args): 12 | ref_beatmap = Beatmap.from_path(args.ref_beatmap) 13 | ref_seq = beatmap_to_sequence(ref_beatmap) 14 | ref_seq_d = calc_distances(ref_seq) 15 | 16 | beatmap = Beatmap.from_path(args.beatmap) 17 | name = beatmap.version if args.name is None else args.name 18 | seq = beatmap_to_sequence(beatmap) 19 | seq_d = calc_distances(seq) 20 | 21 | if len(seq_d) != len(ref_seq_d): 22 | return 23 | 24 | seq_d_d = ref_seq_d - seq_d 25 | 26 | mse = torch.mean(torch.square(seq_d_d)) 27 | mae = torch.mean(torch.abs(seq_d_d)) 28 | 29 | print(f"{name}: MSE = {mse}, MAE = {mae}") 30 | 31 | num_bins = 41 32 | bin_edges = torch.linspace(-20, 20, num_bins + 1) 33 | plt.hist(seq_d_d, bins=bin_edges, alpha=0.75, color='b', edgecolor='k') 34 | plt.xlabel("Distance") 35 | plt.ylabel("Frequency") 36 | title = f"Distance similarity gen. beatmap [{name}]" 37 | plt.title(title) 38 | plt.grid(True) 39 | plt.show() 40 | 41 | 42 | if __name__ == "__main__": 43 | parser = argparse.ArgumentParser() 44 | parser.add_argument("--ref-beatmap", type=str, required=True) 45 | parser.add_argument("--beatmap", type=str, required=True) 46 | parser.add_argument("--name", type=str) 47 | args = parser.parse_args() 48 | for beatmap in glob.glob(args.beatmap + "\*.osu"): 49 | args.beatmap = beatmap 50 | main(args) 51 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/symmetry/test - symmetry (OliBomby) [test3].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:symmetry 23 | TitleUnicode:symmetry 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test3 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,333.333333333333,4,1,0,100,1,0 54 | 333,-66.6666666666667,4,1,0,100,0,0 55 | 56 | 57 | [HitObjects] 58 | 41,298,333,2,0,L|11:216,1,75.0000028610231 59 | 76,135,666,2,0,L|165:152,1,75.0000028610231 60 | 185,241,999,2,0,L|136:314,1,75.0000028610231 61 | 98,223,1333,1,0,0:0:0:0: 62 | 215,105,1499,1,0,0:0:0:0: 63 | 471,298,1666,6,0,L|501:216,1,75.0000028610231 64 | 436,135,1999,2,0,L|347:152,1,75.0000028610231 65 | 327,241,2332,2,0,L|376:314,1,75.0000028610231 66 | 414,223,2666,1,0,0:0:0:0: 67 | 297,105,2832,1,0,0:0:0:0: 68 | -------------------------------------------------------------------------------- /osuT5/clean_wandb_models.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # https://community.wandb.ai/t/using-the-python-api-to-delete-models-with-no-tag-minimal/1498?u=turian 3 | # "Rather than using api.artifact_versions, it uses the versions 4 | # method on artifact_collection." 5 | 6 | import wandb 7 | from tqdm.auto import tqdm 8 | 9 | # dry_run = True 10 | dry_run = False 11 | api = wandb.Api() 12 | project = api.project("osuT5", entity="mappingtools") 13 | 14 | for artifact_type in project.artifacts_types(): 15 | if artifact_type.type != "model": 16 | continue 17 | collection_artifacts = [] 18 | collections = [] 19 | for artifact_collection in tqdm(artifact_type.collections()): 20 | artifacts = list(artifact_collection.artifacts()) 21 | for artifact in artifacts: 22 | if artifact.state != "DELETED": 23 | collection_artifacts.append((artifact_collection, artifact)) 24 | if len(artifacts) == 0: 25 | collections.append(artifact_collection) 26 | 27 | for (artifact_collection, artifact) in tqdm(collection_artifacts): 28 | if len(artifact.aliases) > 0: 29 | # print out the name of the one we are keeping 30 | print(f"KEEPING {artifact.name} {artifact.aliases}") 31 | else: 32 | if not dry_run: 33 | artifact.delete() 34 | else: 35 | print("") 36 | print(f"should delete {artifact.name}") 37 | for artifact_collection in tqdm(collections): 38 | if not dry_run: 39 | artifact_collection.delete() 40 | else: 41 | print("") 42 | print(f"should delete {artifact_collection.name}") 43 | -------------------------------------------------------------------------------- /rcomplexion/clean_wandb_models.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # https://community.wandb.ai/t/using-the-python-api-to-delete-models-with-no-tag-minimal/1498?u=turian 3 | # "Rather than using api.artifact_versions, it uses the versions 4 | # method on artifact_collection." 5 | 6 | import wandb 7 | from tqdm.auto import tqdm 8 | 9 | # dry_run = True 10 | dry_run = False 11 | 12 | api = wandb.Api() 13 | project = api.project("rcomplexion", entity="mappingtools") 14 | 15 | for artifact_type in project.artifacts_types(): 16 | if artifact_type.type != "model": 17 | continue 18 | collection_artifacts = [] 19 | collections = [] 20 | for artifact_collection in tqdm(artifact_type.collections()): 21 | artifacts = list(artifact_collection.artifacts()) 22 | for artifact in artifacts: 23 | if artifact.state != "DELETED": 24 | collection_artifacts.append((artifact_collection, artifact)) 25 | if len(artifacts) == 0: 26 | collections.append(artifact_collection) 27 | 28 | for (artifact_collection, artifact) in tqdm(collection_artifacts): 29 | if len(artifact.aliases) > 0: 30 | # print out the name of the one we are keeping 31 | print(f"KEEPING {artifact.name} {artifact.aliases}") 32 | else: 33 | if not dry_run: 34 | artifact.delete() 35 | else: 36 | print("") 37 | print(f"should delete {artifact.name}") 38 | for artifact_collection in tqdm(collections): 39 | if not dry_run: 40 | artifact_collection.delete() 41 | else: 42 | print("") 43 | print(f"should delete {artifact_collection.name}") -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/stream/test - stream (OliBomby) [test18].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:stream 23 | TitleUnicode:stream 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test18 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 55 | 56 | [HitObjects] 57 | 337,335,300,5,0,0:0:0:0: 58 | 367,326,375,1,0,0:0:0:0: 59 | 397,318,450,1,0,0:0:0:0: 60 | 427,310,525,1,0,0:0:0:0: 61 | 457,302,600,5,0,0:0:0:0: 62 | 426,293,675,1,0,0:0:0:0: 63 | 396,285,750,1,0,0:0:0:0: 64 | 366,277,825,1,0,0:0:0:0: 65 | 336,269,900,5,0,0:0:0:0: 66 | 366,260,975,1,0,0:0:0:0: 67 | 396,252,1050,1,0,0:0:0:0: 68 | 426,244,1125,1,0,0:0:0:0: 69 | 456,236,1200,5,0,0:0:0:0: 70 | 425,227,1275,1,0,0:0:0:0: 71 | 395,219,1350,1,0,0:0:0:0: 72 | 365,211,1425,1,0,0:0:0:0: 73 | 335,203,1500,5,0,0:0:0:0: 74 | 365,194,1575,1,0,0:0:0:0: 75 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test11].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test11 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:4 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 900,-37.7358490566038,4,1,0,100,0,0 55 | 1500,-25.4413054497162,4,1,0,100,0,0 56 | 2100,-270.27027027027,4,1,0,100,0,0 57 | 58 | 59 | [HitObjects] 60 | 126,104,600,5,0,0:0:0:0: 61 | 166,150,675,1,0,0:0:0:0: 62 | 225,166,750,1,0,0:0:0:0: 63 | 284,150,825,1,0,0:0:0:0: 64 | 324,103,900,6,1,B|356:86|356:86|400:96|452:71|452:71|428:99|402:113|402:113|419:118|441:116|441:116|424:139|400:135|400:135|407:152|420:155|420:155|398:164|383:160|383:160|382:174|376:182|376:182|362:177|355:164,1,397.5,0|0,0:0|0:0,0:0:0:0: 65 | 224,66,1500,5,0,0:0:0:0: 66 | -------------------------------------------------------------------------------- /rcomplexion/test.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | import hydra 4 | import numpy as np 5 | import torch 6 | from matplotlib import pyplot as plt 7 | from omegaconf import DictConfig 8 | from slider import Beatmap 9 | 10 | from libs.tokenizer import Tokenizer 11 | from libs.utils import get_model 12 | from libs.tokenizer import Event, EventType 13 | 14 | 15 | @hydra.main(config_path="configs", config_name="inference_v1", version_base="1.1") 16 | def main(args: DictConfig): 17 | torch.set_grad_enabled(False) 18 | device = torch.device("cuda" if torch.cuda.is_available() else "cpu") 19 | ckpt_path = Path(args.model_path) 20 | model_state = torch.load(ckpt_path / "pytorch_model.bin", map_location=device) 21 | 22 | tokenizer = Tokenizer(args) 23 | model = get_model(args, tokenizer) 24 | model.load_state_dict(model_state) 25 | model.eval() 26 | model.to(device) 27 | 28 | max_timeshift = int((args.data.max_time - args.data.min_time) * args.data.time_resolution) 29 | results = np.empty((max_timeshift + 1, tokenizer.vocab_size_out), dtype=np.float32) 30 | 31 | for i in range(max_timeshift + 1): 32 | input_ids = torch.tensor([[tokenizer.encode(Event(EventType.TIME_SHIFT, i)), tokenizer.encode(Event(EventType.CIRCLE))] * (args.data.src_seq_len // 2)], device=device) 33 | output = model(input_ids) 34 | probs = torch.softmax(output.logits, -1)[0].cpu().numpy() 35 | results[i] = -probs * np.log2(probs) 36 | 37 | # Plot results as image 38 | plt.imshow(results, aspect="auto") 39 | plt.xlabel("Predicted time") 40 | plt.ylabel("Input time") 41 | plt.title("Model predictions") 42 | plt.colorbar() 43 | plt.show() 44 | 45 | 46 | if __name__ == "__main__": 47 | main() 48 | -------------------------------------------------------------------------------- /osuT5/osuT5/utils/log_utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import torch 3 | 4 | 5 | class Averager: 6 | def __init__(self): 7 | self.reset() 8 | 9 | # noinspection PyAttributeOutsideInit 10 | def reset(self): 11 | self.total = {} 12 | self.counter = {} 13 | 14 | def update(self, stats): 15 | for key, value in stats.items(): 16 | if key not in self.total: 17 | if isinstance(value, torch.Tensor): 18 | self.total[key] = value.sum() 19 | self.counter[key] = value.numel() 20 | elif isinstance(value, np.ndarray): 21 | self.total[key] = value.sum() 22 | self.counter[key] = value.size 23 | else: 24 | self.total[key] = value 25 | self.counter[key] = 1 26 | else: 27 | if isinstance(value, torch.Tensor): 28 | self.total[key] = self.total[key] + value.sum() 29 | self.counter[key] = self.counter[key] + value.numel() 30 | elif isinstance(value, np.ndarray): 31 | self.total[key] = self.total[key] + value.sum() 32 | self.counter[key] = self.counter[key] + value.size 33 | else: 34 | self.total[key] = self.total[key] + value 35 | self.counter[key] = self.counter[key] + 1 36 | 37 | def average(self): 38 | averaged_stats = { 39 | key: (tot / self.counter[key]).item() if isinstance(tot, torch.Tensor) else tot / self.counter[key] for key, tot in self.total.items() if self.counter[key] > 0 40 | } 41 | self.reset() 42 | 43 | return averaged_stats 44 | -------------------------------------------------------------------------------- /configs/legacy/train_v18.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - train 3 | - _self_ 4 | - model: whisper_base 5 | 6 | compile: true # PyTorch 2.0 optimization 7 | precision: 'bf16' # Enable mixed precision (no/fp16/bf16/fp8) 8 | 9 | data: # Data settings 10 | train_dataset_path: "/workspace/datasets/ORS16291" 11 | test_dataset_path: "/workspace/datasets/ORS16291" 12 | add_diff_token: true 13 | add_mapper_token: true 14 | add_descriptors: true 15 | timing_random_offset: 2 16 | src_seq_len: 1024 17 | tgt_seq_len: 1536 18 | rhythm_weight: 3.0 # Weight of rhythm tokens in the loss calculation 19 | sample_weights_path: "../../../datasets/rhythm_complexities.csv" # Path to sample weights 20 | context_types: [ 21 | {"in": ["none"], "out": ["map"]}, 22 | {"in": ["timing"], "out": ["map"]}, 23 | {"in": ["no_hs"], "out": ["map"]}, 24 | {"in": ["gd"], "out": ["map"]} 25 | ] # List of context types to include in the dataset 26 | context_weights: [3, 1, 1, 1] # List of weights for each context type. Determines how often each context type is sampled 27 | descriptors_path: "../../../datasets/beatmap_descriptors.csv" # Path to file with all beatmap descriptors 28 | mappers_path: "../../../datasets/beatmap_users.json" # Path to file with all beatmap mappers 29 | add_timing: true # Model beatmap timing 30 | add_snapping: true # Model hit object snapping 31 | add_hitsounds: true # Model beatmap hitsounds 32 | add_pre_tokens: false 33 | per_track: true 34 | 35 | dataloader: # Dataloader settings 36 | num_workers: 8 37 | 38 | optim: # Optimizer settings 39 | base_lr: 1e-2 # Should be scaled with the number of devices present 40 | batch_size: 128 41 | grad_acc: 8 -------------------------------------------------------------------------------- /osu_diffusion/testing/plot_loss.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import matplotlib.pyplot as plt 4 | 5 | # log_files = [ 6 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\old\\log.txt", 0), 7 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new\\s64\\log.txt", 0), 8 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new\\s128\\log.txt", 1600), 9 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new\\s512\\log.txt", 3200), 10 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new2\\log.txt", 0), 11 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new2\\r\\log.txt", 1600), 12 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new2\\r\\clean\\log.txt", 4000), 13 | # ("D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new2\\r\\cosine\\log.txt", 4000), 14 | # ( 15 | # "D:\\Osu! Dingen\\Beatmap ML Datasets\\results\\new2\\r\\cosine\\l1\\log.txt", 16 | # 4600, 17 | # ), 18 | # ] 19 | log_files = [ 20 | ("..\\results\\037-DiT-B\\log.txt", 0), 21 | ("..\\results\\038-DiT-B\\log.txt", 0), 22 | ("..\\results\\039-DiT-B\\log.txt", 0), 23 | ("..\\results\\044-DiT-B\\log.txt", 0), 24 | ("..\\results\\048-DiT-B\\log.txt", 5750), 25 | ] 26 | 27 | for path, x_offset in log_files: 28 | with open(path) as file: 29 | lines = file.readlines() 30 | 31 | losses = [] 32 | for line in lines: 33 | pos = line.find("Train Loss: ") 34 | 35 | if pos < 0: 36 | continue 37 | 38 | loss = float(line[pos + 12 : pos + 12 + 6]) 39 | losses.append(loss) 40 | 41 | x = range(x_offset, x_offset + len(losses)) 42 | (line,) = plt.plot(x, losses, label=os.path.basename(os.path.dirname(path))) 43 | 44 | plt.yscale("log") 45 | # plt.ylim(0, 0.08) 46 | plt.legend() 47 | plt.show() 48 | -------------------------------------------------------------------------------- /rcomplexion/libs/utils/log_utils.py: -------------------------------------------------------------------------------- 1 | from collections import defaultdict 2 | 3 | import numpy as np 4 | import torch 5 | 6 | 7 | class Averager: 8 | def __init__(self): 9 | self.reset() 10 | 11 | # noinspection PyAttributeOutsideInit 12 | def reset(self): 13 | self.total = {} 14 | self.counter = {} 15 | 16 | def update(self, stats): 17 | for key, value in stats.items(): 18 | if key not in self.total: 19 | if isinstance(value, torch.Tensor): 20 | self.total[key] = value.sum() 21 | self.counter[key] = value.numel() 22 | elif isinstance(value, np.ndarray): 23 | self.total[key] = value.sum() 24 | self.counter[key] = value.size 25 | else: 26 | self.total[key] = value 27 | self.counter[key] = 1 28 | else: 29 | if isinstance(value, torch.Tensor): 30 | self.total[key] = self.total[key] + value.sum() 31 | self.counter[key] = self.counter[key] + value.numel() 32 | elif isinstance(value, np.ndarray): 33 | self.total[key] = self.total[key] + value.sum() 34 | self.counter[key] = self.counter[key] + value.size 35 | else: 36 | self.total[key] = self.total[key] + value 37 | self.counter[key] = self.counter[key] + 1 38 | 39 | def average(self): 40 | averaged_stats = { 41 | key: (tot / self.counter[key]).item() if isinstance(tot, torch.Tensor) else tot / self.counter[key] for key, tot in self.total.items() 42 | } 43 | self.reset() 44 | 45 | return averaged_stats 46 | -------------------------------------------------------------------------------- /osuT5/osuT5/inference/cache_utils.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from transformers import EncoderDecoderCache, Cache, StaticCache 3 | 4 | from osuT5.osuT5.model import Mapperatorinator 5 | 6 | 7 | class MapperatorinatorCache(EncoderDecoderCache): 8 | def __init__(self, self_attention_cache: Cache, cross_attention_cache: Cache, cfg_scale: float): 9 | super().__init__(self_attention_cache, cross_attention_cache) 10 | self.cfg_scale = cfg_scale 11 | self.is_compileable = False # https://github.com/huggingface/transformers/pull/38244 12 | 13 | def get_max_cache_shape(self): 14 | """Returns the maximum shape of the cache.""" 15 | return self.self_attention_cache.get_max_cache_shape() 16 | 17 | def reorder_cache(self, beam_idx: torch.LongTensor): 18 | """Reorders the cache for beam search, given the selected beam indices.""" 19 | beam_idx = beam_idx.repeat(2) if self.cfg_scale > 1 else beam_idx 20 | self.self_attention_cache.reorder_cache(beam_idx) 21 | self.cross_attention_cache.reorder_cache(beam_idx) 22 | 23 | 24 | def get_cache(model: Mapperatorinator, batch_size: int, num_beams: int = 1, cfg_scale: float = 1.0): 25 | cache_kwargs = { 26 | "config": model.config, 27 | "max_batch_size": batch_size * num_beams * 2 if cfg_scale > 1 else batch_size * num_beams, 28 | "max_cache_len": model.config.max_target_positions, 29 | "device": model.device, 30 | "dtype": model.dtype, 31 | } 32 | decoder_cache = StaticCache(**cache_kwargs) 33 | encoder_kwargs = cache_kwargs.copy() 34 | encoder_kwargs["max_cache_len"] = model.config.max_source_positions 35 | encoder_cache = StaticCache(**encoder_kwargs) 36 | return MapperatorinatorCache(decoder_cache, encoder_cache, cfg_scale) 37 | -------------------------------------------------------------------------------- /classifier/libs/model/spectrogram.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import torch 4 | import torch.nn as nn 5 | from nnAudio import features 6 | 7 | 8 | class MelSpectrogram(nn.Module): 9 | def __init__( 10 | self, 11 | sample_rate: int = 16000, 12 | n_ftt: int = 2048, 13 | n_mels: int = 512, 14 | hop_length: int = 128, 15 | ): 16 | """ 17 | Melspectrogram transformation layer, supports on-the-fly processing on GPU. 18 | 19 | Attributes: 20 | sample_rate: The sampling rate for the input audio. 21 | n_ftt: The window size for the STFT. 22 | n_mels: The number of Mel filter banks. 23 | hop_length: The hop (or stride) size. 24 | """ 25 | super().__init__() 26 | self.transform = features.MelSpectrogram( 27 | sr=sample_rate, 28 | n_fft=n_ftt, 29 | n_mels=n_mels, 30 | hop_length=hop_length, 31 | center=True, 32 | fmin=0, 33 | fmax=sample_rate // 2, 34 | pad_mode="constant", 35 | ) 36 | 37 | def forward(self, samples: torch.tensor) -> torch.tensor: 38 | """ 39 | Convert a batch of audio frames into a batch of Mel spectrogram frames. 40 | 41 | For each item in the batch: 42 | 1. pad left and right ends of audio by n_fft // 2. 43 | 2. run STFT with window size of |n_ftt| and stride of |hop_length|. 44 | 3. convert result into mel-scale. 45 | 4. therefore, n_frames = n_samples // hop_length + 1. 46 | 47 | Args: 48 | samples: Audio time-series (batch size, n_samples). 49 | 50 | Returns: 51 | A batch of Mel spectrograms of size (batch size, n_frames, n_mels). 52 | """ 53 | spectrogram = self.transform(samples) 54 | spectrogram = spectrogram.permute(0, 2, 1) 55 | return spectrogram 56 | -------------------------------------------------------------------------------- /osu_diffusion/utils/diffusion/__init__.py: -------------------------------------------------------------------------------- 1 | # Modified from OpenAI's diffusion repos 2 | # GLIDE: https://github.com/openai/glide-text2im/blob/main/glide_text2im/gaussian_diffusion.py 3 | # ADM: https://github.com/openai/guided-diffusion/blob/main/guided_diffusion 4 | # IDDPM: https://github.com/openai/improved-diffusion/blob/main/improved_diffusion/gaussian_diffusion.py 5 | from . import gaussian_diffusion as gd 6 | from .respace import space_timesteps 7 | from .respace import SpacedDiffusion 8 | 9 | 10 | def create_diffusion( 11 | timestep_respacing, 12 | noise_schedule="linear", 13 | use_kl=False, 14 | sigma_small=False, 15 | predict_xstart=False, 16 | learn_sigma=True, 17 | rescale_learned_sigmas=False, 18 | diffusion_steps=1000, 19 | use_l1=False, 20 | ): 21 | betas = gd.get_named_beta_schedule(noise_schedule, diffusion_steps) 22 | if use_kl: 23 | loss_type = gd.LossType.RESCALED_KL 24 | elif rescale_learned_sigmas: 25 | loss_type = gd.LossType.RESCALED_L1 if use_l1 else gd.LossType.RESCALED_MSE 26 | else: 27 | loss_type = gd.LossType.L1 if use_l1 else gd.LossType.MSE 28 | if timestep_respacing is None or timestep_respacing == "": 29 | timestep_respacing = [diffusion_steps] 30 | return SpacedDiffusion( 31 | use_timesteps=space_timesteps(diffusion_steps, timestep_respacing), 32 | betas=betas, 33 | model_mean_type=( 34 | gd.ModelMeanType.EPSILON if not predict_xstart else gd.ModelMeanType.START_X 35 | ), 36 | model_var_type=( 37 | ( 38 | gd.ModelVarType.FIXED_LARGE 39 | if not sigma_small 40 | else gd.ModelVarType.FIXED_SMALL 41 | ) 42 | if not learn_sigma 43 | else gd.ModelVarType.LEARNED_RANGE 44 | ), 45 | loss_type=loss_type, 46 | # rescale_timesteps=rescale_timesteps, 47 | ) 48 | -------------------------------------------------------------------------------- /fix_dataset.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from pathlib import Path 3 | 4 | from tqdm import tqdm 5 | 6 | dataset_path = Path(r"/datasets/MMRS39389") 7 | metadata_path = dataset_path / "metadata.parquet" 8 | 9 | 10 | # For each row, find the corresponding file in the dataset and update the value in the BeatmapFile column 11 | 12 | # To find the file, look through all .osu files in BeatmapSetFolder, read the BeatmapID from the .osu file, and compare it to the Id column 13 | # If the BeatmapID matches, update the BeatmapFile column with the name of the .osu file 14 | # Print each row that is changed 15 | 16 | # Load metadata 17 | df = pd.read_parquet(metadata_path) 18 | 19 | 20 | def get_beatmap_id(osu_file: Path): 21 | with osu_file.open(encoding="utf-8", errors="ignore") as f: 22 | for line in f: 23 | if line.startswith("BeatmapID:"): 24 | return int(line.split(":")[1].strip()) 25 | return None 26 | 27 | changed_rows = [] 28 | 29 | for idx, row in tqdm(df.iterrows(), total=len(df), desc="Updating BeatmapFile"): 30 | beatmapset_folder = dataset_path / "data" / str(row["BeatmapSetFolder"]) 31 | if (beatmapset_folder / row["BeatmapFile"]).exists(): 32 | continue 33 | found = False 34 | for osu_file in beatmapset_folder.glob("*.osu"): 35 | beatmap_id = get_beatmap_id(osu_file) 36 | if beatmap_id == row["Id"]: 37 | if row["BeatmapFile"] != osu_file.name: 38 | df.at[idx, "BeatmapFile"] = osu_file.name 39 | changed_rows.append((idx, row["Id"], osu_file.name)) 40 | found = True 41 | break 42 | if not found: 43 | print(f"Warning: No matching .osu file found for Id {row['Id']} in {beatmapset_folder}") 44 | 45 | # Print changed rows 46 | for idx, beatmap_id, osu_name in changed_rows: 47 | print(f"Row {idx} (Id={beatmap_id}) updated to BeatmapFile={osu_name}") 48 | 49 | # Save updated metadata 50 | df.to_parquet(metadata_path) 51 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-docker-compose 3 | { 4 | "name": "Existing Docker Compose (Extend)", 5 | 6 | // Update the 'dockerComposeFile' list if you have more compose files or use different names. 7 | // The .devcontainer/docker-compose.yml file contains any overrides you need/want to make. 8 | "dockerComposeFile": [ 9 | "../compose.yaml", 10 | "docker-compose.yml" 11 | ], 12 | 13 | // The 'service' property is the name of the service for the container that VS Code should 14 | // use. Update this value and .devcontainer/docker-compose.yml to the real service name. 15 | "service": "Mapperatorinator", 16 | 17 | // The optional 'workspaceFolder' property is the path VS Code should open by default when 18 | // connected. This is typically a file mount in .devcontainer/docker-compose.yml 19 | "workspaceFolder": "/workspace/Mapperatorinator", 20 | // "workspaceFolder": "/", 21 | 22 | // Features to add to the dev container. More info: https://containers.dev/features. 23 | // "features": {}, 24 | 25 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 26 | // "forwardPorts": [], 27 | 28 | // Uncomment the next line if you want start specific services in your Docker Compose config. 29 | // "runServices": [], 30 | 31 | // Uncomment the next line if you want to keep your containers running after VS Code shuts down. 32 | // "shutdownAction": "none", 33 | 34 | // Uncomment the next line to run commands after the container is created. 35 | "postCreateCommand": "git config --global --add safe.directory /workspace/Mapperatorinator" 36 | 37 | // Configure tool-specific properties. 38 | // "customizations": {}, 39 | 40 | // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. 41 | // "remoteUser": "devcontainer" 42 | } 43 | -------------------------------------------------------------------------------- /osu_diffusion/testing/toy_datasets/visual_spacing/test - visual spacing (OliBomby) [test12].osu: -------------------------------------------------------------------------------- 1 | osu file format v14 2 | 3 | [General] 4 | AudioFilename: audio.mp3 5 | AudioLeadIn: 0 6 | PreviewTime: -1 7 | Countdown: 0 8 | SampleSet: Normal 9 | StackLeniency: 0 10 | Mode: 0 11 | LetterboxInBreaks: 0 12 | OverlayPosition: Above 13 | WidescreenStoryboard: 1 14 | 15 | [Editor] 16 | DistanceSpacing: 2.4 17 | BeatDivisor: 4 18 | GridSize: 16 19 | TimelineZoom: 1.400006 20 | 21 | [Metadata] 22 | Title:visual spacing 23 | TitleUnicode:visual spacing 24 | Artist:test 25 | ArtistUnicode:test 26 | Creator:OliBomby 27 | Version:test12 28 | Source: 29 | Tags: 30 | BeatmapID:0 31 | BeatmapSetID:-1 32 | 33 | [Difficulty] 34 | HPDrainRate:4 35 | CircleSize:5 36 | OverallDifficulty:4 37 | ApproachRate:4 38 | SliderMultiplier:1 39 | SliderTickRate:1 40 | 41 | [Events] 42 | //Background and Video events 43 | 0,0,"black.jpg",0,0 44 | //Break Periods 45 | //Storyboard Layer 0 (Background) 46 | //Storyboard Layer 1 (Fail) 47 | //Storyboard Layer 2 (Pass) 48 | //Storyboard Layer 3 (Foreground) 49 | //Storyboard Layer 4 (Overlay) 50 | //Storyboard Sound Samples 51 | 52 | [TimingPoints] 53 | 0,300,4,1,0,100,1,0 54 | 300,-8.11622433244054,4,1,0,100,0,0 55 | 600,-7.518920947975,4,1,0,100,0,0 56 | 750,-8.11622433244055,4,1,0,100,0,0 57 | 1500,-25.4413054497162,4,1,0,100,0,0 58 | 2100,-270.27027027027,4,1,0,100,0,0 59 | 60 | 61 | [HitObjects] 62 | 459,304,300,6,1,B|470:355|470:355|543:339|543:339|512:192,1,243.61725,0|0,0:0|0:0,0:0:0:0: 63 | 479,10,450,2,1,B|398:26|398:26|439:217,1,243.61725,0|0,0:0|0:0,0:0:0:0: 64 | 344,291,600,2,1,B|298:300|298:300|281:221|281:221|358:205|358:205|375:284,1,320.481612501177,0|0,0:0|0:0,0:0:0:0: 65 | 319,0,750,2,1,B|331:56|331:56|170:88|170:88|158:34,1,243.61725,0|0,0:0|0:0,0:0:0:0: 66 | 152,319,900,2,1,B|121:172|121:172|194:156|194:156|205:207,1,243.61725,0|0,0:0|0:0,0:0:0:0: 67 | 492,100,1050,2,1,B|265:147|265:147|254:102,1,243.61725,0|0,0:0|0:0,0:0:0:0: 68 | 242,384,1200,2,1,B|228:326|228:326|72:360|72:360|60:300,1,243.61725,0|0,0:0|0:0,0:0:0:0: 69 | --------------------------------------------------------------------------------