lushapp 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,686 @@
1
+ import re
2
+ # LUSH - Constants and Presets
3
+
4
+ LOGO_LINES = [
5
+ " █ █ █ █▀▀ █ █ █▀▀█",
6
+ " █▄▄ █▄█ ▄██ █▀█ ██ ██"
7
+ ]
8
+
9
+ COMPACT_LOGO = "LUSH ♫"
10
+
11
+ AMBIENT_PRESETS = [
12
+ {
13
+ "id": "none",
14
+ "name": "Muted / Off",
15
+ "desc": "No ambient soundscape overlay",
16
+ "url": None
17
+ },
18
+ {
19
+ "id": "deep_rain",
20
+ "name": "Deep Rain & Storm",
21
+ "desc": "Heavy soothing rainfall with low rumble",
22
+ "url": "av://lavfi:anoisesrc=c=brown:r=44100:a=0.08,lowpass=f=800"
23
+ },
24
+ {
25
+ "id": "pink_rain",
26
+ "name": "Gentle Pink Rain",
27
+ "desc": "Soft gentle raindrops on windowpane",
28
+ "url": "av://lavfi:anoisesrc=c=pink:r=44100:a=0.05,lowpass=f=1200"
29
+ },
30
+ {
31
+ "id": "ocean_waves",
32
+ "name": "Calming Ocean Waves",
33
+ "desc": "Rhythmic ocean surf & rolling tide",
34
+ "url": "av://lavfi:anoisesrc=c=brown:r=44100:a=0.07,tremolo=f=0.18:d=0.8,lowpass=f=600"
35
+ },
36
+ {
37
+ "id": "campfire",
38
+ "name": "Cozy Campfire Warmth",
39
+ "desc": "Fireside crackle & gentle embers",
40
+ "url": "av://lavfi:anoisesrc=c=brown:r=44100:a=0.04,highpass=f=200,lowpass=f=2000"
41
+ },
42
+ {
43
+ "id": "space_drone",
44
+ "name": "Cosmic Space Drone",
45
+ "desc": "Deep subsonic interstellar hum",
46
+ "url": "av://lavfi:anoisesrc=c=brown:r=44100:a=0.06,tremolo=f=0.1:d=0.5,lowpass=f=350"
47
+ },
48
+ {
49
+ "id": "soma_drone",
50
+ "name": "SomaFM Drone Zone",
51
+ "desc": "24/7 Atmospheric dark ambient live stream",
52
+ "url": "https://ice1.somafm.com/dronezone-128-mp3"
53
+ },
54
+ {
55
+ "id": "soma_deepspace",
56
+ "name": "SomaFM Deep Space One",
57
+ "desc": "24/7 Deep space electronic ambient live stream",
58
+ "url": "https://ice1.somafm.com/deepspaceone-128-mp3"
59
+ },
60
+ {
61
+ "id": "soma_mission",
62
+ "name": "SomaFM Mission Control",
63
+ "desc": "NASA historic comms mixed with space music",
64
+ "url": "https://ice1.somafm.com/missioncontrol-128-mp3"
65
+ }
66
+ ]
67
+
68
+ VISUALIZER_MODES = [
69
+ "shimmer_string",
70
+ "harmonic_strings",
71
+ "laser_cords",
72
+ "quantum_strings",
73
+ "aurora_ribbon",
74
+ "stereo_harp",
75
+ "shimmer_spectrum",
76
+ "mirrored_butterfly",
77
+ "matrix_rain",
78
+ "frequency_beams",
79
+ "sine_interference",
80
+ "braille_oscilloscope",
81
+ "radial_shock_burst",
82
+ "starlight_constellation",
83
+ "waveform",
84
+ "vu",
85
+ "dots",
86
+ "hud",
87
+ "off"
88
+ ]
89
+ VISUALIZER_LABELS = {
90
+ "shimmer_string": "→ Shimmer Audio String (CAVA)",
91
+ "harmonic_strings": "→ Harmonic Resonant Strings (CAVA)",
92
+ "laser_cords": "→ Neon Laser Cords (CAVA)",
93
+ "quantum_strings": "→ Quantum String Shimmer (CAVA)",
94
+ "aurora_ribbon": "→ Aurora Shimmer Strings (CAVA)",
95
+ "stereo_harp": "→ Stereo Harp Strings (CAVA)",
96
+ "shimmer_spectrum": "→ Shimmer Spectrum Bars (CAVA)",
97
+ "mirrored_butterfly": "→ Mirrored Butterfly Wings (CAVA)",
98
+ "matrix_rain": "→ Cyberpunk Matrix Stream (CAVA)",
99
+ "frequency_beams": "→ High-Energy Spectral Beams (CAVA)",
100
+ "sine_interference": "→ Acoustic Wave Interference (CAVA)",
101
+ "braille_oscilloscope": "→ High-Res Braille Oscilloscope (CAVA)",
102
+ "radial_shock_burst": "→ Bass Transient Shockwave (CAVA)",
103
+ "starlight_constellation": "→ Harmonic Constellation (CAVA)",
104
+ "waveform": "→ Live Waveform Line (CAVA)",
105
+ "vu": "→ Live Stereo VU Meter (CAVA)",
106
+ "dots": "→ Live Frequency Peak Dots (CAVA)",
107
+ "hud": "→ Compact HUD Only",
108
+ "off": "→ Disabled"
109
+ }
110
+
111
+ # Fan-Favorite Ranking Orders for Sidebar Sections
112
+ GENZ_ORDER = [
113
+ "sabrina carpenter",
114
+ "sabrina",
115
+ "chappell roan",
116
+ "charli xcx",
117
+ "billie eilish",
118
+ "taylor swift",
119
+ "olivia rodrigo",
120
+ "raye",
121
+ "escapism",
122
+ "sza",
123
+ "doja cat",
124
+ "doja",
125
+ "tate mcrae",
126
+ "gracie abrams",
127
+ "selena gomez",
128
+ "charlie puth",
129
+ "halsey",
130
+ "conan gray",
131
+ "troye sivan",
132
+ "benson boone",
133
+ "noah kahan",
134
+ "alan walker",
135
+ "bts",
136
+ "blackpink",
137
+ "newjeans",
138
+ "jung kook",
139
+ "jungkook",
140
+ "twice",
141
+ "stray kids",
142
+ "le sserafim",
143
+ "aespa",
144
+ "k-pop",
145
+ "bad bunny",
146
+ "karol g",
147
+ "becky g",
148
+ "rosalía",
149
+ "rosalia",
150
+ "rauw alejandro",
151
+ "j balvin",
152
+ "burna boy",
153
+ "tyla",
154
+ "david guetta",
155
+ "bebe rexha",
156
+ "the chainsmokers",
157
+ "marshmello",
158
+ "martin garrix",
159
+ "kygo",
160
+ "skrillex",
161
+ "swedish house mafia",
162
+ "arctic monkeys",
163
+ "hozier",
164
+ "gorillaz",
165
+ "tame impala",
166
+ "the neighbourhood",
167
+ "neighbourhood",
168
+ "cigarettes after sex",
169
+ "the weeknd",
170
+ "lana del rey",
171
+ "dua lipa",
172
+ "ariana grande",
173
+ "harry styles",
174
+ "post malone",
175
+ "drake",
176
+ "lady gaga",
177
+ "rihanna",
178
+ "bruno mars",
179
+ "justin bieber",
180
+ "miley cyrus",
181
+ "ed sheeran",
182
+ "k-pop",
183
+ "shawn mendes",
184
+ "camila cabello",
185
+ "charlie puth",
186
+ "doja",
187
+ "sam smith",
188
+ "khalid",
189
+ "twenty one pilots",
190
+ "imagine dragons",
191
+ "kendrick lamar",
192
+ "travis scott",
193
+ "bad bunny"
194
+ ]
195
+
196
+ def get_genz_sort_rank(station):
197
+ name = station.get("name", "").lower()
198
+ for rank, token in enumerate(GENZ_ORDER):
199
+ if re.search(r'\b' + re.escape(token) + r'\b', name):
200
+ return rank
201
+ return len(GENZ_ORDER)
202
+
203
+ LEGENDS_ORDER = [
204
+ "michael jackson",
205
+ "britney spears",
206
+ "britney",
207
+ "queen",
208
+ "the beatles",
209
+ "beatles",
210
+ "madonna",
211
+ "daft punk",
212
+ "eminem",
213
+ "whitney houston",
214
+ "prince",
215
+ "the ronettes",
216
+ "ronettes",
217
+ "be my baby",
218
+ "diana ross",
219
+ "the supremes",
220
+ "supremes",
221
+ "motown",
222
+ "elton john",
223
+ "david bowie",
224
+ "stevie wonder",
225
+ "abba",
226
+ "pink floyd",
227
+ "nirvana",
228
+ "led zeppelin",
229
+ "ac/dc",
230
+ "the rolling stones",
231
+ "rolling stones",
232
+ "bob marley",
233
+ "elvis",
234
+ "fleetwood mac",
235
+ "metallica",
236
+ "black sabbath",
237
+ "shakira",
238
+ "celine dion",
239
+ "mariah carey",
240
+ "george michael",
241
+ "kylie minogue",
242
+ "tina turner",
243
+ "cher",
244
+ "frank sinatra",
245
+ "ray charles",
246
+ "timbaland",
247
+ "usher",
248
+ "destiny's child",
249
+ "the black eyed peas",
250
+ "black eyed peas",
251
+ "nelly furtado",
252
+ "nelly",
253
+ "50 cent",
254
+ "gwen stefani",
255
+ "no doubt",
256
+ "alicia keys",
257
+ "ciara",
258
+ "missy elliott",
259
+ "missy",
260
+ "sean paul",
261
+ "kelly clarkson",
262
+ "backstreet boys",
263
+ "spice girls",
264
+ "avril lavigne",
265
+ "christina aguilera",
266
+ "beyonce",
267
+ "janet jackson",
268
+ "aretha franklin",
269
+ "bruce springsteen",
270
+ "billy joel",
271
+ "bon jovi",
272
+ "guns n",
273
+ "u2",
274
+ "aerosmith",
275
+ "bee gees",
276
+ "phil collins"
277
+ ]
278
+
279
+ def get_legend_sort_rank(station):
280
+ name = station.get("name", "").lower()
281
+ for rank, token in enumerate(LEGENDS_ORDER):
282
+ if re.search(r'\b' + re.escape(token) + r'\b', name):
283
+ return rank
284
+ return len(LEGENDS_ORDER)
285
+
286
+ SIDEBAR_SECTIONS = [
287
+ {
288
+ "title": "MUSIC & ARTISTS",
289
+ "items": [
290
+ {
291
+ "key": "top_artists",
292
+ "label": "Top Artists",
293
+ "tag": "1:TOP",
294
+ "match": lambda s: bool((s.get("category") == "music" or "exclusive.radio" in s.get("url", "").lower()) and (s.get("top_artist") is True or any(name in s.get("name", "").lower() for name in ["michael jackson", "billie eilish", "kanye west", "madonna", "marvin gaye", "miles davis", "abba", "justin bieber", "sia", "katy perry", "moby", "queen", "taylor swift", "beatles", "eminem", "olivia rodrigo", "lana del rey", "pink floyd", "led zeppelin"])))
295
+ },
296
+ {
297
+ "key": "artist_genz",
298
+ "label": "Trending (Gen Z)",
299
+ "tag": "2:GENZ",
300
+ "match": lambda s: bool((s.get("category") == "music" or "exclusive.radio" in s.get("url", "").lower() or "bigfm" in s.get("url", "").lower() or "181fm" in s.get("url", "").lower() or "1.fm" in s.get("url", "").lower() or "abm" in s.get("url", "").lower()) and any(name in s.get("name", "").lower() for name in GENZ_ORDER)),
301
+ "sort_key": get_genz_sort_rank
302
+ },
303
+ {
304
+ "key": "artist_legends",
305
+ "label": "Ever Popular",
306
+ "tag": "3:LEGENDS",
307
+ "match": lambda s: bool((s.get("category") == "music" or "exclusive.radio" in s.get("url", "").lower() or "abm" in s.get("url", "").lower() or "181fm" in s.get("url", "").lower() or "1.fm" in s.get("url", "").lower() or "uber.radio" in s.get("url", "").lower()) and any(name in s.get("name", "").lower() for name in LEGENDS_ORDER)),
308
+ "sort_key": get_legend_sort_rank
309
+ },
310
+ {
311
+ "key": "artist_newage",
312
+ "label": "New Age & Chill",
313
+ "tag": "4:NEWAGE",
314
+ "match": lambda s: bool((s.get("category") == "music" or "exclusive.radio" in s.get("url", "").lower() or "organlive" in s.get("url", "").lower()) and (any(name in s.get("name", "").lower() for name in ["enya", "enigma", "mike oldfield", "ludovico einaudi", "moby", "sade", "norah jones", "massive attack", "sigur ros", "brian eno", "depeche mode", "kraftwerk", "air", "thievery corporation", "zero 7", "morcheeba", "cocteau twins", "delerium", "deep forest", "café del mar", "cafe del mar", "schiller", "kitaro", "yanni", "andrea bocelli", "anna lapwood", "organlive", "pipe organ"]) or any(k in s.get("genre", "").lower() for k in ["new age", "ambient", "chill", "dream", "ethereal", "crossover", "meditation", "pipe organ", "organ"])))
315
+ },
316
+ {
317
+ "key": "music",
318
+ "label": "All Artists",
319
+ "tag": "5:ALL",
320
+ "match": lambda s: bool(s.get("category") == "music" or "exclusive.radio" in s.get("url", "").lower() or "artist" in s.get("genre", "").lower())
321
+ }
322
+ ]
323
+ },
324
+ {
325
+ "title": "RADIO & SOUNDSCAPES",
326
+ "items": [
327
+ {
328
+ "key": "all_radio",
329
+ "label": "All Radio",
330
+ "tag": "0:RADIO",
331
+ "match": lambda s: s.get("category") != "music" and "exclusive.radio" not in s.get("url", "").lower() and "artist" not in s.get("genre", "").lower()
332
+ },
333
+ {
334
+ "key": "lofi",
335
+ "label": "Lo-Fi & Chill",
336
+ "tag": "r:LOFI",
337
+ "match": lambda s: s.get("category") != "music" and any(k in s.get("genre", "").lower() for k in ["lofi", "lo-fi", "chillhop", "study", "cafe", "chill", "relax"])
338
+ },
339
+ {
340
+ "key": "synth",
341
+ "label": "Synthwave & Cyber",
342
+ "tag": "r:SYNTH",
343
+ "match": lambda s: s.get("category") != "music" and any(k in s.get("genre", "").lower() for k in ["synth", "synthwave", "chillsynth", "spacesynth", "vaporwave", "retrowave", "outrun", "80s", "cyber", "cyberpunk", "darksynth"])
344
+ },
345
+ {
346
+ "key": "ambient",
347
+ "label": "Ambient & Spa",
348
+ "tag": "r:AMB",
349
+ "match": lambda s: s.get("category") != "music" and any(k in s.get("genre", "").lower() for k in ["ambient", "downtempo", "space", "drone", "sleep", "meditation", "atmospheric", "spa"])
350
+ },
351
+ {
352
+ "key": "lush",
353
+ "label": "Lush & ASMR (18+)",
354
+ "tag": "r:LUSH",
355
+ "match": lambda s: s.get("category") != "music" and any(k in s.get("genre", "").lower() for k in ["lush", "asmr", "vocal", "vocals", "ethereal", "shoegaze", "dreamy", "harmonies", "whisper", "whispers", "sensual", "sleep", "velvet"])
356
+ }
357
+ ]
358
+ },
359
+ {
360
+ "title": "LIBRARY",
361
+ "items": [
362
+ {"key": "bookmarks", "label": "Favs", "tag": "b:FAV"},
363
+ {"key": "history", "label": "History", "tag": "h:HIST"},
364
+ {"key": "playing", "label": "Now Playing", "tag": "p:NOW"},
365
+ {"key": "insights", "label": "Insights", "tag": "I:STAT"}
366
+ ]
367
+ },
368
+ {
369
+ "title": "CONFIG",
370
+ "items": [
371
+ {"key": "themes", "label": "Themes", "tag": "t:THEME"},
372
+ {"key": "ambient_fx", "label": "Ambient FX", "tag": "e:FX"},
373
+ {"key": "settings", "label": "Settings", "tag": "s:CONF"}
374
+ ]
375
+ }
376
+ ]
377
+
378
+ ALL_SIDEBAR_ITEMS = [item for sec in SIDEBAR_SECTIONS for item in sec["items"]]
379
+
380
+ DEFAULT_THEMES = {
381
+ "Brat Lime": {
382
+ "header": [0, 154], "accent": 154, "footer": [0, 154],
383
+ "track": 231, "playing": 118, "highlight": [0, 154], "genre": 190,
384
+ "border": 154, "sub": 242, "desc": "Charli XCX Brat: Electric Acid Lime, Club White & Rave Black"
385
+ },
386
+ "Toxic Latex": {
387
+ "header": [0, 198], "accent": 198, "footer": [0, 198],
388
+ "track": 219, "playing": 196, "highlight": [0, 198], "genre": 225,
389
+ "border": 198, "sub": 244, "desc": "Britney Spears: High-Gloss Pop Latex Crimson & Diamond Fuchsia"
390
+ },
391
+ "Blohsh Acid": {
392
+ "header": [0, 46], "accent": 46, "footer": [0, 46],
393
+ "track": 85, "playing": 118, "highlight": [0, 46], "genre": 45,
394
+ "border": 46, "sub": 241, "desc": "Billie Eilish: Toxic Radioactive Slime Green & Abyss Midnight Navy"
395
+ },
396
+ "Lover Pastel": {
397
+ "header": [0, 218], "accent": 218, "footer": [0, 218],
398
+ "track": 117, "playing": 221, "highlight": [0, 218], "genre": 189,
399
+ "border": 218, "sub": 245, "desc": "Taylor Swift Lover: Pastel Cloud Pink, Sky Blue & Iridescent Sparkle"
400
+ },
401
+ "Guts Sour": {
402
+ "header": [0, 129], "accent": 129, "footer": [0, 129],
403
+ "track": 207, "playing": 177, "highlight": [0, 129], "genre": 141,
404
+ "border": 129, "sub": 243, "desc": "Olivia Rodrigo Guts: Bruised Vampire Purple, Sour Violet & Angst Black"
405
+ },
406
+ "Born to Die": {
407
+ "header": [0, 160], "accent": 160, "footer": [0, 160],
408
+ "track": 222, "playing": 174, "highlight": [0, 160], "genre": 216,
409
+ "border": 160, "sub": 241, "desc": "Lana Del Rey: Vintage Bordeaux Cherry, Gilded Gold & Hollywood Noir"
410
+ },
411
+ "After Hours": {
412
+ "header": [0, 196], "accent": 196, "footer": [0, 196],
413
+ "track": 51, "playing": 220, "highlight": [0, 196], "genre": 209,
414
+ "border": 196, "sub": 240, "desc": "The Weeknd: Blinding Crimson Red Suit, 80s Arcade Cyan & Casino Gold"
415
+ },
416
+ "Random Access": {
417
+ "header": [0, 220], "accent": 220, "footer": [0, 220],
418
+ "track": 254, "playing": 45, "highlight": [0, 220], "genre": 214,
419
+ "border": 220, "sub": 242, "desc": "Daft Punk: 24K Mirrored Helmet Gold, Chrome Visor & LED Prism"
420
+ },
421
+ "Short n Sweet": {
422
+ "header": [0, 218], "accent": 218, "footer": [0, 218],
423
+ "track": 172, "playing": 230, "highlight": [0, 218], "genre": 215,
424
+ "border": 218, "sub": 244, "desc": "Sabrina Carpenter: Iced Espresso Caramel, Whipped Cream & Kissed Pink"
425
+ },
426
+ "She Wolf": {
427
+ "header": [0, 214], "accent": 214, "footer": [0, 214],
428
+ "track": 209, "playing": 208, "highlight": [0, 214], "genre": 221,
429
+ "border": 214, "sub": 242, "desc": "Shakira: Wild Sun-Drenched Colombian Gold, Sunset Amber & Desert Coral"
430
+ },
431
+ "Padam Fever": {
432
+ "header": [0, 161], "accent": 161, "footer": [0, 161],
433
+ "track": 198, "playing": 231, "highlight": [0, 161], "genre": 205,
434
+ "border": 161, "sub": 244, "desc": "Kylie Minogue: Heartbeat Scarlet Couture, Disco Platinum & Starlight"
435
+ },
436
+ "Spice World": {
437
+ "header": [0, 27], "accent": 27, "footer": [0, 27],
438
+ "track": 201, "playing": 214, "highlight": [0, 27], "genre": 45,
439
+ "border": 27, "sub": 244, "desc": "Spice Girls: 90s Union Jack Electric Blue, Pop Glitter Magenta & Gold"
440
+ },
441
+ "Barbie Dreamhouse": {
442
+ "header": [0, 200], "accent": 200, "footer": [0, 200],
443
+ "track": 225, "playing": 220, "highlight": [0, 200], "genre": 213,
444
+ "border": 200, "sub": 245, "desc": "Barbie Dreamhouse: Radiant Pop Magenta, Hot Pink & Gold Sparkle"
445
+ },
446
+ "Cyber Lotus": {
447
+ "header": [0, 207], "accent": 207, "footer": [0, 207],
448
+ "track": 219, "playing": 48, "highlight": [0, 207], "genre": 51,
449
+ "border": 207, "sub": 244, "desc": "Cyber Lotus: Bioluminescent Lotus Pink, Jade & Pond Black"
450
+ },
451
+ "Moonlight": {
452
+ "header": [0, 105], "accent": 105, "footer": [0, 105],
453
+ "track": 189, "playing": 45, "highlight": [0, 105], "genre": 141,
454
+ "border": 105, "sub": 241, "desc": "Moonlight: Midnight Indigo, Lunar Cyan & Violet Glow"
455
+ },
456
+ "Hot Pink": {
457
+ "header": [0, 198], "accent": 198, "footer": [0, 198],
458
+ "track": 205, "playing": 201, "highlight": [0, 198], "genre": 213,
459
+ "border": 198, "sub": 245, "desc": "Ultra High-Voltage Hot Pink & Neon Fuchsia"
460
+ },
461
+ "Cyber Barbie": {
462
+ "header": [0, 201], "accent": 201, "footer": [0, 201],
463
+ "track": 219, "playing": 207, "highlight": [0, 201], "genre": 205,
464
+ "border": 201, "sub": 244, "desc": "Electric Neon Bubblegum & Magenta Glow"
465
+ },
466
+ "Pink Velvet": {
467
+ "header": [0, 161], "accent": 198, "footer": [0, 161],
468
+ "track": 206, "playing": 213, "highlight": [0, 198], "genre": 218,
469
+ "border": 161, "sub": 243, "desc": "Rich Midnight Velvet Pink & Coral Rose"
470
+ },
471
+ "Cotton Candy": {
472
+ "header": [0, 218], "accent": 218, "footer": [0, 218],
473
+ "track": 117, "playing": 189, "highlight": [0, 218], "genre": 117,
474
+ "border": 218, "sub": 245, "desc": "Pastel Baby Pink, Sky Blue & Lavender Frost"
475
+ },
476
+ "Strawberry Milk": {
477
+ "header": [0, 217], "accent": 217, "footer": [0, 217],
478
+ "track": 224, "playing": 210, "highlight": [0, 217], "genre": 224,
479
+ "border": 217, "sub": 245, "desc": "Creamy Strawberry Pastel Pink & Sweet Cream"
480
+ },
481
+ "Sakura Bloom": {
482
+ "header": [0, 218], "accent": 218, "footer": [0, 218],
483
+ "track": 225, "playing": 114, "highlight": [0, 218], "genre": 175,
484
+ "border": 218, "sub": 245, "desc": "Japanese Cherry Blossom Pastel Pink & Soft Jade"
485
+ },
486
+ "Plur1bus": {
487
+ "header": [0, 45], "accent": 45, "footer": [0, 45],
488
+ "track": 51, "playing": 48, "highlight": [0, 45], "genre": 38,
489
+ "border": 45, "sub": 245, "desc": "Deep Navy & Neon Electric Cyan"
490
+ },
491
+ "Synthwave": {
492
+ "header": [0, 198], "accent": 198, "footer": [0, 198],
493
+ "track": 226, "playing": 51, "highlight": [0, 198], "genre": 209,
494
+ "border": 198, "sub": 244, "desc": "Neon Hot Pink, Gold & Electric Outrun Cyan"
495
+ },
496
+ "Cyberpunk 2077": {
497
+ "header": [0, 226], "accent": 226, "footer": [0, 226],
498
+ "track": 51, "playing": 48, "highlight": [0, 226], "genre": 198,
499
+ "border": 226, "sub": 245, "desc": "Electric Neon Yellow, Cyan & Hot Magenta"
500
+ },
501
+ "Laser Purple": {
502
+ "header": [0, 129], "accent": 129, "footer": [0, 129],
503
+ "track": 198, "playing": 141, "highlight": [0, 129], "genre": 198,
504
+ "border": 129, "sub": 244, "desc": "High-Voltage UV Purple & Neon Fuchsia"
505
+ },
506
+ "Neon Genesis": {
507
+ "header": [0, 129], "accent": 129, "footer": [0, 129],
508
+ "track": 46, "playing": 208, "highlight": [0, 129], "genre": 46,
509
+ "border": 129, "sub": 244, "desc": "Evangelion Neon Purple, Toxic Green & Orange"
510
+ },
511
+ "Matrix": {
512
+ "header": [0, 46], "accent": 46, "footer": [0, 46],
513
+ "track": 118, "playing": 155, "highlight": [0, 46], "genre": 28,
514
+ "border": 46, "sub": 240, "desc": "Phosphor Hacker Green & Black"
515
+ },
516
+ "OLED Obsidian": {
517
+ "header": [0, 252], "accent": 252, "footer": [0, 252],
518
+ "track": 255, "playing": 231, "highlight": [0, 252], "genre": 245,
519
+ "border": 242, "sub": 238, "desc": "Ultra-Clean Pitch Black, Platinum & Silver"
520
+ },
521
+ "Ghost White": {
522
+ "header": [0, 231], "accent": 231, "footer": [0, 231],
523
+ "track": 254, "playing": 250, "highlight": [0, 231], "genre": 244,
524
+ "border": 244, "sub": 238, "desc": "Alabaster Monochrome, Ice Pearl & Mist Gray"
525
+ },
526
+ "Blood Moon": {
527
+ "header": [0, 196], "accent": 196, "footer": [0, 196],
528
+ "track": 203, "playing": 197, "highlight": [0, 196], "genre": 160,
529
+ "border": 196, "sub": 240, "desc": "Gothic Crimson Red, Ruby Velvet & Charcoal"
530
+ },
531
+ "Sunset Horizon": {
532
+ "header": [0, 208], "accent": 208, "footer": [0, 208],
533
+ "track": 216, "playing": 141, "highlight": [0, 208], "genre": 175,
534
+ "border": 208, "sub": 244, "desc": "Vaporwave Dusk: Neon Tangerine, Coral & Violet"
535
+ },
536
+ "Vapor Mint": {
537
+ "header": [0, 85], "accent": 85, "footer": [0, 85],
538
+ "track": 121, "playing": 51, "highlight": [0, 85], "genre": 121,
539
+ "border": 85, "sub": 244, "desc": "Iced Spearmint, Pastel Seafoam & Vapor Teal"
540
+ },
541
+ "Peach Blossom": {
542
+ "header": [0, 216], "accent": 216, "footer": [0, 216],
543
+ "track": 222, "playing": 210, "highlight": [0, 216], "genre": 222,
544
+ "border": 216, "sub": 244, "desc": "Warm Juicy Peach, Golden Apricot & Coral Rose"
545
+ },
546
+ "Oceanic Abyss": {
547
+ "header": [0, 45], "accent": 45, "footer": [0, 45],
548
+ "track": 80, "playing": 51, "highlight": [0, 45], "genre": 27,
549
+ "border": 45, "sub": 244, "desc": "Deep Sea Sapphire, Aquamarine & Turquoise"
550
+ },
551
+ "Midnight Lavender": {
552
+ "header": [0, 141], "accent": 141, "footer": [0, 141],
553
+ "track": 189, "playing": 147, "highlight": [0, 141], "genre": 183,
554
+ "border": 141, "sub": 243, "desc": "Dreamy Twilight Violet, Lilac & Soft Indigo"
555
+ },
556
+ "Emerald Glow": {
557
+ "header": [0, 48], "accent": 48, "footer": [0, 48],
558
+ "track": 121, "playing": 46, "highlight": [0, 48], "genre": 42,
559
+ "border": 48, "sub": 244, "desc": "Bioluminescent Jade, Mint & Forest Green"
560
+ },
561
+ "Amber Terminal": {
562
+ "header": [0, 214], "accent": 214, "footer": [0, 214],
563
+ "track": 220, "playing": 215, "highlight": [0, 214], "genre": 172,
564
+ "border": 214, "sub": 242, "desc": "Vintage 1980s CRT Warm Amber Phosphor"
565
+ }
566
+ }
567
+
568
+ SHIMMER_EFFECTS = [
569
+ "cava_hyper_fluid_plasma",
570
+ "cava_ballistic_shockwave",
571
+ "cava_quantum_flux",
572
+ "cava_analog_vu_sweep",
573
+ "cava_solar_flare",
574
+ "cava_neon_synapse",
575
+ "cava_crystal_shatter",
576
+ "cava_cyber_matrix_glitch",
577
+ "cava_supernova_inferno",
578
+ "cava_laser_crosshair_scan",
579
+ "cava_liquid_mercury_flow",
580
+ "cava_hyperspace_warp_tunnel",
581
+ "cava_tesla_lightning_arc",
582
+ "cava_sync",
583
+ "cava_equalizer",
584
+ "cava_bass_bloom",
585
+ "cava_laser_sweep",
586
+ "cava_treble_sparkle",
587
+ "cava_stereo_pulse",
588
+ "cava_kick_strobe",
589
+ "cava_vocal_aura",
590
+ "cava_hihat_glitter",
591
+ "cava_frequency_drift",
592
+ "cava_rms_heatwave",
593
+ "cava_stereo_cascade",
594
+ "cava_transient_spark",
595
+ "cava_harmonic_breath",
596
+ "cava_sub_earthquake",
597
+ "cava_aurora_wave",
598
+ "cava_stereo_pan",
599
+ "cava_vocal_ripple",
600
+ "cava_laser_crossfire",
601
+ "cava_spectrum_cascade",
602
+ "cava_heartbeat_sub",
603
+ "cava_diamond_glitter",
604
+ "cava_harmonic_vortex",
605
+ "off"
606
+ ]
607
+
608
+ SHIMMER_EFFECT_LABELS = {
609
+ "cava_hyper_fluid_plasma": "→ CAVA Hyper-Fluid Plasma (Sub-MS Chroma Flow)",
610
+ "cava_ballistic_shockwave": "→ CAVA Ballistic Shockwave (Transient Impact Rings)",
611
+ "cava_quantum_flux": "→ CAVA Quantum Flux (Sub-Atomic Wavefunction)",
612
+ "cava_analog_vu_sweep": "→ CAVA Ballistic VU Sweep (Studio Dual-Needle)",
613
+ "cava_solar_flare": "→ CAVA Solar Corona Flare (Sub-Bass Eruption)",
614
+ "cava_neon_synapse": "→ CAVA Neural Synapse (Cerebral Pulse Network)",
615
+ "cava_crystal_shatter": "→ CAVA Crystalline Prism (Acoustic Refraction)",
616
+ "cava_cyber_matrix_glitch": "→ CAVA Cyber Glitch (Matrix Digital Rain)",
617
+ "cava_supernova_inferno": "→ CAVA Supernova Inferno (Thermal Combustion Flame)",
618
+ "cava_laser_crosshair_scan": "→ CAVA Laser Crosshairs (Tactical Dual Scanner)",
619
+ "cava_liquid_mercury_flow": "→ CAVA Liquid Mercury (Viscous Chrome Flow)",
620
+ "cava_hyperspace_warp_tunnel": "→ CAVA Hyperspace Warp (Interstellar Tunnel)",
621
+ "cava_tesla_lightning_arc": "→ CAVA Tesla Arc Discharge (High-Voltage Lightning)",
622
+ "cava_sync": "→ CAVA Audio Sync (Beat Reactive Flare)",
623
+ "cava_equalizer": "→ CAVA Equalizer (Live Frequency Bars)",
624
+ "cava_bass_bloom": "→ CAVA Bass Bloom (Sub-Bass Shockwave)",
625
+ "cava_laser_sweep": "→ CAVA Laser Sweep (Transient Burst)",
626
+ "cava_treble_sparkle": "→ CAVA Treble Sparkle (Vocal & Cymbal Glitter)",
627
+ "cava_stereo_pulse": "→ CAVA Stereo Wave (Left/Right Dialogue)",
628
+ "cava_kick_strobe": "→ CAVA Kick Strobe (808 Bass Flash)",
629
+ "cava_vocal_aura": "→ CAVA Vocal Aura (Mid-Range Siphon)",
630
+ "cava_hihat_glitter": "→ CAVA Hi-Hat Glitter (Percussion Shimmer)",
631
+ "cava_frequency_drift": "→ CAVA Spectral Drift (Chroma Mood Ring)",
632
+ "cava_rms_heatwave": "→ CAVA RMS Heatwave (Loudness Flare)",
633
+ "cava_stereo_cascade": "→ CAVA Stereo Cascade (Dual Interference)",
634
+ "cava_transient_spark": "→ CAVA Transient Spark (Dynamic Accent)",
635
+ "cava_harmonic_breath": "→ CAVA Harmonic Resonance (Chord Glow)",
636
+ "cava_sub_earthquake": "→ CAVA Sub-Bass Tremor (Low-End Rumble)",
637
+ "cava_aurora_wave": "→ CAVA Aurora Wave (Spectral Ribbon)",
638
+ "cava_stereo_pan": "→ CAVA Stereo Panning (Binaural Flow)",
639
+ "cava_vocal_ripple": "→ CAVA Vocal Resonance (Liquid Ripple)",
640
+ "cava_laser_crossfire": "→ CAVA Laser Crossfire (Dual Snare Lasers)",
641
+ "cava_spectrum_cascade": "→ CAVA Spectrum Cascade (Multi-Band Rain)",
642
+ "cava_heartbeat_sub": "→ CAVA Cardiac Sub-Pulse (Kick Rhythm)",
643
+ "cava_diamond_glitter": "→ CAVA Diamond Glitter (Hi-Hat Storm)",
644
+ "cava_harmonic_vortex": "→ CAVA Harmonic Vortex (Acoustic Whirlwind)",
645
+ "off": "→ Off (Static Clean Theme)"
646
+ }
647
+
648
+ SHIMMER_PALETTES = {
649
+ "Brat Lime": [231, 190, 154, 118, 46],
650
+ "Toxic Latex": [231, 219, 198, 196, 161],
651
+ "Blohsh Acid": [231, 155, 118, 46, 28],
652
+ "Lover Pastel": [231, 225, 218, 189, 117],
653
+ "Guts Sour": [231, 207, 177, 141, 129],
654
+ "Born to Die": [231, 222, 174, 160, 88],
655
+ "After Hours": [231, 220, 196, 51, 160],
656
+ "Random Access": [231, 254, 220, 214, 178],
657
+ "Short n Sweet": [231, 230, 218, 172, 130],
658
+ "She Wolf": [231, 221, 214, 208, 166],
659
+ "Padam Fever": [231, 205, 198, 161, 125],
660
+ "Spice World": [231, 201, 214, 45, 27],
661
+ "Barbie Dreamhouse": [231, 225, 213, 200, 163],
662
+ "Cyber Lotus": [231, 219, 207, 48, 30],
663
+ "Moonlight": [231, 189, 141, 105, 60],
664
+ "Hot Pink": [231, 225, 219, 205, 198],
665
+ "Cyber Barbie": [231, 225, 213, 207, 201],
666
+ "Pink Velvet": [231, 224, 218, 206, 161],
667
+ "Cotton Candy": [231, 224, 218, 189, 117],
668
+ "Strawberry Milk": [231, 225, 224, 217, 210],
669
+ "Sakura Bloom": [231, 225, 218, 211, 175],
670
+ "Plur1bus": [231, 159, 51, 45, 38],
671
+ "Synthwave": [231, 225, 205, 198, 162],
672
+ "Cyberpunk 2077": [231, 226, 220, 214, 198],
673
+ "Laser Purple": [231, 219, 198, 141, 129],
674
+ "Neon Genesis": [231, 226, 208, 129, 46],
675
+ "Matrix": [231, 157, 120, 46, 28],
676
+ "OLED Obsidian": [231, 255, 250, 245, 238],
677
+ "Ghost White": [231, 255, 254, 250, 244],
678
+ "Blood Moon": [231, 224, 203, 196, 124],
679
+ "Sunset Horizon": [231, 223, 215, 208, 168],
680
+ "Vapor Mint": [231, 159, 121, 85, 51],
681
+ "Peach Blossom": [231, 223, 222, 216, 210],
682
+ "Oceanic Abyss": [231, 195, 80, 45, 27],
683
+ "Midnight Lavender": [231, 225, 189, 141, 99],
684
+ "Emerald Glow": [231, 157, 120, 48, 29],
685
+ "Amber Terminal": [231, 229, 220, 214, 172]
686
+ }