Releases: wh01s17/tidalamp
Release list
v0.6.0: docs(readme): captura del modo split con el fondo de la cola
Themed looks, a two-column arrangement and a picture behind the queue.
Added
- Nine themed looks, each a layout with a palette of the same name:
unidad-morada,pirata,cuaderno,neon-noir,runas,reggae,
comodin,goticoanddeath-metal. Choosing one sets its palette once;
after that the palette is yours, and each of the nine palettes works under
any layout. - A picture behind the queue. Each themed look brings one, drawn the way a
cover is drawn (four pixels to a cell) under a dark veil so the rows still
read, stacked or split. While nothing plays, a line of its own stands in for
the title. Needs Pillow, like the cover. - Queue backdrop setting (
backdrop): the theme's picture (auto), none,
or any themed look's, so pictures, themes and palettes mix freely. arrangement = "split": the queue in a column to the right of the player,
the playing track's lyrics above the cover (following the sung line when they
are timed) and the transport across both columns. Switchable live from the
settings window without interrupting playback. Needs 160×26 and falls back to
stacked on its own where it does not fit.- Search in the help window:
/narrows the tab you are on as you type.
Changed
- The cover has air around it instead of sitting flush against the frame.
- Lines that do not fit (artist, album,
SRC,OUT, the title) glide back an
forth instead of being cut off. - Lyrics without timestamps move through the track in the split pane, so the
end of the words is on screen by the end of the song. - The seek bar is a line with a dot riding on it.
- Internal: screens, widgets, stylesheet and app tests split into smaller
files. Code moved, nothing changed.
Fixed
- Moving through the queue redraws two rows, not the whole list. With a
themed picture on a 4K terminal, a keypress went from about 245 KiB sent to
the terminal to under 5. - A kitty or sixel cover could end up painted over an open window when it
arrived while the window was open. It now waits for the window to close. - Leaving split could leave a kitty cover drawn where the player's column used
to be. - Going from split back to stacked left the queue's key hints halfway across
the row.
Full details in [CHANGELOG.md](https://github.com/wh01s17/tidalamp/blob/main/C
tidalamp 0.5.1
A patch release with two audio fixes and no interface changes.
Fixed
- The
OUTbadge reported the previous track's sample rate. It read the
sink a quarter second after handing the URL to mpv, but PipeWire only
switches the graph rate once mpv opens the device, which happens after the
stream has been fetched and decoded. The badge said 44.1 kHz while the DAC's
own screen read 96K. It now follows the sink until it settles, so what you
read on screen is what the hardware is actually doing.
Changed
- A hi-res track now streams with a real buffer in front of it.
--cache=autodecides from the playlist, and a hi-res track's playlist is a
local file, so mpv called the whole stream local and turned the cache off:
6 Mbit/s of FLAC was arriving behind a one-second readahead, with an input
rate exactly equal to the bitrate. The cache is now asked for explicitly.
Measured on a 176.4 kHz track: 1.02 s buffered before, 29.8 s after. This is
headroom against a slow network, not a fix for any reported dropout.
Note on dropouts
If playback stutters and the OUT rate sits below the source, check the USB
link before the software. A cable that negotiates full speed instead of high
speed caps many DACs at 16 bit / 96 kHz, and the kernel says so:
usb 1-4.3: not running at top speed; connect to a high speed hub
/proc/asound/card*/stream0 lists what the device is offering on the link it
actually got.
tidalamp 0.5.0
A queue and equalizer release: clearing the queue is no longer final, the equalizer comes
with presets, and a track can be added to a playlist you already have. Cover art in
blocks mode goes to twice the resolution.
Added
-
Undo a cleared queue, with
u.cstops andCclears, so a slipped shift wiped
a queue that may have taken half an hour to build — and since it can be saved to TIDAL
it is worth more than it was.ugives it back with the cursor where it was. It does
not start the music again: clearing stopped it, and undoing returns the list, not the
sound. One level, and it lives in memory: closing the app in between loses it. -
Eight equalizer presets, on
pandPinside its window: flat, rock, pop, jazz,
classical, vocal, bass and treble. They apply live, the way moving a band already did,
and the one you are on is named under the bars. Move a band afterwards and it stops
being called that: the name is worked out from the gains rather than stored, because a
stored one would go on saying "rock" until something reset it. -
Add a track to a playlist you already have, with
≡in the track menu. It only
offers the ones you created, because the ones you follow cannot be written to. It
sends in batches of 100, and if one fails what already went in stays and the message
says how many arrived. -
The space bar plays and pauses. It is what every other player uses and nothing in
the main window wanted it.xis still first, so the transport button keeps its
Winamp letter. -
mopens the track menu on the queue row, the same one the library opens with
↵. There it has to be asked for because↵queues the whole level; in the queue↵
already plays the row, so everything else that menu offers had no way in.
Changed
- Cover art in
blockshas twice the horizontal resolution. It was drawn with▀,
which spends a whole cell's width on a single pixel, and that is why covers looked
stretched. It now uses the quadrant glyphs, which carry four samples per cell. A cell
still holds two colours, so where its four pixels disagree they are split into a light
group and a dark one and each is averaged; the glyphs come from the same ancient range
as▀and█, so nothing new is asked of a font.
Fixed
-
Switching theme, or starting up in
nova, put the cover over the seek bar. The
display band's height is the cover plus whatever padding each layout carries, and it
was only recomputed when the cover itself changed size. Since a graphical protocol does
not clip to its widget but paints over what is below, that extra row landed on the bar.
It is now recomputed every time. -
The four layouts agree on their edges. The queue's heading row was measured with a
hand-written number in each one and all of them stopped before the right edge; in
quattroit was not measured at all. The help, About, lyrics and settings windows took
85% of the screen, which on a large terminal left two thirds empty with the text
against the left edge. And the cover no longer leaves a gap against the frame.
Install or upgrade
pipx install "tidalamp[art]" # new install
pipx upgrade tidalamp # upgradempv is a system package and is required; cava is optional and is what turns the
analyzer into a real FFT. Per-distribution commands are in the
README.
Full changelog:
CHANGELOG.md
· v0.4.0...v0.5.0
tidalamp 0.4.0
A release of details: the queue gains two keys and the bars answer to the mouse, the
Year column stops coming back empty, and the four layouts agree on their edges. Nothing
about playback changes.
Added
-
ggoes back to the track that is playing. With hundreds of tracks in the queue
you wander off to the end of the list and lose sight of it. If the queue's search is
what is hiding it,gclears the filter first and then lands on it. Rebindable as
to_playing. -
psaves the queue as a TIDAL playlist. It asks for a name and creates it with the
tracks in queue order, not in shuffle order: what is saved is the list, not the
listening session. It goes in batches of 100, and a playlist that fails halfway is
kept rather than deleted behind your back — the message says how many tracks made
it, because deleting what did arrive loses more work than it fixes. Rebindable as
save_playlist. -
The bars answer to a click. The seek bar jumps to the point clicked; volume and
balance take that value, and the exact centre of the balance gives zero. Dragging, no
— click only.
Fixed
-
The Year column was always empty. It was not those records missing a date in TIDAL:
the album nested inside a track in a listing carries an id, a title and a cover, and no
release date. Measured on a real queue: 100 entries, 15 albums, 0 years. It is now
asked for separately, once per album rather than once per track — those 100 tracks
cost 15 requests — in the background, and only when the column is on. A queue saved
before this version cannot be filled in, because it did not record which album each
track belonged to; it fixes itself on the next reload. -
TIDAL's 429 rate limits gave up on the first attempt.
tidalapiturns that HTTP
error into an exception of its own that does not inherit fromrequests.HTTPError, so
the one status the retry helper was written for was the one it never caught. It now
waits theRetry-Afterthe response carries, and if that is too long it says so
rather than leaving the interface looking frozen.
Changed
-
The track's identity moves under the clock. The marquee carried the number, the
artist, the title and the length on one line while five rows sat empty under the
clock. Now the top carries only the number and the title, and the artist, the album,
the year and the length take that column. -
The four layouts agree on their edges. The queue's heading row was measured with a
number written by hand in each one and each stopped short of the right edge by a
different amount; inquattroit was not measured at all. The document windows — help,
About, the lyrics, the settings — took 85% of the screen, which on a large terminal is
a box two thirds empty with its text against the left edge; each is now capped at what
its longest line actually needs. And inquattrothe wordmark is centred, because
left-aligned it landed directly on top of the cover.
Install or upgrade
pipx install "tidalamp[art]" # new install
pipx upgrade tidalamp # upgradempv is a system package and is required; cava is optional and is what turns the
analyzer into a real FFT. Per-distribution commands are in the
README.
Full changelog:
CHANGELOG.md
· v0.3.0...v0.4.0
tidalamp 0.3.0
The analyzer stops at nineteen bars no longer: it reaches the right edge of the window
and comes in four shapes. The queue gains a search, the help screen splits into two
tabs, and tidalamp --version answers from the terminal.
Added
-
Four shapes for the analyzer, chosen from the settings window (
o, under
Appearance), inconfig.toml(visualizer) or withTIDALAMP_VISUALIZER:bars, the classic upright bars with falling peaks.mirror, growing up and down from a centre line.curve, the contour of the spectrum as a line, one glyph per column.fine, that same line on the Braille dot grid: twice the horizontal resolution and
the dots between one sample and the next lit as well, so it is a stroke rather than
a row of loose marks. It needs a font with Braille; most have it, but one that does
not draws boxes, and a terminal cannot be asked beforehand.
All four are drawn where the analyzer has always been, beside the cover and under the
track details, and all four run to the right edge; the bars used to leave two thirds of
the column empty. Switching between them costs a redraw and does not restart cava's
FFT. -
Search the queue, with
ctrl+f. A bar under the list, the same gesture the
browser's/is: it does not cover the queue, it narrows it as you type, and it says
how many tracks are left of how many. It ignores case and accents and also matches on
the album. The rows keep the number they really have in the queue, so a match that
reads47tells you where it is in the playing order; and everything that acts on the
selected row acts on that track and not on the place it occupies on screen. Rebindable
asfilter_queue. -
tidalamp -v/tidalamp --version, which prints the version and exits. The
number lived only inside the interface, and whoever needs it usually needs it exactly
when the interface will not start: it answers before anything asks for a session,
mpv, or a terminal of a certain size.
Changed
-
The analyzer costs far less on large displays. The bars are capped at 64 bands and
widened to cover the width, rather than multiplying and thinning as the terminal grows,
and runs of one colour are sent to the terminal as a single escape sequence instead of
one per cell. At 380x50 — a 4K terminal — that takes the app from 55% of a core to
8% at ten frames a second. A normal terminal gains too. -
The help screen becomes two tabs. "Help" is the keys and
→goes to "About", with
the credits, the licence and the changes per version;←comes back. Each tab
remembers where it was left.
Install or upgrade
pipx install "tidalamp[art]" # new install
pipx upgrade tidalamp # upgradempv is a system package and is required; cava is optional and is what turns the
analyzer into a real FFT. Per-distribution commands are in the
README.
Full changelog:
CHANGELOG.md
· v0.2.0...v0.3.0
tidalamp 0.2.0
A browsing and windows release: filter the library without leaving it, and windows that
take the screen there is instead of a fixed box. Playback is unchanged.
Added
- A filter inside the browser, on
/. It opens a bar at the foot of the window, the
way a web browser's find does: it does not cover the level, it narrows it underneath
as you type, and it says how many rows are left of how many. It filters whatever the
level holds — tracks in your favourites, playlists inMy playlists, albums, artists,
or a category of search results — ignores case and accents (sinfoniafinds
Sinfonía), requires every word you type to appear somewhere, and also looks in the
track's album, which is not on the line unless you turned that column on.↵applies
the filter and gives the arrows back to the list;Escclears it and leaves the
browser on the row you had reached. Themore…row is never filtered out: a level is
one page deep until somebody asks for the rest, and hiding the only way to ask would
turn the filter into a lie about 766 favourites. - A
blackpalette: black ground and everything else in greys and whites. It is the
first monochrome one, so errors, warnings, playable tracks and container rows are told
apart by how much light they carry, which is the only axis left. - A
transparencysetting, off by default, in theoscreen, in the config file and
asTIDALAMP_TRANSPARENCY.
Changed
- The windows that open over the player take the screen there is. They were a fixed
84x26, so on a 4K display they sat like a stamp in the middle of an empty field. The
library, the lyrics and the help now take 85% of the terminal, capped at 160 columns —
past that a track line is mostly gap — and the dialogs grow with it within what their
content asks for. They still fit in the 60x18 minimum. - With
transparencyon, the player shows through the windows. A terminal cannot
blur, so what stands in for it is a translucent scrim with a frosted-glass frame. To
keep that from costing anything, the player stops redrawing itself while a window is
in front: measured at 240x62 with the library open, 37.7% of a core with it animating
against 0.5% with the background still, and the opaque modal it replaced cost 8.8%.
What is not cosmetic keeps running behind: end of track,mpv's health, MPRIS and the
status line. - Cover art changes protocol live, without a restart, and one that arrives while a
window is open no longer paints over it. Withtransparencyon, onlyblocksand
offare offered: kitty and sixel make the terminal paint the image over the text, so
they would cover the very window transparency exists to show. Turning it off brings
the five modes back. - The settings screen is grouped into Audio, Appearance and General. Ten settings in
one column read as ten unrelated switches, with the stream's quality next to the
colour of the borders. The list scrolls itself when the terminal is small. winamp.tcssbecomesstyles.tcss: it holds the whole layout and the four visual
styles, of whichretrois only one.
Fixed
- The browser's hint bar only half fitted. It was one 97-cell literal inside an
84-cell box, so the terminal cut it mid-word and left a strayRagainst the edge with
R reloadandEsc closelost. It now drops whole entries, least essential first,
until the line fits. - The status line is only rewritten when it changes. It was refreshed four times a
second whatever it said, and repainting costs the same either way.
Installation
Requires Python 3.11 or later and mpv installed on the system.
pipx install "tidalamp[art]"To upgrade from an earlier version, pipx upgrade tidalamp: the art extra is kept.
The AUR package is ready, but publishing it is still on hold while the service's public
registration for new accounts remains closed.
The full list of changes is in
CHANGELOG.md.
tidalamp 0.1.1
A documentation and first-contact release. Nothing about playback changes: what changes
is what someone installing tidalamp outside Arch sees.
Fixed
- The messages sent everyone to
pacman. Withmpvorcavamissing, the first
thing anyone installing tidalamp on Debian or Fedora saw was a command their system
does not have. The message now reads/etc/os-releaseand names the right one: apt,
dnf, zypper or pacman. Derivatives — Mint, Pop!_OS, Nobara — are resolved through
ID_LIKE, and a distribution that is not recognised gets no suggestion rather than a
wrong one. - The PyPI page showed no images at all. The README linked them with relative paths,
which PyPI resolves against its own domain and which come back as HTML. The banner and
the ten theme and palette screenshots now appear.
Changed
- The README documents the requirements per distribution —
mpvandcavaon apt, dnf,
zypper and pacman — and that the Python 3.11 floor rules out Ubuntu 22.04 and
Debian 11, wherepipxfails while resolving the version rather than at run time. - The README is rewritten for the person using the program: quick start and installation
first, and around a hundred lines gone that justified design decisions to a code
reviewer. - The project description stops defining itself by comparison with Winamp.
Installation
pipx install "tidalamp[art]"Requires Python 3.11 or later and mpv on the system. The full detail is in
CHANGELOG.md.
tidalamp 0.1.0
The first public release of tidalamp: a TIDAL client for the Linux terminal, with real
hi-res playback and a retro player interface.
Highlights
- Hi-res all the way to the DAC. It asks for
HI_RES_LOSSLESSby default and plays
FLAC up to 24 bit/192 kHz, with the stream's depth and rate on screen. The settings
window detects and fixes the case where PipeWire resamples a 24/96 stream down to
48 kHz while every indicator goes on telling the truth about the stream, and warns
when the output is a Bluetooth sink. - A complete TUI: seven-segment clock, scrolling title, 19-band analyzer, seek bar and
volume and balance sliders. - Playback through
mpvover an IPC socket, restarted automatically if the process
dies. No software attenuation and no filters: with the balance centred and the
equalizer flat, the signal is untouched. - Search, a paginated library, favourites and a queue that survives a restart.
- Synced lyrics, a ten-band equalizer, and cover art in kitty, sixel or half blocks.
- A real spectrum through cava, falling back to an RMS meter that says which of the two
you are looking at. - Full MPRIS2, TrackList included, so the desktop's media keys and its now-playing
panel work. - Four layouts and any palette, following an active Omarchy theme or one of the
built-ins. - A bilingual interface that follows the system locale.
Installation
Requires Python 3.11 or later and mpv installed on the system.
pipx install "tidalamp[art]"cava is optional and is what turns the analyzer into a real FFT. Per-distribution
commands are in the README.
The full list of changes is in
CHANGELOG.md.
