Skip to main content

Tidal in your terminal!

Project description

ttydal screenshot

ttydal - Tidal in your termial!

Static Badge

Inspiration

This project is heavily inspired by what Maxteabag have done on is awesome project sqlit.

Features

  • Browse your favorite albums, playlists, and tracks
  • Fuzzy search across all loaded albums and tracks (/ key)
  • High-quality audio playback with three quality levels:
    • Max: Hi-Res Lossless (up to 24bit/192kHz)
    • High: Lossless (16bit/44.1kHz)
    • Low: AAC 320kbps
  • Real-time stream quality verification showing actual bit depth and sample rate
  • Auto-play next track
  • Shuffle mode for randomized playback
  • Visual indicators showing currently playing track and source album/playlist
  • Playback controls with seeking support
  • Smart tracks caching for faster navigation and search
  • Player bar displaying track info, artist, album, playback time, and quality metrics
  • Multiple theme options for interface customization
  • Fully keyboard-driven interface
  • new Configurable keybindings - customize all keyboard shortcuts (see KEYBINDINGS.md)
  • Settings auto-save on change
  • Cover art display in albums list, tracks list, and player bar
  • Image caching for cover art
  • Vibrant color mode - colorize player bar text with album's vibrant color
  • new Cache and config file are now stored in conventional directories for each platform

warning: this video contain audio of music, mind your volume

https://github.com/user-attachments/assets/ea975bea-b8f6-4d1a-a309-ec2d54390c3a

Requirements

  • Python 3.13 or higher
  • uv for development
  • Active Tidal subscription
  • MPV media player (for audio playback)

Installation

For users

# pipx (recommend)
pipx install ttydal

# uv
uv tool install ttydal

# pip
pip install ttydal

Then use it:

ttydal

For development

  1. Clone the repository:

    git clone https://github.com/results-may-vary-org/ttydal.git
    cd ttydal
    
  2. Install dependencies using uv:

    uv sync
    
  3. Run the application:

    uv run ttydal
    
  4. For development with auto-reload (optional):

    Install watchdog for automatic restart on file changes:

    uv add --dev watchdog
    

    Run with the development watcher:

    python dev.py
    

    This will automatically restart the application whenever you save changes to Python files.

Getting started

  1. Launch ttydal
  2. On first run, you'll see a login modal
  3. Press o to open the Tidal login URL in your browser
  4. Complete the authentication in your browser
  5. Press l to check login status
  6. Once logged in, your favorite albums, playlists, and tracks will load automatically

Keybindings

All keybindings are configurable. See KEYBINDINGS.md for the full reference and instructions on customizing them.

Configuration

All settings are accessible via the Config page (press c).

Settings

  • Theme: choose from 12 built-in themes
  • Audio Quality: select default quality for your playback (max, high, or low)
  • Auto-Play: enable or disable automatic playback of next track
  • Shuffle: enable or disable shuffle mode
  • Debug Logging: enable or disable debug logging (debug.log in config directory)
  • API Logging: these logs can contains sensitive data enable or disable API request/response logging (debug-api.log in config directory)

All settings are automatically saved when changed.

Data directories

ttydal follows platform conventions for config and cache directories:

Type Linux MacOS Windows
Config & logs ~/.config/ttydal ~/Library/Application Support/ttydal %APPDATA%/ttydal
Image cache ~/.cache/ttydal/images ~/Library/Caches/ttydal/images %LOCALAPPDATA%/ttydal/images

Images cache

Loaded images are cached in the platform cache directory (see above).

Tracks cache

ttydal uses a caching system for tracks to improve performance and enable smart search.

How it works

  • In-memory cache: tracks are cached in memory (lost on app restart)
  • TTL of 1 hour: each cached album/playlist expires after 1 hour
  • Max 50,000 tracks: cache is limited by total track count, not album count.
  • LRU eviction: when cache is full, oldest entries are evicted first
  • Auto-preload: on startup, all albums are automatically preloaded into cache in the background (mostly for the search feature)

Cache info modal

Press i to open the cache info modal and see current cache statistics.

Cache invalidation

If you make changes to your playlists/favorites on the Tidal website:

  • Press r on Albums list that clears the entire tracks cache and reloads albums
  • Press r on Tracks list that invalidates only the current album/playlist cache and reloads

Code of conduct, license, authors, changelog, contributing

See the following file :

Want to participate? Have a bug or a request feature?

Do not hesitate to open a pr or an issue. I reply when I can.

This project is possible because another cool projects exist

Want to support my work?

Thanks !

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ttydal-1.4.0.tar.gz (51.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ttydal-1.4.0-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file ttydal-1.4.0.tar.gz.

File metadata

  • Download URL: ttydal-1.4.0.tar.gz
  • Upload date:
  • Size: 51.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ttydal-1.4.0.tar.gz
Algorithm Hash digest
SHA256 049f047fa9ffafba8f88c1cee2c353e60ad762c613a99d3c5fa490ed35e3a5c5
MD5 d36768aba5a470ab2c6f956f6f9f7a8d
BLAKE2b-256 0e9d89a8be67cb7efcd28c710cb3f9393600b88ba504d323c7f14048ecf717cd

See more details on using hashes here.

File details

Details for the file ttydal-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: ttydal-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 65.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ttydal-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2cef927fbc217429b5a085b0356cfab47324aa9e6ba2434f3e305e27582ef5b
MD5 576f62e743944b45261e91021133400d
BLAKE2b-256 9860c32f1619ea3f715ae7ef4190eed15addc24ba724b665011f04e315c4e111

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page