Fixed minor issues and added convenience rsync for litten in shell script.

This commit is contained in:
Brian Lee 2024-09-17 15:37:36 -07:00
parent f298623cbe
commit 770bd7ce56
3 changed files with 51 additions and 24 deletions

View File

@ -1,4 +1,5 @@
#!/usr/bin/env bash
set -e
# ===============================================================
# PNG to JPEG Converter for ComfyUI Output
# ===============================================================
@ -25,6 +26,9 @@
#
# ===============================================================
if [ $(hostname) = "litten" ]; then
rsync -tap roar:/opt/comfyui/output/dev-dancing comfyui-output/
fi
# Create the output directory if it doesn't exist
mkdir -p ./covers

View File

@ -84,8 +84,21 @@ def build_difficulty_based_playlist(api, player_id, history, playlist_name):
history[song_id] = []
history[song_id].append(difficulty_name)
# Prepare the custom playlist
custom_playlist = []
for score in playlist_scores:
custom_playlist.append({
'song': score['leaderboard']['song'],
'difficulty': score['leaderboard']['difficulty']
})
playlist_file, used_cover = api.create_player_playlist_with_random_cover(
player_id, playlist_name, "SaberList Tool", len(playlist_scores), True, set(history['used_covers'])
player_id,
playlist_name,
"SaberList Tool",
custom_playlist=playlist_scores, # Pass the playlist_scores directly
use_cache=True,
used_covers=set(history['used_covers'])
)
if used_cover:
@ -110,7 +123,13 @@ def saberlist_replay_bl():
playlist_file, playlist_scores, used_cover = build_difficulty_based_playlist(api, player_id, history, playlist_name)
save_history(history)
print(f"Playlist created: {playlist_file}")
# Create the full path for the cover image
cover_image_path = os.path.join("covers", used_cover) if used_cover else None
# Create the bplist file using create_bplist()
bplist_file = api.create_bplist(playlist_scores, playlist_name, "SaberList Tool", cover_image_path)
print(f"Playlist created: {bplist_file}")
if used_cover:
print(f"Cover image used: {used_cover}")
print("Playlist contents:")

View File

@ -142,15 +142,14 @@ class BeatLeaderAPI:
return self.CACHE_DIR
def create_bplist(self, scores, playlist_title="playlist", playlist_author="SaberList Tool", song_limit=0, cover_image=None):
def create_bplist(self, playlist_data, playlist_title="playlist", playlist_author="SaberList Tool", cover_path=None):
"""
Create a bplist (JSON) file in the current directory from the given scores data.
Create a bplist (JSON) file in the current directory from the given playlist data.
:param scores: List of score data from get_player_scores
:param playlist_data: List of score data or custom playlist data
:param playlist_title: Title of the playlist (default: "playlist")
:param playlist_author: Author of the playlist (default: "SaberList Tool")
:param song_limit: Maximum number of songs to include (0 for no limit)
:param cover_image: Path to the cover image file (optional)
:param cover_path: Path to the cover image file (optional)
:return: Path to the created bplist file
"""
playlist = {
@ -159,17 +158,18 @@ class BeatLeaderAPI:
"songs": []
}
if cover_image:
with open(cover_image, "rb") as image_file:
if cover_path:
with open(cover_path, "rb") as image_file:
encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
playlist["image"] = f"data:image/jpeg;base64,{encoded_image}"
# Determine the number of songs to include
num_songs = len(scores) if song_limit == 0 else min(song_limit, len(scores))
for score in scores[:num_songs]:
song = score['leaderboard']['song']
difficulty = score['leaderboard']['difficulty']
for item in playlist_data:
if 'leaderboard' in item: # It's a score object
song = item['leaderboard']['song']
difficulty = item['leaderboard']['difficulty']
else: # It's a custom playlist item
song = item['song']
difficulty = item['difficulty']
song_entry = {
"hash": song['hash'],
@ -192,7 +192,7 @@ class BeatLeaderAPI:
with open(filename, 'w') as file:
json.dump(playlist, file, indent=4)
logging.info(f"Playlist written to {filename} with {num_songs} songs")
logging.info(f"Playlist written to {filename} with {len(playlist['songs'])} songs")
return os.path.abspath(filename)
@ -210,20 +210,23 @@ class BeatLeaderAPI:
scores_data = self.get_player_scores(player_id, use_cache=use_cache)
return self.create_bplist(scores_data['data'], playlist_title, playlist_author, song_limit)
def create_player_playlist_with_random_cover(self, player_id, playlist_title="playlist", playlist_author="SaberList Tool", song_limit=0, use_cache=True, used_covers=None):
def create_player_playlist_with_random_cover(self, player_id, playlist_title="playlist", playlist_author="SaberList Tool", custom_playlist=None, use_cache=True, used_covers=None):
"""
Create a bplist (JSON) file for a player's scores with a random cover image.
Create a bplist (JSON) file for a player's scores or a custom playlist with a random cover image.
:param player_id: ID of the player
:param playlist_title: Title of the playlist (default: "playlist")
:param playlist_author: Author of the playlist (default: "SaberList Tool")
:param song_limit: Maximum number of songs to include (0 for no limit)
:param custom_playlist: Custom playlist data (optional)
:param use_cache: Whether to use cached scores data (default: True)
:param used_covers: Set of already used cover image filenames
:return: Path to the created bplist file, and the filename of the used cover
"""
scores_data = self.get_player_scores(player_id, use_cache=use_cache)
if custom_playlist is None:
scores_data = self.get_player_scores(player_id, use_cache=use_cache)
playlist_data = scores_data['data']
else:
playlist_data = custom_playlist
covers_dir = "./covers"
@ -236,12 +239,13 @@ class BeatLeaderAPI:
if not available_covers:
logging.warning("No unused cover images available. Using no cover.")
return self.create_bplist(scores_data['data'], playlist_title, playlist_author, song_limit), None
return self.create_bplist(playlist_data, playlist_title, playlist_author), None
selected_cover = random.choice(available_covers)
cover_path = os.path.join(covers_dir, selected_cover)
playlist_file = self.create_bplist(scores_data['data'], playlist_title, playlist_author, song_limit, cover_path)
playlist_file = self.create_bplist(playlist_data, playlist_title, playlist_author, cover_path=cover_path)
return playlist_file, selected_cover
def get_player_info(self, player_id):