Commit graph

84 commits

Author SHA1 Message Date
vini
de994bced9 refactor: idle-friendly render loops, drop dead strobe code
Rain and globe rAF loops now start on demand and stop when their
effect fully fades, instead of ticking every frame forever. Lightning
clears the bluish strobe tint after each burst. Removed triggerStrobe,
which was disabled and unreferenced.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015HtPHsTnDcLVSCiF5FGHZj
2026-07-19 10:23:16 -03:00
vini
f20d8adf4f fix: first /tmp file poll is baseline only, no longer overrides config
On page load the first poll counted as a change and applied the file
value, so a stale /tmp file could flip the mode set by the Plasma
config ~800ms after startup. Record the baseline silently; only real
changes toggle modes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015HtPHsTnDcLVSCiF5FGHZj
2026-07-19 10:18:53 -03:00
vini
39bc5d0794 feat: chuva mode — moon, rain, lightning; clean transitions with balada
Rain mode with canvas rain, stormy sky, sun-to-moon transition and
lightning strobe. Mode switching fixed so only one of moon/globe shows:
file pollers are edge-triggered (stale /tmp files no longer fight),
toggle scripts keep the files mutually exclusive, exits fade fast while
entrances stay slow, drawGlobe solely owns globe opacity, and leaving
chuva restores the album-color theme on fog/horizon.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015HtPHsTnDcLVSCiF5FGHZj
2026-07-19 10:18:34 -03:00
vini
36220dc34f fix: smooth balada nebula color transition via ::after opacity 2026-06-14 13:27:27 -03:00
vini
d422cea905 feat: balada mode — mirror ball, disco floor, spotlights, sun transition
- Mirror ball globe: canvas-based tile rendering with winner-takes-all
  specular lighting + Lambert diffuse edges; 8 orthogonal lights orbit
  slowly (~4 min/rev) ensuring no dark periods
- Disco floor tiles: per-frame alpha/color lerp (dt-based) decoupled from
  the 400ms randomization gate — eliminates choppy low-FPS appearance;
  smooth ~1.2s fade-in, ~2.4s color blending per tile
- Sun: organic JS-generated stripes (sqrt-spaced, perspective-correct),
  opacity crossfade overlay for retrowave↔balada gradient transition,
  slow position animation (rises to sky in balada mode)
- Spotlights, disco particles, ray rotation, beat pulse
- toggle-balada.sh / toggle-skeleton.sh: external IPC scripts via /tmp files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 19:36:24 -03:00
ltadeu6
71845ff2a7
refactor: replace keybind toggle with config checkbox for skeleton visibility
Removes the pynput/curl-based shortcut approach in favour of a plain
Plasma wallpaper config checkbox (ShowSkeleton). QML reads the setting
on page load and on change, calling setShowSkeleton() in JS directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 15:00:44 -03:00
ltadeu6
02edf4d9af
fix: eliminate verse-transition flicker by deferring opacity until position is snapped
Also switch lyric lines to word-wrap layout with a translateY inner
container, so long lines wrap instead of being cut with ellipsis.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 18:09:15 -03:00
ltadeu6
4c4b1bbb96
feat: verse-based lyric display with smooth active-line transitions
Replace circular ring-buffer scroll with verse-aware display: backend
now groups lyrics into verses on empty lines or timestamp gaps >3.5s
and exposes verse_lines + verse_active; frontend rebuilds the DOM once
per verse (fade-out/in) and animates only opacity/font/glow when the
active line advances within the same verse.  CSS mask-image gradient
replaces hard overflow clipping at top and bottom edges.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:33:12 -03:00
ltadeu6
2b05d5844d
fix: explicit width on lyric-display + simplify scroll logic
position:absolute children with width:100% require explicit parent width.
max-width alone leaves the container at 0px, hiding all text via overflow:hidden.
Also removed jump-detection branch to avoid opacity:0 dead-ends.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:16:30 -03:00
ltadeu6
b75cec0107
fix: correct stale currentLyricKey ref → currentActive in updateMusic
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 17:07:41 -03:00
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