Commit graph

61 commits

Author SHA1 Message Date
ltadeu6
99851a2ee7
tweak: darken sun 35%, increase skeleton height 40vh→44vh
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:38:03 -03:00
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
e7a95c8c86
feat: skeleton3.apng at 25fps (midpoint between 33 and 16.7) 2026-06-07 12:59:05 -03:00
ltadeu6
26d7906eb2
feat: slow skeleton3.apng to half speed (50/3 fps) 2026-06-07 12:57:43 -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
80c702fc2d
docs: add AGENTS.md with deploy and remote access guide 2026-06-07 11:23:23 -03:00
ltadeu6
3655fc2eec
chore: remove debug console logging 2026-06-07 10:45:58 -03:00
ltadeu6
f4d8b314bf
debug: re-enable console log 2026-06-07 10:44:38 -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
e858583964
Remove skeleton.apng from repo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:00:42 -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
fa5c99c30d
Fix SSE server blocking: use ThreadingHTTPServer
HTTPServer is single-threaded, so the wallpaper's persistent SSE
connection blocked all subsequent requests. ThreadingHTTPServer
handles each connection in its own thread.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:55:59 -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
d0f72716c2
Fix duplicate CAVA instances via lockfile
pkill pattern was wrong (path has dancingcharacter not skeledance).
Now uses a lockfile to prevent QML from spawning multiple instances.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 09:43:40 -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