MCPcopy Index your code
hub / github.com/Mastermindzh/tidal-hifi

github.com/Mastermindzh/tidal-hifi @7.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 7.0.1 ↗ · + Follow
379 symbols 930 edges 68 files 61 documented · 16%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

TIDAL Hi-Fi (Max quality)

GitHub release github builds Build Status Discord logo

The web version of TIDAL running in electron with Hi-Fi (High & Max) support thanks to widevine.

TIDAL Hi-Fi preview

Table of Contents

Features

  • HiFi playback (High & Max settings) — see the Audio Quality & PipeWire Setup guide for 192kHz / bit-perfect output
  • Notifications
  • Custom theming
  • Custom hotkeys (source)
  • Better icons thanks to Papirus-icon-theme
  • Settings feature to disable certain functionality. (ctrl+= or ctrl+0)
  • Multiple controller types for different interaction methods with Tidal
  • API for status, playback and settings (see the /docs route)
  • Disabled audio & visual ads, unlocked lyrics, suggested track, track info, and unlimited skips thanks to uBlockOrigin custom filters (source)
  • AlbumArt in integrations (best-effort)
  • Custom integrations
  • ListenBrainz integration
  • Discord RPC integration (showing "now listening", "Browsing", etc)
    • Flatpak version only works if both Discord and Tidal-HiFi are flatpaks
  • MPRIS integration
  • UI + Json config (~/.config/tidal-hifi/, or ~/.var/app/com.mastermindzh.tidal-hifi/ for Flatpak)

Contributions

To contribute you can use the standard GitHub features (issues, prs, etc.) or join the discord server to talk with like-minded individuals.

Why did I create TIDAL Hi-Fi?

I moved from Spotify over to Tidal and found Linux support to be lacking. When I started this project there weren't any Linux apps that offered Tidal's "hifi" options nor any scripts to control it. I made this app to support the highest quality audio available on the Linux platform. It used to be "hifi" but now is "High & Max".

Why not extend existing projects?

Whilst there are a handful of projects attempting to run Tidal on Electron they are all unappealing to me because of various reasons:

  • Lack of maintainers/developers. (no hotfixes, no issues being handled etc)
  • Most are simple web wrappers, not my cup of tea.
  • Some are DE-oriented. I want this to work on WM's too.
  • None have Widevine working at the moment

Sometimes it's just easier to start over, cover my own needs and after that making it available to the public :)

Installation

Dependencies

Note that you need a notification library such as libnotify or dunst for the software to work properly.

Using releases

Various packaged versions of the software are available on the releases tab.

Snap

To install with snap you need to download the pre-packaged snap-package from this repository, found under releases:

  1. Download

sh wget <URI> #for instance: https://github.com/Mastermindzh/tidal-hifi/releases/download/1.0/tidal-hifi_1.0.0_amd64.snap

  1. Install

sh snap install --dangerous <path> #for instance: tidal-hifi_1.0.0_amd64.snap

Arch Linux

Arch Linux users can use the AUR to install TIDAL Hi-Fi:

trizen tidal-hifi-git

Flatpak

To install via Flatpak run the following command:

flatpak install flathub com.mastermindzh.tidal-hifi

Nix

To install with Nix run the following command:

nix-env -iA nixpkgs.tidal-hifi

Solus

To install on Solus run:

sudo eopkg it tidal-hifi

Using source

To install and work with the code on this project follow these steps:

  • git clone https://github.com/Mastermindzh/tidal-hifi.git
  • cd tidal-hifi
  • npm install
  • npm run watch to watch for auto-reload of Typescript/SCSS changes.
  • npm run compile can be used to trigger it once
  • npm watchStart to auto watch for any updates files and reload Tidal Hi-Fi
  • npm start can be used to run Tidal Hi-Fi manually once

Integrations

TIDAL Hi-Fi comes with several integrations out of the box. You can find these in the settings menu (ctrl + = by default) under the "integrations" tab.

integrations menu, showing a list of integrations

Custom Scrobbling with Multi-Scrobbler

For advanced scrobbling setups, you can use multi-scrobbler to proxy scrobbles to multiple services simultaneously. This allows you to scrobble to ListenBrainz, Last.fm, Maloja, and other services from a single configuration.

📖 Read the complete setup guide →

Integrations with other projects that are not included natively:

  • i3 blocks config - My dotfiles where I use this app to fetch currently playing music (direct commit)
  • neptune third party plugins & theming

Known bugs

Please check the Known issues file.

Special thanks to

  • Castlabs For maintaining Electron with Widevine CDM installation, Verified Media Path (VMP), and persistent licenses (StorageID)

Donations

You can find my Github sponsorship page at: https://github.com/sponsors/Mastermindzh

Images

Settings window

settings window

User setups

Some of our users are kind enough to share their usage pictures. If you want to see them or possibly even add one please do so in the following issue: #3 - image thread.

Extension points exported contracts — how you extend this code

TidalController (Interface)
(no doc) [5 implementers]
src/TidalControllers/TidalController.ts
HotkeyAction (Interface)
(no doc)
src/features/hotkeys/hotkeyConfig.ts
AudioQuality (Interface)
(no doc)
src/models/audioQuality.ts
MediaSessionControllerOptions (Interface)
(no doc)
src/TidalControllers/MediaSessionController/MediaSessionController.ts
HotkeyConfig (Interface)
(no doc)
src/features/hotkeys/hotkeyConfig.ts
MediaPlayerInfo (Interface)
(no doc)
src/models/mediaPlayerInfo.ts
SeekEvent (Interface)
(no doc)
src/models/seekEvent.ts
MediaInfo (Interface)
(no doc)
src/models/mediaInfo.ts

Core symbols most depended-on inside this repo

log
called by 74
src/features/logger.ts
get
called by 46
src/pages/settings/preload.ts
addInputListener
called by 37
src/pages/settings/preload.ts
alert
called by 28
src/features/logger.ts
addHotkey
called by 24
src/scripts/hotkeys.ts
clickElement
called by 20
src/TidalControllers/DomController/domHelpers.ts
useSelector
called by 15
src/TidalControllers/ReduxController/ReduxController.ts
getElement
called by 13
src/TidalControllers/DomController/domHelpers.ts

Shape

Method 194
Function 156
Class 20
Interface 8
Enum 1

Languages

TypeScript100%

Modules by API surface

src/TidalControllers/ReduxController/ReduxController.ts38 symbols
src/TidalControllers/MediaSessionController/MediaSessionController.ts36 symbols
src/TidalControllers/DomController/DomTidalController.ts34 symbols
src/TidalControllers/apiController/TidalApiController.ts32 symbols
src/TidalControllers/TidalController.ts30 symbols
src/features/mpris/mprisService.ts26 symbols
src/pages/settings/hotkeys.ts15 symbols
src/pages/settings/preload.ts12 symbols
src/scripts/settings.ts10 symbols
src/scripts/discord.ts10 symbols
src/preload.ts10 symbols
src/main.ts9 symbols

For agents

$ claude mcp add tidal-hifi \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page