Commit graph

124 commits

Author SHA1 Message Date
ltadeu6
fdc68594d5
feat: smooth karaoke scroll — no blink on lyric advance
Replace blink-all transition with a circular ring buffer: each lyric
line is absolutely positioned (30px slot). On advance the ring scrolls
up, the outgoing element is recycled to the bottom with new content
(transition disabled for the snap). All style properties (top, opacity,
font-size, color, text-shadow) animate together via CSS transition so
the new active line gains focus as it scrolls into center position.
Jumps (seek / track change) still use a crossfade.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:05:40 -03:00
ltadeu6
10b3bbbf2e
feat: multi-player support + 5-line karaoke lyrics display
- get-playing.sh: iterates playerctl players, picks the one actually
  Playing; QML now calls this instead of bare playerctl metadata so
  a paused Spotify no longer blocks a playing YouTube from showing

- dancer.html: replace single lyric line with 5-slot karaoke display —
  active line (center) is full-brightness with theme-color glow; 2 lines
  before/after are progressively dimmed; slots fade out/in (0.18s/0.45s)
  when the active line advances

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 16:53:17 -03:00
ltadeu6
1a0f8c7ea5
tweak: lyrics min font 12px→16px
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:39:59 -03:00
ltadeu6
1c8909f128
tweak: lyric text-shadow uses theme color for glow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:31:07 -03:00
ltadeu6
2552c9ccb3
tweak: slow music icon pulse 0.5s→1.8s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:16:09 -03:00
ltadeu6
b5eacd35d2
tweak: lyrics top-left, smaller font clamp(12px,1.3vw,18px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:04:15 -03:00
ltadeu6
e59e797f9d
tweak: move lyrics back to bottom-left (left:3%, bottom:16%)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:03:00 -03:00
ltadeu6
54f452a82a
tweak: reduce lyrics font to clamp(18px,2.2vw,32px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 14:02:21 -03:00
ltadeu6
9ce98a08db
tweak: increase lyrics font to clamp(24px,3.2vw,48px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:57:56 -03:00
ltadeu6
ca21a96292
tweak: lyrics position 8%/8%, larger font clamp(16px,1.9vw,26px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:57:23 -03:00
ltadeu6
bc1cbcdc9e
tweak: move lyrics display to top-left corner
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:55:38 -03:00
ltadeu6
7d87ec4c47
fix: retry canvas init until WebEngine reports valid dimensions
qdbus6 refreshCurrentShell sometimes reloads the page before the
WebEngine has settled, leaving innerWidth/Height at 0. Canvas stays
0x0 and the rAF loops draw nothing. initCanvases() now polls every
80ms until dimensions are valid before calling resizeCanvas/resizeFloor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:52:20 -03:00
ltadeu6
347b3729c8
feat: synced lyrics display from LRCLib
music-light fetches synced LRC lyrics from lrclib.net on track change,
tracks playback position via a 0.5s background thread, and exposes the
current lyric line in /current. dancer.html polls /current at 700ms and
displays the line bottom-left with a cyan glow, subtitle style.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 13:50:04 -03:00
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