From a099898e4ea7792df663b1ce0ec3aa78e2825bfb Mon Sep 17 00:00:00 2001 From: Brian Lee Date: Sun, 12 Jan 2025 17:58:24 -0800 Subject: [PATCH] Add accuracy curve (accgraph) strategy for Scoresaber --- docs/ClientWrapperUsage.md | 36 ++++ docs/Strategies.md | 7 + docs/images/accuracy-gaps.png | Bin 0 -> 120097 bytes src/saberlist/make.py | 8 +- src/saberlist/playlist_strategies/accuracy.py | 161 ++++++++++++++++++ 5 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 docs/Strategies.md create mode 100644 docs/images/accuracy-gaps.png diff --git a/docs/ClientWrapperUsage.md b/docs/ClientWrapperUsage.md index ed21fa4..99a632d 100644 --- a/docs/ClientWrapperUsage.md +++ b/docs/ClientWrapperUsage.md @@ -44,3 +44,39 @@ data[0] filtered_data = [{'acc': item['acc'], 'stars': item['stars'], 'hash': item['hash']} for item in data] filtered_data[0] ``` + +## SimpleBeatSaverAPI + +```python +from helpers.SimpleBeatSaverAPI import SimpleBeatSaverAPI +beat_saver_api = SimpleBeatSaverAPI() + +curated_songs = beat_saver_api.get_curated_songs(use_cache=False) +mapper_maps = beat_saver_api.get_mapper_maps(mapper_id=4285738, use_cache=False) +``` + +## ScoreSaberAPI + +```python +from helpers.ScoreSaberAPI import ScoreSaberAPI +from clients.scoresaber.models.get_api_player_player_id_scores_sort import GetApiPlayerPlayerIdScoresSort + +# Instantiate the API client +scoresaber_api = ScoreSaberAPI() + +# Specify the player ID you want to fetch scores for +player_id = "76561199407393962" + +# Fetch player scores +scores_data = scoresaber_api.get_player_scores( + player_id=player_id, + use_cache=True, # Use cached data if available + limit=100, # Number of scores per page + sort=GetApiPlayerPlayerIdScoresSort.RECENT, # Sort by most recent scores + max_pages=2 # Maximum number of pages to fetch +) +ranked_scores = [score for score in scores_data.get('playerScores') if score['leaderboard']['stars'] != 0] + +print(f"Got {len(scores_data.get('playerScores'))} scores for player {player_id}") +print(f"Got {len(ranked_scores)} ranked scores for player {player_id}") +``` diff --git a/docs/Strategies.md b/docs/Strategies.md new file mode 100644 index 0000000..374d059 --- /dev/null +++ b/docs/Strategies.md @@ -0,0 +1,7 @@ +# Playlist Strategies + +## Accuracy Gaps + +Prioritizes songs that are furthest below the median accuracy for the player. + +![Accuracy Gaps](images/accuracy-gaps.png) diff --git a/docs/images/accuracy-gaps.png b/docs/images/accuracy-gaps.png new file mode 100644 index 0000000000000000000000000000000000000000..848b3dc8d57e0dab21612888e2b6f0dfbf3bfd79 GIT binary patch literal 120097 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 literal 0 HcmV?d00001 diff --git a/src/saberlist/make.py b/src/saberlist/make.py index 1b51fbe..8df77e6 100644 --- a/src/saberlist/make.py +++ b/src/saberlist/make.py @@ -22,7 +22,7 @@ from helpers.SimpleBeatSaverAPI import SimpleBeatSaverAPI from saberlist.utils import reset_history from saberlist.playlist_strategies.oldscores import playlist_strategy_beatleader_oldscores, playlist_strategy_scoresaber_oldscores -from saberlist.playlist_strategies.accuracy import playlist_strategy_beatleader_lowest_acc, playlist_strategy_beatleader_accuracy_gaps +from saberlist.playlist_strategies.accuracy import playlist_strategy_beatleader_lowest_acc, playlist_strategy_beatleader_accuracy_gaps, playlist_strategy_scoresaber_accuracy_gaps from saberlist.playlist_strategies.performance import playlist_strategy_beatleader_lowest_pp, playlist_strategy_scoresaber_lowest_pp from saberlist.playlist_strategies.beatsaver import playlist_strategy_beatsaver_acc, playlist_strategy_beatsaver_curated, playlist_strategy_beatsaver_mappers @@ -54,6 +54,9 @@ def saberlist() -> None: elif strategy == 'beatleader_accuracy_gaps': playlist_data, playlist_title = playlist_strategy_beatleader_accuracy_gaps(SimpleBeatLeaderAPI(cache_expiry_days=CACHE_EXPIRY_DAYS)) playlist_builder = PlaylistBuilder(covers_dir='./covers/pajamas') + elif strategy == 'scoresaber_accuracy_gaps': + playlist_data, playlist_title = playlist_strategy_scoresaber_accuracy_gaps(ScoreSaberAPI(cache_expiry_days=CACHE_EXPIRY_DAYS)) + playlist_builder = PlaylistBuilder(covers_dir='./covers/scoresaber') elif strategy == 'beatsaver_curated': playlist_data, playlist_title = playlist_strategy_beatsaver_curated(SimpleBeatSaverAPI()) playlist_builder = PlaylistBuilder(covers_dir='./covers/curated') @@ -80,11 +83,12 @@ def get_strategy(): choices=[ "scoresaber_oldscores", "beatleader_oldscores", - "beatsaver_acc", + # "beatsaver_acc", # "beatleader_lowest_pp", # "scoresaber_lowest_pp", # "beatleader_lowest_acc", "beatleader_accuracy_gaps", + "scoresaber_accuracy_gaps", "beatsaver_curated", "beatsaver_mappers" ], diff --git a/src/saberlist/playlist_strategies/accuracy.py b/src/saberlist/playlist_strategies/accuracy.py index c0191e0..a2c5431 100644 --- a/src/saberlist/playlist_strategies/accuracy.py +++ b/src/saberlist/playlist_strategies/accuracy.py @@ -16,9 +16,170 @@ logging.basicConfig( ) from helpers.SimpleBeatLeaderAPI import SimpleBeatLeaderAPI +from helpers.BeatLeaderAPI import BeatLeaderAPI from saberlist.utils import prompt_for_player_id, load_history, save_history, normalize_difficulty_name + +from helpers.ScoreSaberAPI import ScoreSaberAPI +from clients.scoresaber.models.get_api_player_player_id_scores_sort import GetApiPlayerPlayerIdScoresSort + +"""Testing +api = ScoreSaberAPI() +song_count = 40 +bin_size = 0.25 +bin_sort = False +""" +def playlist_strategy_scoresaber_accuracy_gaps( + api: ScoreSaberAPI, + song_count: int = 40, + bin_size: float = 0.25, + bin_sort: bool = False +) -> List[Dict[str, Any]]: + """ + Build a playlist of songs where the player's accuracy is furthest below the median accuracy + for their star rating range. Songs are grouped into bins by star rating to ensure fair comparison. + + :param api: ScoreSaberAPI instance for making API calls + :param song_count: Number of songs to include in the playlist + :param bin_size: Size of star rating bins for grouping similar difficulty songs + :param bin_sort: Whether to sort the bins by star rating + :return: A tuple containing (list of song dictionaries, playlist title string) + """ + player_id = prompt_for_player_id() + history = load_history() + history.setdefault('scoresaber_accuracy_gaps', {}) + history.setdefault('playlist_counts', {}) + + # Get the current count and increment it + count_key = 'scoresaber_accuracy_gaps' + current_count = history['playlist_counts'].get(count_key, 0) + new_count = current_count + 1 + history['playlist_counts'][count_key] = new_count + + # Fetch player scores + scores_data = api.get_player_scores( + player_id=player_id, + use_cache=True, + limit=100, # per page + sort=GetApiPlayerPlayerIdScoresSort.RECENT + ) + ranked_scores = [score for score in scores_data.get('playerScores', []) + if score.get('leaderboard', {}).get('stars', 0) != 0] + + if not ranked_scores: + logging.warning(f"No ranked scores found for player ID {player_id} on ScoreSaber.") + return [], "" + logging.debug(f"Found {len(ranked_scores)} ranked scores for player ID {player_id} on ScoreSaber.") + + # Get min and max star ratings + min_stars = min(score['leaderboard']['stars'] for score in ranked_scores) + max_stars = max(score['leaderboard']['stars'] for score in ranked_scores) + star_range = max_stars - min_stars + + # Determine number of bins + num_bins = math.ceil(star_range / bin_size) + logging.info(f"Using bin size: {bin_size}, resulting in {num_bins} bins.") + + # Group accuracies by bins + bin_to_accuracies = defaultdict(list) + for score in ranked_scores: + # Calculate accuracy + try: + modified_score = score['score']['modifiedScore'] + max_score = score['leaderboard']['maxScore'] + accuracy = modified_score / max_score if max_score else 0 + score['accuracy'] = accuracy + except Exception as e: + logging.error(f"Error calculating accuracy for score {score}: {e}") + continue + + stars = score['leaderboard'].get('stars') + if stars is not None and accuracy is not None: + bin_index = int((stars - min_stars) / bin_size) + bin_to_accuracies[bin_index].append(accuracy) + + # Calculate median accuracy for each bin + bin_to_median = {} + for bin_index, accuracies in bin_to_accuracies.items(): + bin_to_median[bin_index] = median(accuracies) + bin_start = min_stars + bin_index * bin_size + bin_end = bin_start + bin_size + logging.debug(f"Median accuracy for bin {bin_index} (stars {bin_start:.2f} to {bin_end:.2f}): {bin_to_median[bin_index]:.4f}") + + # Compute difference from median for each score + for score in ranked_scores: + stars = score['leaderboard'].get('stars') + accuracy = score.get('accuracy') + if stars is not None and accuracy is not None: + bin_index = int((stars - min_stars) / bin_size) + median_acc = bin_to_median.get(bin_index) + if median_acc is not None: + score['diff_from_median'] = accuracy - median_acc + else: + score['diff_from_median'] = float('inf') # Place entries with missing data at the end + else: + score['diff_from_median'] = float('inf') # Place entries with missing data at the end + + # Sort scores by difference from median (ascending: most below median first) + ranked_scores.sort(key=lambda x: x.get('diff_from_median', float('inf'))) + + playlist_data = [] + for score in ranked_scores: + if len(playlist_data) >= song_count: + break + + accuracy = score['score'].get('accuracy', 0) + stars = score['leaderboard'].get('stars') + song_hash = score['leaderboard'].get('songHash') + + if not song_hash or stars is None: + logging.debug(f"Skipping score due to missing hash or stars: {score}") + continue + + difficulty_raw = score['leaderboard']['difficulty'].get('difficultyRaw', '') + game_mode = score['leaderboard']['difficulty'].get('gameMode', 'Standard') + game_mode = game_mode.replace('Solo', '') # Remove prefix 'Solo' from the game mode + difficulty = normalize_difficulty_name(difficulty_raw) + + # Avoid reusing song+difficulty + if song_hash in history['scoresaber_accuracy_gaps'] and difficulty in history['scoresaber_accuracy_gaps'][song_hash]: + logging.debug(f"Skipping song {song_hash} with difficulty {difficulty} as it's in history.") + continue + + song_dict = { + 'hash': song_hash, + 'difficulties': [ + { + 'name': difficulty, + 'characteristic': game_mode + } + ] + } + + playlist_data.append(song_dict) + song_name = score['leaderboard']['songName'] + song_artist = score['leaderboard']['songAuthorName'] + logging.debug(f"Selected song for playlist: Name={song_name}, Artist={song_artist}, " + f"Accuracy={accuracy*100:.2f}%, Diff from Median={score['diff_from_median']*100:.2f}%") + + # Update history + history['scoresaber_accuracy_gaps'].setdefault(song_hash, []).append(difficulty) + + if not playlist_data: + logging.info("No new songs found to add to the playlist based on history for ScoreSaber accuracy gaps.") + else: + for song in playlist_data: + song_hash = song['hash'] + difficulty = song['difficulties'][0]['name'] + logging.info(f"Song added: Hash={song_hash}, Difficulty={difficulty}") + logging.info(f"Total songs added to playlist from ScoreSaber accuracy gaps: {len(playlist_data)}") + + save_history(history) + playlist_title = f"scoresaber_accgraph-{new_count:02d}" + + return playlist_data, playlist_title + def playlist_strategy_beatleader_accuracy_gaps( api: SimpleBeatLeaderAPI, song_count: int = 40,