diff --git a/artist_bubble_snapshots.json b/artist_bubble_snapshots.json
new file mode 100644
index 00000000..f8c3e3c0
--- /dev/null
+++ b/artist_bubble_snapshots.json
@@ -0,0 +1,42 @@
+{
+ "bubbles": {
+ "6FBDaR13swtiWwGhX1WQsP": {
+ "artist": {
+ "id": "6FBDaR13swtiWwGhX1WQsP",
+ "name": "blink-182",
+ "image_url": "https://i.scdn.co/image/ab6761610000e5eb5da36f8b98dd965336a1507a",
+ "genres": [
+ "pop punk",
+ "punk",
+ "rock",
+ "skate punk",
+ "emo"
+ ],
+ "popularity": 80,
+ "confidence": 0.1111111111111111
+ },
+ "downloads": [
+ {
+ "virtualPlaylistId": "artist_album_6FBDaR13swtiWwGhX1WQsP_00txDYFrU4LjWqwKE8iQJA",
+ "album": {
+ "album_type": "album",
+ "external_urls": {
+ "spotify": "https://open.spotify.com/album/00txDYFrU4LjWqwKE8iQJA"
+ },
+ "id": "00txDYFrU4LjWqwKE8iQJA",
+ "image_url": "https://i.scdn.co/image/ab67616d0000b273d07226d60768eb99f38997f8",
+ "name": "ONE MORE TIME...",
+ "release_date": "2023-10-27",
+ "total_tracks": 19
+ },
+ "albumType": "albums",
+ "status": "in_progress",
+ "startTime": "2025-09-26T14:42:42.028Z"
+ }
+ ],
+ "hasCompletedDownloads": false
+ }
+ },
+ "timestamp": "2025-09-26T07:42:43.033178",
+ "snapshot_id": "20250926_074243"
+}
\ No newline at end of file
diff --git a/web_server.py b/web_server.py
index 7f022605..6adaf4da 100644
--- a/web_server.py
+++ b/web_server.py
@@ -2852,12 +2852,20 @@ def get_artist_detail(artist_id):
single['image_url'] = fix_artist_image_url(single['image_url'])
# Get Spotify discography for proper categorization and missing releases
+ spotify_artist_data = None
try:
spotify_discography = get_spotify_artist_discography(artist_info['name'])
if spotify_discography['success']:
print(f"🎵 Spotify discography found - Albums: {len(spotify_discography['albums'])}, EPs: {len(spotify_discography['eps'])}, Singles: {len(spotify_discography['singles'])}")
+ # Store Spotify artist data for the response
+ spotify_artist_data = {
+ 'spotify_artist_id': spotify_discography.get('spotify_artist_id'),
+ 'spotify_artist_name': spotify_discography.get('spotify_artist_name'),
+ 'artist_image': spotify_discography.get('artist_image')
+ }
+
# Merge owned and Spotify data for complete picture
merged_discography = merge_discography_data(owned_releases, spotify_discography)
else:
@@ -2869,11 +2877,17 @@ def get_artist_detail(artist_id):
# Fall back to our database categorization
merged_discography = owned_releases
- return jsonify({
+ response_data = {
"success": True,
"artist": artist_info,
"discography": merged_discography
- })
+ }
+
+ # Add Spotify artist data if available
+ if spotify_artist_data:
+ response_data["spotify_artist"] = spotify_artist_data
+
+ return jsonify(response_data)
except Exception as e:
print(f"❌ Error in get_artist_detail: {e}")
@@ -12649,7 +12663,9 @@ def get_spotify_artist_discography(artist_name):
'albums': albums,
'eps': eps,
'singles': singles,
- 'artist_image': artist.image_url if hasattr(artist, 'image_url') else None
+ 'artist_image': artist.image_url if hasattr(artist, 'image_url') else None,
+ 'spotify_artist_id': spotify_artist_id,
+ 'spotify_artist_name': artist.name
}
except Exception as e:
diff --git a/webui/index.html b/webui/index.html
index 5f116c57..8cda418a 100644
--- a/webui/index.html
+++ b/webui/index.html
@@ -737,6 +737,11 @@
+
+
diff --git a/webui/static/script.js b/webui/static/script.js
index 0963e586..18c64485 100644
--- a/webui/static/script.js
+++ b/webui/static/script.js
@@ -13462,8 +13462,9 @@ async function showWatchlistModal() {
Last scanned ${new Date(artist.last_scan_timestamp).toLocaleDateString()}
` : ''}
-