A modern, Linux-first YouTube Music player.
formerly known as Muse
Note
This software is considered in alpha stage. Expect bugs and a lot of missing features. It is also not affiliated with, funded, authorized, endorsed, or in any way associated with YouTube, Google LLC or any of their affiliates and subsidiaries. Help is always appreciated, so feel free to open an issue or a pull request.
This is a list of all the features that are planned for Mixtapes:
✅️ means the feature is implemented.
☑️ means the feature is partially implemented.
🔜 means the feature is not implemented yet, but planned.
❎️ means the feature will likely not be implemented.
- ✅️ Authentication: Connect to YouTube Music (Browser cookies).
- ☑️ Library: Access your playlists and liked songs.
- ✅️ Playlists
- ✅️ Liked songs
- ✅️ Artists
- 🔜 Albums
- 🔜 Uploads
- ✅️ Search: Search for songs, albums, and artists.
- ☑️ Exploration: Ways to discover new music.
- ✅️ New Releases
- ✅️ Moods & Moments
- ✅️ Genres
- ✅️ Trending
- 🔜 Charts
- 🔜 Home Page
- ☑️ Artist Page: View artist details and discography.
- ✅️ Basic artist info.
- 🔜 Artist related artists.
- ✅️ Artist top tracks.
- ✅️ Artist albums.
- ✅️ Artist singles/EPs.
- ☑️ Artist videos.
Only the first 10 videos are shown, "Show more" in fact doesn't show any more videos yet.
- ✅️ Artist Play button
- ✅️ Artist Shuffle button
- ✅️ Artist Subscribe/Unsubscribe button
- ☑️ Playlist Page: View and play playlists.
- ✅️ Basic playlist info.
- ✅️ Playlist tracks.
- ✅️ Playlist Play button
- ✅️ Playlist Shuffle button
- ✅️ Playlist Order
- ☑️ Playlist Reorder
- ✅️ Playlist Cover Change
- ✅️ Playlist Change Visibility
- ✅️ Playlist Change Description
- ✅️ Playlist Change Name
- ✅️ Album Page: View and play albums.
- ✅️ Basic album info.
- ✅️ Album tracks.
- ✅️ Album Play button
- ✅️ Album Shuffle button
- ✅️ Player: Full playback control with queue management.
- ✅️ Play/Pause
- ✅️ Seeking
- ✅️ Queue
- ✅️ Previous/Next
- ✅️ Change order of song
- ✅️ Shuffle
- ✅️ Repeat modes (single track, loop queue)
- ✅️ Volume control
- 🔜 Caching: Cache data to reduce latency and bandwidth usage
- ☑️ Responsive Design: Mobile-friendly layout with adaptive UI.
Desktop needs to use the empty space better.
- ✅️ MPRIS Support: Control playback from system media controls.
- 🔜 Cover Art Tint: Tint libadwaita to match the cover art of the current song, kinda like Material You.
- 🔜 Discord RPC: Show your current track on Discord.
- 🔜 Lyrics: View synchronized lyrics, maybe even using BetterLyrics API.
- ☑️ Settings: Configure app preferences (theme, audio quality, etc.).
There isn't much to configure yet.
- 🔜 Download Support: Download tracks for offline playback, even as local files.
- 🔜 Radio / Mixes: Start a radio station from a song or artist.
- 🔜 Windows/macOS: Builds for macOS and Windows
Requires quite a bit of tinkering, not my highest priority
- ✅️ Dedicated Data Directory: Move all the data like cookies, cache, etc. to a dedicated directory instead of the project root directory.
- 🔜 Background Playback: Play music in the background, even when the main window is closed.
- ☑️ Flatpak: Package Mixtapes as a Flatpak.
- ✅️ Flatpak build
- ☑️ Flathub release
Depends on App icon.
- 🔜 App icon
- 🔜 GNOME Circle: Maybe get Mixtapes on GNOME Circle?
Still considering it, might not happen.
- ✅️ AUR: Package Mixtapes as an AUR package.
If you got any more ideas or bug reports, feel free to open an issue.
- Python 3.10 or higher
- Node.js (needed for yt-dlp-ejs, helps with playback issues)
- GTK4 (including development headers)
- Libadwaita (including development headers)
- WebKitGTK 6.0 (including development headers)
- GStreamer plugins (base, good, bad, ugly)
Currently, there are 4 options for installing Mixtapes:
- AUR
- From Source
- Using a Nix flake
- GitHub Actions (Flatpak)
- Using flatpak-builder
If you are using Arch Linux, you can install Mixtapes from the AUR.
An AUR helper like yay or paru is recommended.
yay -S mixtapes-gitBefore you start, make sure to install the dependencies.
Here are install commands for some common package managers:
-
Arch Linux:
sudo pacman -S git python-pip nodejs gtk4 libadwaita webkitgtk-6.0 gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly -
Debian/Ubuntu:
sudo apt install git python3 python3-pip nodejs libgtk-4-dev libadwaita-1-dev libwebkitgtk-6.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
Note
If you are on Debian/Ubuntu, you should probably use Flatpak to avoid outdated packages.
- Fedora:
sudo dnf install git python3 python3-pip nodejs gtk4-devel adwaita-gtk4-devel webkitgtk6.0-devel gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad gstreamer1-plugins-ugly
-
Clone the repository:
git clone https://github.com/m-obeid/Mixtapes.git cd Mixtapes -
Install Python dependencies within a virtual environment:
python3 -m venv .venv --system-site-packages source .venv/bin/activate pip install -r requirements.txt chmod +x start.sh -
Run the app:
./start.sh
To pull the latest changes:
git pull
pip install -r requirements.txtA Nix flake is available for NixOS or Nix Package Manager users. See here
Automated builds for Flatpak are available for every change made to the repository. These support both x86_64 (amd64) and aarch64 architectures.
- Go to the Actions tab on GitHub.
- Select the latest successful build for "Build Flatpak".
- Scroll down to the Artifacts section and download the file for your architecture.
For Flatpak:
You can quickly add the automated repository to receive updates by running:
flatpak remote-add --user --if-not-exists mixtapes https://m-obeid.github.io/Mixtapes/mixtapes.flatpakrepo
flatpak install --user mixtapes com.pocoguy.MuseNote
Recently, the repository name was changed from "Muse" to "Mixtapes".
If you are updating from an older version, you might need to remove the old repository first:
flatpak remote-delete --user mixtapes
(Alternatively, you can download the offline bundle file:)
unzip Mixtapes-x86_64-flatpak.zip
flatpak install --user ./Mixtapes-x86_64.flatpak-
Install Flatpak and required runtimes:
flatpak install flathub org.gnome.Platform//49 org.gnome.Sdk//49 org.freedesktop.Sdk.Extension.node24//24.08
-
Clone the repository:
git clone https://github.com/m-obeid/Mixtapes.git cd Mixtapes -
Build and install:
flatpak-builder --user --install --force-clean build-dir com.pocoguy.Muse.yaml
-
Run:
flatpak run com.pocoguy.Muse
Note
You can now authenticate using the app itself through an embedded WebKit browser! Below are the old, manual instructions.
This app uses ytmusicapi for backend data. Authentication allows access to your library and higher quality streams.
To authenticate, you need to generate a browser.json file.
- Run:
ytmusicapi browser - Follow instructions to log in via your browser and paste the headers. It is recommended to use a private browser profile for this, so that you don't get logged out of the account from the app.
- The output will be saved as
browser.jsonin the project root directory.
Flatpak: Open your browser, go to YouTube Music, and copy request headers as described here.
Then run flatpak run --command=sh com.pocoguy.Muse and inside the shell run mkdir -p ~/data/Muse && cd ~/data/Muse && ytmusicapi browser.
Paste the headers and press Ctrl-D.
If you don't have a browser.json file, the app will use the unauthenticated API, which can cause playback issues.
The OAuth flow is currently borked in ytmusicapi, don't use it. I removed it from the app, but there might be some leftover code.
GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE for details.







