Ticli
An unofficial terminal music player for TIDAL. Search, browse, queue, and play music — all from your terminal. Not affiliated with TIDAL.
Ticli connects directly to TIDAL's API using your premium account. No desktop app needed. Just authenticate, search, and play.
Works on macOS and Linux.
╭──────────────────────── Ticli ────────────────────────╮
│ │
│ ▶ ♥ Arlo Parks - Sophie │
│ Super Sad Generation │
│ 1:47 ━━━━━━━━●━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3:28 │
│ Queue: 3/12 16/44.1 FLAC │
│ Next: Cola • Arlo Parks │
│ │
│ [space] play/pause [n/→] next [←] prev │
│ [s] search [q] queue [p] playlists │
│ [l] like [r] radio [t] mini [m] more │
│ │
╰────────────────────────────────────────────────────────╯
Features
- Search — Find tracks, albums, artists, and playlists
- Browse — Navigate album and playlist tracklists
- Queue — Manage your playback queue, reorder, remove tracks
- Playlists — Browse and play your saved playlists
- Likes — Toggle favorites on any track
- Radio — Generate a station from any track
- Mini mode — Condensed single-line display
- Session restore — Picks up where you left off
- Lossless & Hi-Res — Stream up to 24-bit/192kHz FLAC
- Downloads — Keep tracks in your own music folder, tagged
- Secure auth — OAuth tokens stored in your OS keychain
Install
Requires Python 3.10+ and mpv.
# macOS
brew install mpv
pip install tidal-cli
# Ubuntu / Debian
sudo apt install mpv python3-pip
pip install tidal-cli
For secure token storage in your OS keychain (recommended):
pip install "tidal-cli[keyring]"
Usage
ticli
On first run you'll get a URL to authorize with your TIDAL account. After that, your session is cached and you go straight to the player.
Quality
ticli --quality MAX # FLAC, up to 24-bit/192 kHz
ticli --quality HIGH # FLAC, 16-bit/44.1 kHz — the default
ticli --quality MEDIUM # AAC 320 kbps
ticli --quality LOW # AAC 96 kbps
The names follow TIDAL's own app. FLAC (HIGH and MAX) requires the PKCE
sign-in: ticli --login-flow pkce, or press u on the settings page later.
The old spellings LOSSLESS and HIRES still work as aliases.
Keybindings
Player
| Key | Action |
|---|---|
space |
Play / pause |
n → |
Next track |
← |
Previous track |
s |
Search |
q |
Queue |
p |
Playlists |
l |
Like / unlike track |
r |
Start radio from track |
t |
Toggle mini player |
m |
Show more controls |
esc |
Quit |
Search
| Key | Action |
|---|---|
↑ ↓ |
Navigate results |
enter → |
Play track / open album or artist |
backspace |
Delete character |
esc ← |
Back |
Queue
| Key | Action |
|---|---|
↑ ↓ |
Navigate |
enter |
Jump to track |
x |
Remove track |
esc ← |
Back |
How it works
Ticli uses tidalapi to authenticate and fetch audio stream URLs. Audio is played through mpv. The TUI is built with Rich.
┌─────────┐ OAuth ┌───────────┐ stream URL ┌───────────┐
│ Ticli │ ──────────────► │ TIDAL │ ──────────────► │ mpv │
│ (TUI) │ ◄────────────── │ API │ │ │
└─────────┘ metadata └───────────┘ └───────────┘
Requirements
- macOS or Linux
- Python 3.10+
- TIDAL Premium subscription
- mpv
Credits
Created and maintained by odonald.
Contributors:
- Garrett Simko — lossless/hi-res playback (PKCE login, segmented DASH streams), album artwork, metadata and audio caching, scrubbing, scoped search, the artist page, and macOS media keys.
Support
If you enjoy Ticli, consider buying me a coffee.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tidal_cli-1.0.3.tar.gz.
File metadata
- Download URL: tidal_cli-1.0.3.tar.gz
- Upload date:
- Size: 359.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ac0ce07339e265b8220d27871f2eb3b2aaec58e02a7523251f05006a813a33b
|
|
| MD5 |
e69e86f064b84c6a93865a4cb6bfc544
|
|
| BLAKE2b-256 |
7e1340bc3e37936d34fa218ea7cb7668c3601160148052b65a24b527542592ce
|
Provenance
The following attestation bundles were made for tidal_cli-1.0.3.tar.gz:
Publisher:
publish.yml on odonald/ticli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tidal_cli-1.0.3.tar.gz -
Subject digest:
7ac0ce07339e265b8220d27871f2eb3b2aaec58e02a7523251f05006a813a33b - Sigstore transparency entry: 2634410038
- Sigstore integration time:
-
Permalink:
odonald/ticli@a0d38c9df8d12724d7ffce754743ebcc7d06c8a5 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/odonald
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a0d38c9df8d12724d7ffce754743ebcc7d06c8a5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file tidal_cli-1.0.3-py3-none-any.whl.
File metadata
- Download URL: tidal_cli-1.0.3-py3-none-any.whl
- Upload date:
- Size: 381.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
708d46c811a0c83d076c207a2510c52167f15420b57acc94012072809e2035c5
|
|
| MD5 |
af23e414faf54b368787c5702dd67860
|
|
| BLAKE2b-256 |
3d60f7c4155b1726e654d522f4b030ea468a63395ea1510b1abb6b58651f789a
|
Provenance
The following attestation bundles were made for tidal_cli-1.0.3-py3-none-any.whl:
Publisher:
publish.yml on odonald/ticli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tidal_cli-1.0.3-py3-none-any.whl -
Subject digest:
708d46c811a0c83d076c207a2510c52167f15420b57acc94012072809e2035c5 - Sigstore transparency entry: 2634410041
- Sigstore integration time:
-
Permalink:
odonald/ticli@a0d38c9df8d12724d7ffce754743ebcc7d06c8a5 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/odonald
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a0d38c9df8d12724d7ffce754743ebcc7d06c8a5 -
Trigger Event:
release
-
Statement type: