- play/pause flips its icon (card and pill) the moment it's clicked; the
clicked state is shown until the player has answered
- after play/pause, next or previous, Media is read again at 150 and
600 ms instead of waiting for its once-a-second poll, so title, time
and play state follow within a fraction of a second
- the cover loader checks 4 times a second instead of once
- ipc: island play-pause, the same path as a click (keybinds, tests)
- the card opens on the monitor that was clicked (keybinds: the focused
monitor); the others keep their pill. moving the card to another monitor
restarts its open animation there
- only the focused monitor's window (and the one with the card) reads
Spectrum, so the other pills show still bars and rest
- hover lights only the pill under the pointer
- measured with music on 3 monitors: pill 10.7% of a core (was 27.5%),
open card 20.7% (was 58%), ~62 frames a second in total, 0-1 slow
frames per open/close (was 7-14), back to one island's cost
stopping the shell leaves its cava running (parent 1), reading on from a
closed pipe and ignoring SIGTERM; every restart while music played leaked
one. on start, pkill -KILL -f our cava.conf before starting our own
window_per_monitor with the same view: every monitor shows the island,
all sharing one state (open, hover, player). measured with music on 3
monitors: 180 frames a second in total, pill 27% of a core (was 9%),
open card 58% (was 21%), gpu 1.4 / 3.0 ms per frame each; open/close
drops 7-14 of ~175 frames (was 0-1)
one pink glow for the pill and the open card (opacity 0.3, blur 22),
0.7 while the pill is hovered; the dark drop shadow is gone. same single
shadow as before, so no extra cost (pill 1.3 ms gpu)
- the open card keeps a faint pink glow: the pill's shadow blends from a
dark drop shadow to a centred pink glow (opacity 0.3, blur 22, inside
the window margin); measured 2.95 ms gpu with the card open, as before
- eq bands: hovered, the track widens 4 px and brightens, the knob grows
25% with a full pink ring, the frequency label turns pink
- time bar: hovered, the track thickens 4 px and brightens, the knob grows
- previous/play-pause/next: no halo, circle or growth any more; they go
bold instead (an outline of the glyph's own colour, 0 to 2 px; pause bars
widen), and glowing() is gone
- each hovered spot eases a highlight in and out over 220 ms
- pill: widens 10 px and its drop shadow turns into a centred pink glow
(the same shadow the pill already had, so no extra cost)
- previous/next: swell 12%, icon turns pink, pink halo; play/pause swells
10%, halo, its pink warms toward white
- chips and presets brighten and grow 4-6%, dropdown rows slide right
- halos only exist while hovered (a shadow is two gpu layers per frame)
- one button lit at a time, and highlights reset when the card or the
dropdown changes: amane matches hover targets by position in the frame,
so a target that disappears never hears the pointer leave
- README: features, layout, requirements, install, IPC, runtime files, limits
- AGENTS.md: the user's ground rules (branch + approval, never touch real
players' sound), architecture, measured performance rules, type-check
and test loop, desktop test driver and its pitfalls, open threads
- tools/: amane-remote.sh and fake_mpris.py, so the test loop doesn't
depend on the Hermes skill
- .gitignore: the Cargo files amane generates
- the pill, the card and the fade veils share one 150-degree gradient from
the cover's palette (most common, second, background), each darkened to
a fixed brightness so white text stays readable; veils span the whole
shape so their gradient lines up with the backdrop's
- measured on the desktop: card open 3.1 ms gpu (solid fill was ~3), pill
1.7 ms (was 1.0), open/close animation unchanged (1 and 0 slow frames)
- pill levels: lows left, highs right, no mirroring; every bar still grows
up and down from the middle line
- one linear timeline: the pill fades out, the empty shape grows, then the
card fades in on the settled shape (and backwards on close)
- fades use a surface-coloured veil instead of .opacity(), and the shape
has no clip, so neither costs a gpu layer
- measured on the desktop: open went from 11 frames over 20 ms to 1,
close from 4 to 0
- the spectrum capture runs whenever the shown player plays, and the pill
shows it as 7 mirrored, glowing bars (about 9% of one core while playing)