A modern, Linux-first YouTube Music player built with GTK4 and Libadwaita.
formerly known as Muse
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!
- 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
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.MuseNote
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.flatpakBoth x86_64 and aarch64 builds are available.
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) orytmusicapi browser - SMTC (media controls) works but may show "Unknown app" without the installer
- Font rendering differs from Linux
yay -S mixtapes-gitA Nix flake is available. See setup instructions.
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-uglyFedora:
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-uglyDebian/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.shTo update:
git pull
pip install -r requirements.txtBuild 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.pySMTC 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 directoryLogin 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 directoryBuild 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| 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 |
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.
- Run:
ytmusicapi browser - Follow instructions to log in via your browser and paste the headers. Use a private browser profile so you don't get logged out.
- 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 browserPaste the headers and press Ctrl-D.
Without a browser.json file, the app falls back to the unauthenticated API, which may cause playback issues.
✅️ = 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!
Contributions are welcome! Feel free to open issues for bug reports or feature requests, and submit pull requests.
The app icon was sketched by Jakub Steiner and rendered by gnoman.
This project is licensed under the GNU General Public License v3.0 or later.








