Skip to content

hnpf/Mixtapes

 
 

Repository files navigation

Mixtapes

A modern, Linux-first YouTube Music player built with GTK4 and Libadwaita.
formerly known as Muse

License: GPL v3 GitHub stars GitHub issues AUR Flatpak CI Windows Build Windows Download


Note

This software is in alpha. Expect bugs and missing features. It is 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 -- feel free to open an issue or a pull request!




Table of Contents

Features

  • YouTube Music Integration -- Connect with your account and access your full library
  • Library Access -- Playlists, liked songs, artists, albums, and uploads
  • Search & Discovery -- New releases, moods & moments, genres, trending, and charts
  • Full Playback Control -- Play/pause, seeking, queue management, shuffle, repeat modes
  • Downloads -- Download tracks for offline playback as local files
  • MPRIS Support -- Control playback from system media controls (Linux)
  • Windows SMTC -- System media transport controls integration (Windows)
  • Radio & Mixes -- Start a radio station from any song or artist
  • Background Playback -- Music keeps playing when the window is closed (system tray on Windows)
  • Playlist Editing -- Reorder, multi-select edit, change covers, visibility, and metadata
  • Caching -- Cached data for snappy performance
  • Responsive UI -- Adaptive layout built with Libadwaita

Installation

Flatpak (Recommended)

Add the automated repository and install:

flatpak remote-add --user --if-not-exists mixtapes https://m-obeid.github.io/Mixtapes/mixtapes.flatpakrepo
flatpak install --user mixtapes com.pocoguy.Muse

Note

If you previously installed under the old "Muse" repository name, remove the old remote first: flatpak remote-delete --user mixtapes

Offline bundle install

Download the latest artifact from GitHub Actions, then:

unzip Mixtapes-x86_64-flatpak.zip
flatpak install --user ./Mixtapes-x86_64.flatpak

Both x86_64 and aarch64 builds are available.

Windows (Experimental)

Download and run the installer: MixtapesSetup.exe

A portable (no-install) ZIP is also available from GitHub Actions.

Note

The Windows build is experimental. Known limitations:

  • No embedded WebKit login -- use the bundled Login Helper (MixtapesLogin.exe) or ytmusicapi browser
  • SMTC (media controls) works but may show "Unknown app" without the installer
  • Font rendering differs from Linux

AUR (Arch Linux)

yay -S mixtapes-git

Nix

A Nix flake is available. See setup instructions.

From Source

Install dependencies for your distro

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

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

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] On Debian/Ubuntu, consider using the Flatpak install to avoid outdated packages.

git clone https://github.com/m-obeid/Mixtapes.git
cd Mixtapes
python3 -m venv .venv --system-site-packages
source .venv/bin/activate
pip install -r requirements.txt
chmod +x start.sh
./start.sh

To update:

git pull
pip install -r requirements.txt
Build on Windows (from source)

Requires MSYS2 with the UCRT64 environment:

# In MSYS2 UCRT64 terminal:
pacman -S mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-libadwaita \
  mingw-w64-ucrt-x86_64-python mingw-w64-ucrt-x86_64-python-pip \
  mingw-w64-ucrt-x86_64-python-gobject mingw-w64-ucrt-x86_64-gstreamer \
  mingw-w64-ucrt-x86_64-gst-plugins-base mingw-w64-ucrt-x86_64-gst-plugins-good \
  mingw-w64-ucrt-x86_64-gst-plugins-bad mingw-w64-ucrt-x86_64-gst-plugins-ugly \
  mingw-w64-ucrt-x86_64-glib2 mingw-w64-ucrt-x86_64-nodejs \
  mingw-w64-ucrt-x86_64-ffmpeg mingw-w64-ucrt-x86_64-python-pillow git

git clone https://github.com/m-obeid/Mixtapes.git && cd Mixtapes
pip install --break-system-packages -r requirements-windows.txt
pip install --break-system-packages pystray

# Compile GResources and run:
glib-compile-resources --sourcedir=. src/muse.gresource.xml --target=src/muse.gresource
python src/main.py

SMTC bridge (optional, for Windows media controls):

# In a regular PowerShell/CMD (not MSYS2), with Rust installed:
cd windows/bridge
cargo build --release
# Copy target/release/MixtapesBridge.exe to windows/ in the app directory

Login helper (optional, for browser-based login):

# In a regular PowerShell/CMD with Python 3.12:
pip install pywebview pyinstaller
pyinstaller --onefile --noconsole --name MixtapesLogin windows/login_helper.py
# Copy dist/MixtapesLogin.exe to windows/ in the app directory
Build with flatpak-builder
flatpak install flathub org.gnome.Platform//49 org.gnome.Sdk//49 org.freedesktop.Sdk.Extension.node24//24.08
git clone https://github.com/m-obeid/Mixtapes.git && cd Mixtapes
flatpak-builder --user --install --force-clean build-dir com.pocoguy.Muse.yaml
flatpak run com.pocoguy.Muse

Prerequisites

Dependency Purpose Windows
Python 3.10+ Core runtime via MSYS2
Node.js Required for yt-dlp-ejs (fixes playback issues) via MSYS2
GTK4 + dev headers UI toolkit via MSYS2
Libadwaita + dev headers GNOME UI components via MSYS2
WebKitGTK 6.0 + dev headers Embedded browser for auth N/A (uses Login Helper)
GStreamer plugins (base, good, bad, ugly) Audio playback via MSYS2
ffmpeg Audio muxing for downloads via MSYS2

Authentication

Tip

Linux: You can authenticate directly in the app using the built-in WebKit browser -- no manual setup needed! Windows: Use the bundled Login Helper (Start Menu > Mixtapes > Login Helper) to sign in via Edge WebView2.

Manual authentication (legacy)

This app uses ytmusicapi for backend data. Authentication gives access to your library and higher quality streams.

  1. Run: ytmusicapi browser
  2. Follow instructions to log in via your browser and paste the headers. Use a private browser profile so you don't get logged out.
  3. The output will be saved as browser.json.

Flatpak users: Open YouTube Music in your browser, copy request headers as described in the ytmusicapi docs, then:

flatpak run --command=sh com.pocoguy.Muse
mkdir -p ~/data/Muse && cd ~/data/Muse && ytmusicapi browser

Paste the headers and press Ctrl-D.

Without a browser.json file, the app falls back to the unauthenticated API, which may cause playback issues.

Roadmap

✅️ = implemented · ☑️ = partially implemented · 🔜 = planned · ❎️ = unlikely

Status Feature Details
✅️ Authentication Connect to YouTube Music (Browser cookies)
✅️ Library ✅️ Playlists
✅️ Liked songs
✅️ Artists
✅️ Albums
✅️ Uploads
✅️ Search Search for songs, albums, and artists
☑️ Exploration ✅️ New Releases
✅️ Moods & Moments
✅️ Genres
✅️ Trending
✅️ Charts
🔜 Home Page
✅️ Artist Page ✅️ Basic info
✅️ Related artists
✅️ Top tracks
✅️ Albums
✅️ Singles/EPs
✅️ Videos
✅️ Play
✅️ Shuffle
✅️ Subscribe/Unsubscribe
✅️ Playlist Page ✅️ Info
✅️ Tracks
✅️ Play
✅️ Shuffle
✅️ Order
✅️ Multi-Selection Editing
✅️ Cover Change
✅️ Change Visibility
✅️ Change Description
✅️ Change Name
✅️ Album Page ✅️ Basic info
✅️ Tracks
✅️ Play
✅️ Shuffle
✅️ Player ✅️ Play/Pause
✅️ Seeking
✅️ Volume
✅️ Queue (Previous/Next, Reorder, Shuffle, Repeat modes)
✅️ History ✅️ View history
✅️ Share history with Google account
✅️ Delete songs from history
✅️ Caching Cache data to reduce latency
☑️ Responsive Design Mobile-friendly layout with adaptive UI
✅️ MPRIS Support Control playback from system media controls
✅️ Download Support Download tracks for offline playback, even as local files
✅️ Radio / Mixes Start a radio station from a song, album, playlist, or artist
✅️ Dedicated Data Directory Cookies, cache, etc. in a dedicated directory
✅️ Background Playback Music keeps playing when the window is closed
✅️ AUR Available as mixtapes-git
☑️ Flatpak ✅️ Flatpak build
🔜 Flathub release
✅️ App icon
☑️ Settings Configure app preferences (theme, audio quality, etc.). Not much to configure yet.
🔜 Cover Art Tint Tint Libadwaita to match cover art, kinda like Material You
✅️ Discord RPC Show your current track on Discord
✅️ Linux
✅️ Windows
🔜 Lyrics Synchronized lyrics, maybe using BetterLyrics API
✅️ Windows ✅️ GTK4/Libadwaita via MSYS2
✅️ GStreamer playback
✅️ SMTC media controls
✅️ System tray
✅️ Installer
✅️ Login helper (Edge WebView2)
❎️ macOS Unlikely that I will get hands on a Mac anytime soon, so for now won't happen. Technically it's possible to build it for macOS, but I don't have a Mac to test it on.
🔜 GNOME Circle Still considering it, might not happen

Have an idea or found a bug? Open an issue!

Contributing

Contributions are welcome! Feel free to open issues for bug reports or feature requests, and submit pull requests.

Star History

Star History Chart

Contributors

The app icon was sketched by Jakub Steiner and rendered by gnoman.

License

This project is licensed under the GNU General Public License v3.0 or later.

About

A modern, Linux-first YouTube Music player.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 97.5%
  • Rust 1.4%
  • CSS 0.5%
  • Inno Setup 0.3%
  • Shell 0.2%
  • Nix 0.1%