Commit graph

52 commits

Author SHA1 Message Date
ltadeu6
43e314176b
tweak: sun stripes use semi-transparent purple instead of solid black
rgba(20,0,50,0.72) lets the gradient bleed through the bands, reducing
harsh contrast while keeping the stripe effect visible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:35:33 -03:00
ltadeu6
d822b1c669
feat: add classic synthwave sun at horizon
280px circle with repeating stripe overlay (13px gap / 4px band),
yellow→orange→magenta→purple gradient, positioned half-buried at the
horizon so the floor grid renders over the lower half and the fog floats
in front. Atmospheric halo via ::after pseudo-element.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:32:24 -03:00
ltadeu6
b3acbeb78d
perf: reduce fog from 5 to 3 wisps, blur 60px→45px
Fewer compositing layers speeds up WebEngine initialization after deploy.
will-change hint lets the browser pre-promote layers before animation starts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:29:32 -03:00
ltadeu6
bf2a10a111
tweak: increase fog opacity for more visible synthwave haze
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:28:28 -03:00
ltadeu6
775bad978d
feat: synthwave fog rising above horizon
Five blurred elliptic wisps anchored at the horizon line, each drifting
upward at different speeds (8-15s) and delays for an organic breathing
effect. Color synced with the dominant album art color via applyTheme.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:26:55 -03:00
ltadeu6
510e677c30
revert: use single dominant color on VU bars, drop secondary gradient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:22:12 -03:00
ltadeu6
7ed455f72b
feat: secondary color gradient on VU meter bars
Extract a hue-distinct secondary color from album art and apply a
primary→secondary gradient across the VU meter bars (bass end = primary,
treble end = secondary). Falls back to complementary hue if no distinct
color is found.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:10:24 -03:00
ltadeu6
1957fda57e
perf: reduce GC pressure in render loops
- Pre-compute star RGB components to avoid 3 string.replace() calls per
  star per frame (~40K string allocs/sec eliminated)
- Cache floor gradient object; rebuild only on canvas resize
- Batch CAVA bar DOM updates through requestAnimationFrame so SSE events
  never trigger mid-frame style mutations

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:07:33 -03:00
ltadeu6
6ead16ff08
Revert "feat: floor speed responds to BPM; skeleton glow reacts to bass"
This reverts commit 7cd9f6bf2b.
2026-06-07 12:56:56 -03:00
ltadeu6
7cd9f6bf2b
feat: floor speed responds to BPM; skeleton glow reacts to bass
- Beat detection restored with BPM tracking (avg of last 8 beats)
- Floor scroll speed = 0.025 * musicSpeed (BPM/120), slower by default
- Skeleton drop-shadow intensity driven by bass energy

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 12:55:27 -03:00
ltadeu6
8a73e76e61
feat: skeleton bottom 28% (midpoint) 2026-06-07 12:49:54 -03:00
ltadeu6
e98a9d5786
feat: move skeleton lower (bottom 32% -> 24%) 2026-06-07 12:49:27 -03:00
ltadeu6
390edd2624
revert: remove floor reflection 2026-06-07 12:48:59 -03:00
ltadeu6
bc00a7173c
fix: align reflection to visual feet using measured 11.1% transparent offset 2026-06-07 12:47:10 -03:00
ltadeu6
89f9c5c69a
fix: move reflection inside robot-wrap so bottom:0 aligns with feet 2026-06-07 12:40:19 -03:00
ltadeu6
8de8923785
feat: add perspective floor reflection of skeleton 2026-06-07 12:36:54 -03:00
ltadeu6
e4ecfb51c2
feat: remove robot floor shadow 2026-06-07 12:31:57 -03:00
ltadeu6
9f9fa2a49e
feat: artist name in cyan, song title in white 2026-06-07 12:24:50 -03:00
ltadeu6
9315655631
fix: music text color back to white 2026-06-07 12:23:40 -03:00
ltadeu6
47bcfd32f3
feat: remove NOW PLAYING label, style artist name in cyan 2026-06-07 12:22:58 -03:00
ltadeu6
93d0cb87e7
feat: fix skeleton to skeleton3 only, remove switcher 2026-06-07 12:20:44 -03:00
ltadeu6
6e178837d2
feat: increase album art to 330px (+50%) 2026-06-07 12:18:36 -03:00
ltadeu6
2acd2389cb
feat: double album art size; remove horizon beat pulse
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:43:05 -03:00
ltadeu6
daaf947be3
refactor: load album art directly from http://127.0.0.1:8765/art
CORS is now fixed so img.src with http URL works. Remove temp file approach.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:41:38 -03:00
ltadeu6
235cbc4ab8
fix: add CORS header to music-light; remove debug logging
fetch() from file:// was blocked by missing Access-Control-Allow-Origin
on the music-light server. Both color and album art now work.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:40:37 -03:00
ltadeu6
8e8bccebe8
debug: log JS console to /tmp/skeledance_console.log via QML handler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:39:13 -03:00
ltadeu6
458c90fb30
fix: load album art from file:///tmp/skeledance_art.jpg
Avoids WebEngine mixed-content block on http:// img src from file://.
music-light now saves the PIL image to disk on each track change.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:37:59 -03:00
ltadeu6
0a000a2cfb
fix: load album art via fetch+createObjectURL to bypass mixed content block
img src http:// from file:// page is blocked; fetch() to localhost
works, so fetch the blob and use a blob: URL instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:36:11 -03:00
ltadeu6
93c019c02e
fix: use img tag for album art instead of CSS background-image
CSS background-image url() from http:// is blocked in WebEngine local
context even when fetch() works; <img src> does not have this restriction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:33:26 -03:00
ltadeu6
b4bf048487
fix: load album art via local /art proxy instead of external URL
WebEngine blocks fetching external Spotify URLs from local content.
Now uses http://127.0.0.1:8765/art which proxies the image locally.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:31:26 -03:00
ltadeu6
b6e0ef1c3c
fix: load album art via fetch+blob to bypass WebEngine URL restrictions
Direct background-image URLs to external hosts are blocked in the
local WebEngineView context; fetch the image as a blob and convert
to data URL instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:30:14 -03:00
ltadeu6
466bb1245a
feat: show album art in upper right corner
Fetches art_url from music-light /current and displays it as a
background-image div with themed box-shadow. Fades in/out with music.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:29:08 -03:00
ltadeu6
fd4ba05d1e
feat: fade meteors at horizon using mask-image on #meteorLayer
Meteors now dissolve as they approach the horizon line (fade from
50% to 60% viewport height) via CSS mask-image on their container.
Also fixed spawnMeteor appending to #meteorLayer instead of .scene.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:21:56 -03:00
ltadeu6
238c56eba4
Fix meteor animation: animate transform instead of static translate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:17:35 -03:00
ltadeu6
1e9b63e577
Remove character bounce from beat, keep only horizon pulse
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:14:18 -03:00
ltadeu6
60a8190bd7
Remove spectrum visualizer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:12:59 -03:00
ltadeu6
134d09c93f
Fix redeclared const scene breaking entire script
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:11:11 -03:00
ltadeu6
ad81c6fb69
Add horizon beat pulse, spectrum visualizer, meteor shower, theme color
- Horizon flashes brighter on each beat (synced with character bounce)
- Spectrum visualizer behind the character shows mid/high frequencies
- Meteors streak across the sky randomly every 4-10s
- fetchTheme() pulls dominant color from music-light and tints horizon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:08:15 -03:00
ltadeu6
31dc0dae15
Remove skeleton.apng from rotation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:57:26 -03:00
ltadeu6
85726b8c41
Add beat-synced bounce effect to character
Detects bass beats from CAVA data using a fast/slow EMA ratio.
On each beat, applies a CSS scale+translateY animation to .beat-wrap
without interfering with the APNG playback or positioning.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:49:17 -03:00
ltadeu6
39e7c07309
Replace QML CAVA polling with SSE server for smooth bars
DataSource fork+exec was limited to ~1fps. Now cava pipes into a Python
SSE server (port 5555) and the HTML connects directly via EventSource,
getting updates at up to 60fps without QML overhead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:37:58 -03:00
ltadeu6
5876701a64
Add real-time CAVA audio visualizer for VU bars
CAVA runs in background via cava-start.sh, writing bar values to
/tmp/skeledance_bars. A new QML DataSource polls that file at 80ms
and calls updateBars() in JS. Falls back to rest state when not playing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:35:35 -03:00
ltadeu6
b2df95ed10
Hide music ticker when nothing is playing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:30:38 -03:00
ltadeu6
2ee2470089
Tie animations to playback state
- Paused/stopped playerctl treated as no music (QML change)
- Character and notes only appear when Playing
- VU meter always visible but in rest state (3px, faint) when idle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:28:36 -03:00
ltadeu6
b6eb089c2c
Show character and VU bars only when music is playing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:23:17 -03:00
ltadeu6
cfbc8ef5e1
Switch skeleton only on track change, not on timer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:17:35 -03:00
ltadeu6
d13d6e5e53
Move music ticker to top of screen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:14:49 -03:00
ltadeu6
6b8eb21086
Fix JS error and add skeleton preloading
Remove dead EQ bar code referencing elements removed with the CSS robot.
Preload all APNG files on startup so skeleton switches are instant.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:13:33 -03:00
ltadeu6
9fbfb0592d
Replace CSS robot with animated character switcher
Swaps DANCEBOT-9000 CSS robot for a pool of APNG characters that cycle
randomly every 8s and on track change: 4 skeleton GIFs, a dancing baby
(YouTube clip), and Pepe. Background removal done with ffmpeg colorkey.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 08:59:29 -03:00
ltadeu6
5378772d8a
Replace CSS floor with canvas perspective grid
Draws vertical lines radiating from a true central vanishing point
and horizontal lines with perspective-correct spacing — giving the
classic retrowave convergence effect instead of parallel lines viewed
from above. Horizon glow line restored above the canvas layer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 08:10:22 -03:00