Skip to content

Releases: wh01s17/tidalamp

v0.6.0: docs(readme): captura del modo split con el fondo de la cola

Choose a tag to compare

@wh01s17 wh01s17 released this 11 Sep 17:07

Themed looks, a two-column arrangement and a picture behind the queue.

Split arrangement with the unidad-morada 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, gotico and death-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

Choose a tag to compare

@wh01s17 wh01s17 released this 11 Sep 01:09

A patch release with two audio fixes and no interface changes.

Fixed

  • The OUT badge 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=auto decides 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

Choose a tag to compare

@wh01s17 wh01s17 released this 11 Sep 00:01

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. c stops and C clears, 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. u gives 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 p and P inside 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. x is still first, so the transport button keeps its
    Winamp letter.

  • m opens 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 blocks has 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
    quattro it 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          # upgrade

mpv 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

Choose a tag to compare

@wh01s17 wh01s17 released this 10 Sep 21:32

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

  • g goes 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, g clears the filter first and then lands on it. Rebindable as
    to_playing.

  • p saves 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. tidalapi turns that HTTP
    error into an exception of its own that does not inherit from requests.HTTPError, so
    the one status the retry helper was written for was the one it never caught. It now
    waits the Retry-After the 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; in quattro it 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 in quattro the 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          # upgrade

mpv 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

Choose a tag to compare

@wh01s17 wh01s17 released this 10 Sep 17:45

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), in config.toml (visualizer) or with TIDALAMP_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
    reads 47 tells 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
    as filter_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          # upgrade

mpv 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

Choose a tag to compare

@wh01s17 wh01s17 released this 10 Sep 04:34

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 in My playlists, albums, artists,
    or a category of search results — ignores case and accents (sinfonia finds
    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; Esc clears it and leaves the
    browser on the row you had reached. The more… 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 black palette: 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 transparency setting, off by default, in the o screen, in the config file and
    as TIDALAMP_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 transparency on, 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. With transparency on, only blocks and
    off are 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.tcss becomes styles.tcss: it holds the whole layout and the four visual
    styles, of which retro is 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 stray R against the edge with
    R reload and Esc close lost. 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

Choose a tag to compare

@wh01s17 wh01s17 released this 09 Sep 19:23

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. With mpv or cava missing, 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-release and 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 — mpv and cava on apt, dnf,
    zypper and pacman — and that the Python 3.11 floor rules out Ubuntu 22.04 and
    Debian 11, where pipx fails 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

Choose a tag to compare

@wh01s17 wh01s17 released this 09 Sep 18:43

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_LOSSLESS by 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 mpv over 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.