Skip to content

Releases: ScuttleSE/tuiplay

tuiplay 0.7.29

Choose a tag to compare

@ScuttleSE ScuttleSE released this 27 Sep 07:52

Fixed

  • A self-dismissing status or error message no longer leaves a stale row
    stuck near the top of the interface. A message that carried an embedded
    newline made the status bar span two rows, which shifted the frame; the
    status bar now collapses newlines and control characters so it always
    occupies exactly one row, and the interface forces a full repaint when a
    temporary status message expires.

tuiplay 0.7.28

Choose a tag to compare

@ScuttleSE ScuttleSE released this 24 Sep 15:29

Fixed

  • Stale bold rows no longer pile up at the top of the queue after several
    track changes. Bubble Tea's line diff could leave the previous playing
    row's bold styling on screen, so the interface now forces a full repaint
    whenever the playing track changes.

Changed

  • Updated the README for the current visualizer modes, Go requirement,
    configuration, key-binding limits, lyrics behavior, smart playlists,
    external control, and native audio support.
  • Synchronized config.example.toml and the generated first-run template with
    all current options and actions, and corrected their zero-value semantics.
  • Updated maintenance documentation to remove contradictory current-state
    guidance.

tuiplay 0.7.25

Choose a tag to compare

@ScuttleSE ScuttleSE released this 23 Sep 16:20

Fixed

  • GitHub release binaries now build in Debian 12 Bookworm containers. Debian
    Bullseye's live security repository returned missing package versions during
    the arm64 build, which made dependency installation fail before compilation.

Changed

  • Prebuilt Linux binaries now require glibc 2.36 or newer. They continue to
    require the ALSA runtime library (libasound2 or alsa-lib).

tuiplay 0.7.24

Choose a tag to compare

@ScuttleSE ScuttleSE released this 23 Sep 16:15

This release rolls up every change since the last published release (0.7.20):
the freetext lyrics search, the per-song lyric timing offset, and two
interface fixes.

Added

  • Freetext lyrics search. While the lyrics view is open, /
    (lyrics_search) opens a search prompt. The query runs against the local
    lrclib dump (title/artist prefix match, with extra words as filters) and
    against the lrclib.net search endpoint; the results merge and dedupe. Each
    hit carries its lyrics, so picking it needs no second lookup. Enter on a
    hit shows its lyrics; while a song plays they are saved to the lyrics cache
    under that song's key, so the automatic lookup finds them from then on.
    [..] or 4 returns to the playing song's lyrics.
  • lyrics_search key action (default /), rebindable in [keys].
  • Lyric timing offset. While the lyrics view shows synced lyrics, ,
    (lyrics_earlier) shifts the active-line timing 0.1 s earlier and .
    (lyrics_later) shifts it 0.1 s later, clamped to ±10 s. The offset
    shows in the lyrics page title (for example [+0.3s]) and persists per
    song in a .offset sidecar file in the lyrics cache directory, so it
    comes back with the song. A zero offset removes the file.
  • lyrics_earlier and lyrics_later key actions (defaults , and .),
    rebindable in [keys].

Fixed

  • Toggling the navigation panel (1/2) no longer leaves a stale queue row
    stuck at the top of the pane. The panel toggle changes the queue-pane
    width, and Bubble Tea's line diff could leave the previously highlighted
    row on screen; the interface now forces a full repaint when the panel
    visibility flips.
  • A track load no longer blocks the interface loop; playback starts without
    stalling the UI.
  • The first-run config template glued two [keys] comment lines together
    (crossfade_set and save_playlist).

tuiplay 0.7.20

Choose a tag to compare

@ScuttleSE ScuttleSE released this 24 Aug 14:49

Added

  • Album cover-art view. 6 (show_cover) shows the cover of the currently
    playing song in the right pane. It follows the playing song and prefetches
    the art in the background. The renderer has three modes, cycled with Space
    while the cover view is focused: half-block (full color), braille
    (high-resolution monochrome), and shaded blocks. It scales the image with a
    Catmull-Rom kernel and corrects for the terminal cell aspect so the art is
    not stretched.
  • A completely reworked fullscreen visualizer. Every mode now shares a vivid,
    reactive palette (vividHex): the spectral position sets the hue (bass warm,
    treble cool), loudness sets the brightness, a drifting phase breathes the
    scene, and a detected beat flashes the whole screen. The spectrum draws with
    half-block glyphs for double vertical resolution, so a small window still
    reads smooth. Two new modes replace the old ellipse and Lorenz modes: a
    radial bloom that radiates the spectrum from a pulsing center, and beat
    sparks that burst particles from the center on each beat (with an optional
    fading streak). The animation tick runs at about 30 fps.
  • A [visualizer] config table that tunes every visualizer mode. Shared:
    hue_speed, beat_sensitivity. Spectrum: spectrum_smoothing,
    spectrum_peak_gravity, spectrum_tilt, spectrum_monstercat. Waveform:
    wave_falloff. Stereo: stereo_smoothing. Radial bloom: radial_decay,
    radial_reach, radial_core. Beat sparks: spark_life, spark_speed,
    spark_gravity (a negative value gives straight streaks), spark_count,
    and spark_trail (comet streaks). Each key is optional and falls back to a
    built-in default.

Changed

  • The visualizer keeps its own vivid palette; the UI theme no longer changes
    it. The spectrum, waveform, radial bloom, and stereo spectrum now smooth
    their levels toward the previous frame, so bars glide and blooms fall off
    gradually instead of snapping. The spectrum peak caps fall under gravity.
  • Song info (i) and artist info (I) now push onto the browse stack from any
    right-pane view, not only from the browse view.

Fixed

  • The cover-art aspect ratio is corrected so the image is not stretched
    vertically.
  • A late queue restore that paused freshly started playback is dropped.