mixmusic

command module
v0.5.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 5, 2026 License: MIT Imports: 54 Imported by: 0

README

English · 简体中文 · Bahasa Indonesia

MixMusic

One player for YouTube Music and Spotify.

YouTube Music and Spotify client for macOS, Windows and Linux. YouTube Music works with no account. One search, one queue, mixed playlists, synced lyrics, themes and plugins.

CI Website Latest release Downloads Go Reference Go version Listed on Awesome MyGo macOS, Windows and Linux MIT or GPL-3.0

Website · Download · Docs · Changelog

Why MixMusic

If your music is split between YouTube Music and Spotify, you usually need two apps, with two searches, two queues and two libraries. MixMusic puts both services in one player:

  • One search. It looks through YouTube Music and Spotify at once, and marks each result with the service it comes from.
  • One queue and one library. A Spotify track can play right after a YouTube Music one, and a playlist can hold tracks from both.
  • No account needed. YouTube Music plays as soon as you open the app. Sign in only if you want your own library. Spotify is optional.
  • A small program. MixMusic is one Go program that draws its own windows on the GPU. There is no browser inside it to download or keep in memory.
  • Yours to change. Four layouts and fourteen themes come with it, the community adds more themes and plugins, and any command can have a key of your own.
  • Private. MixMusic has no account, server, analytics or telemetry of its own.
  • Free and open source, under the MIT license or the GPL 3.0.

Features

Search and play

  • One search for both services. Results from YouTube Music and Spotify side by side, each marked with its service. YouTube Music results show how many times each track was played, so the original stands out from covers.
  • One queue. Mix tracks of both services, shuffle and repeat across them, and let a radio carry on when the queue runs out.
  • Explore. New releases, trending songs, the charts, moods and genres, and related songs for what plays.
  • Synced lyrics that follow the song, or plain text if you prefer.
  • A mini player that stays on top of your other windows.

Your library

  • Mixes: playlists that hold tracks from every service. Import a service's playlist into a mix, and search and sort inside any of them.
  • Liked songs from both services in one list.
  • History and listening stats, day by day.
  • Your accounts. Sign in to YouTube Music on Google's own page for your home feed, liked songs, playlists, albums and artists, as your account or one of its brand channels. Sign in to Spotify for your library there. Likes, saved albums and playlists, and followed artists reach the service too. What you play joins your YouTube Music history, which its recommendations come from.

Spotify, three ways

  • In MixMusic itself, at Spotify's quality, with no Spotify app open (Premium, on Windows).
  • On Spotify Connect: your Spotify app, your phone or a speaker.
  • From YouTube Music: MixMusic plays the Spotify track's recording on YouTube Music, which needs no Premium to play.

Sound

  • Crossfade, even loudness and volume levelling.
  • A ten-band equalizer with presets.
  • A visualizer.
  • An offline cache of the tracks you played.

On your desktop

  • Media keys and the system's media controls on Windows, macOS and Linux.
  • Global shortcuts of your own to play, pause, skip, change the volume, mute, like or dislike what plays or show MixMusic, whichever window is in front.
  • The player's buttons on the taskbar thumbnail on Windows.
  • Tray controls, notifications of new tracks, and start at login.
  • mixmusic:// links.
  • Last.fm: every track you hear joins your profile, and scrobbles made offline are sent once you are back online.
  • Discord: your profile shows what plays, with its artwork and the time left.
  • Updates: MixMusic checks for a new release at start and every few hours, checks its signature, and installs it when you say so, or by itself if you choose.

Make it yours

  • Layouts. Blend, the default, has rounded shapes and springy motion on dense rows of big covers. Expressive, after Material 3 Expressive, is playful, with tonal fills, pill buttons and a floating player bar. Crate is restrained, so that the covers do the work, and Tiles is MixMusic's first look, with flat tiles and giant lowercase words.
  • Themes. Fourteen built in, each in any layout, with effects you can tune, one theme for light mode and one for dark mode, and an accent color of your own or taken from the artwork that plays. Material and Material Dark make every color of the cover's.
  • Community themes and plugins, one click away in the marketplace.
  • Plugins add pages, commands, track actions and widgets through a typed API, drawn in your theme.
  • Keyboard first. Shortcuts for everything common, a key of your own for any command, plugins' commands included, keys that control the music from any app, and a command palette (Ctrl K) for the rest.
  • A settings file. Your settings are settings.json in your data folder (%AppData%\MixMusic on Windows, ~/Library/Application Support/MixMusic on macOS, ~/.config/MixMusic on Linux), which you can keep with your dotfiles. Save it while MixMusic runs, and it applies at once; Settings › Desktop › Settings file opens it.

A look around

Listen. In the middle, now playing アイドル by YOASOBI: each line lights up as it's sung, with romaji and a translation under it. On the left, an album; on the right, a podcast you follow.

Make it yours. In the middle, the four layouts: Blend, the default, Expressive, Crate and Tiles, under the themes. On the left, a Material theme that takes its colours from the cover that plays. On the right, community themes in the marketplace.

Install

Download the file for your system from the latest release:

System Download
macOS 12 and later (Apple silicon and Intel) mixmusic-<version>-macos-universal.dmg
Windows 10 and 11 (x64, Arm), installer mixmusic-<version>-windows-<arch>-setup.exe
Windows, portable, no installation mixmusic-<version>-windows-<arch>-portable.zip
Debian, Ubuntu and derivatives mixmusic-<version>-linux-<arch>.deb
Fedora, openSUSE and derivatives mixmusic-<version>-linux-<arch>.rpm
Any Linux, one file mixmusic-<version>-linux-<arch>.AppImage
Any Linux, sandboxed (Flatpak, x64) mixmusic-<version>-linux-amd64.flatpak
Any Linux, in your home folder mixmusic-<version>-linux-<arch>.tar.gz, with install.sh

<arch> is amd64 for x64 and arm64 for Arm. Each release lists SHA256SUMS to check the downloads with. You don't need the files named update-…, ….delta, mixmusic-<version>-macos-… or -windows-<arch>.tar.gz: installed apps update from them.

The installers, the portable zip and the Linux archive update themselves. The .deb, the .rpm, the AppImage and the Flatpak can't replace their own files, so MixMusic tells you when a new version is out and downloads it for you. For the portable zip, unpack it anywhere and open MixMusic.exe. For the AppImage, make it executable (chmod +x) and open it. For the Flatpak, open it with your software center, or run flatpak install ./mixmusic-<version>-linux-amd64.flatpak; the first time, Flatpak fetches the GNOME runtime from Flathub.

Coming soon, once its tap is up: on a Mac, Homebrew installs MixMusic, and brew upgrade updates it.

brew install --cask fzn0x/tap/mixmusic

The first launch

  • macOS: the app isn't notarized by Apple yet, so the first time you open it, macOS says it can't check it. Open it anyway from System Settings › Privacy & Security › Open Anyway, or run this once in Terminal:

    xattr -dr com.apple.quarantine /Applications/MixMusic.app
    
  • Windows: the installer isn't signed yet, so SmartScreen may warn about it: choose More info, then Run anyway. Signing in to YouTube Music and playing Spotify in MixMusic need the WebView2 Runtime, which Windows 11 includes.

  • Linux: MixMusic needs GTK 3, and PulseAudio (PipeWire serves it too) or ALSA. Signing in to YouTube Music needs WebKitGTK 4.1, the tray icon needs libayatana-appindicator3, and keeping your sign-ins in the system's keyring needs libsecret. The .deb and the .rpm install them, and the Flatpak brings them with it; for the AppImage and the archive:

    # Debian and Ubuntu
    sudo apt install libgtk-3-0 libpulse0 libwebkit2gtk-4.1-0 libayatana-appindicator3-1 libsecret-1-0
    # Fedora
    sudo dnf install gtk3 pulseaudio-libs webkit2gtk4.1 libayatana-appindicator-gtk3 libsecret
    
  • Every system: MixMusic finds the audio of most YouTube Music tracks itself. For the rest, such as tracks made for children, it uses yt-dlp, which it installs for you from Settings › Playback and keeps up to date. yt-dlp needs a JavaScript runtime: Deno, Node.js, Bun or QuickJS. The Flatpak has Node.js.

The Flatpak

The Flatpak runs MixMusic in a sandbox, which sees the network, the sound server, the display and the GPU, and none of your home folder. MixMusic keeps its settings and library in ~/.var/app/io.github.fzn0x.mixmusic, apart from a .deb, .rpm, AppImage or archive copy, and both can run at once. To bring a copy's settings and library over, quit both, copy settings.json, library.json, queue.json and the addons folder from ~/.config/MixMusic into ~/.var/app/io.github.fzn0x.mixmusic/config/MixMusic, and sign in to your accounts again: sign-ins stay in the other copy's keyring.

In the Flatpak, start at login goes through your desktop, which may ask you first, and a yt-dlp of your own must be in ~/.var/app/io.github.fzn0x.mixmusic, as the sandbox sees no other folder. A Discord app that isn't a Flatpak shows what plays only if it was running when MixMusic started, until it restarts; Discord as a Flatpak works either way. The Flatpak is new: tell us in an issue how it runs on your desktop.

Accounts (all optional)

  • YouTube Music: choose Sign in to YouTube Music in Settings › Accounts and sign in to Google in the window that opens. What you type goes to Google only. MixMusic keeps the session encrypted, with a key in your system's keyring where there is one. Where that window can't open, or Google refuses it, import the session of a browser you signed in with (MixMusic reads it with its yt-dlp, and keeps YouTube's cookies alone), or paste the Cookie header of a signed-in music.youtube.com tab.
  • Spotify: Spotify lets an app serve up to five users, and only while its owner has Premium, so you sign in with a Spotify app of your own. It takes two minutes: docs/spotify.md walks you through it.
  • Last.fm: create an API account at last.fm/api/account/create (any name, no callback URL), paste its API key and shared secret in Settings › Accounts, and approve MixMusic in your browser.
  • Discord: while the Discord app runs, your profile shows what you listen to. Turn it off in Settings › Desktop.

Something not working? docs/troubleshooting.md covers the common problems and the known issues.

Build from source

You need Go 1.27.3 or later, Bun 1.2 or later, which runs MyGo's command line, and Git. MyGo needs no C compiler, so any system builds MixMusic for every system.

Windows

winget install GoLang.Go
winget install Oven-sh.Bun
winget install Git.Git

Open a new terminal, then:

git clone https://github.com/fzn0x/mixmusic
cd mixmusic
bun install
bun run dev

Signing in and Spotify playback need the WebView2 Runtime, which Windows 11 includes. On Windows 10, install it from Microsoft.

macOS

With Homebrew:

brew install go oven-sh/bun/bun
git clone https://github.com/fzn0x/mixmusic
cd mixmusic
bun install
bun run dev

Linux

Install Go from go.dev/dl (distribution packages are often older than 1.27.3), then Bun and the libraries MixMusic runs with:

curl -fsSL https://bun.sh/install | bash
# Debian and Ubuntu
sudo apt install git libgtk-3-0 libpulse0 libwebkit2gtk-4.1-0 libayatana-appindicator3-1 libsecret-1-0
# Fedora
sudo dnf install git gtk3 pulseaudio-libs webkit2gtk4.1 libayatana-appindicator-gtk3 libsecret

Then:

git clone https://github.com/fzn0x/mixmusic
cd mixmusic
bun install
bun run dev

Nix

With Nix, nix develop gives you the tools releases are built with, at the versions flake.lock pins: Go, Bun, NSIS, GoReleaser and Zola. nix build builds MixMusic for Linux from source, into result/.

Develop

bun run dev builds the app, starts it, and rebuilds it as you edit. Its data stays apart from an installed MixMusic, under the name MixMusic Dev.

bun run build:plugins          # the plugins' JavaScript, from their TypeScript
go test ./...                  # the app's tests
bun run typecheck              # the plugin SDK and the community's plugins
go run ./tools/registry -check # the community registry
bun run build                  # the packaged app for this system, in build/
bun run build -- -platform windows/amd64,linux/amd64,linux/arm64

In the Nix shell, build Linux downloads with .github/scripts/build.sh linux/amd64,linux/arm64, as releases do. A plain bun run build there makes a Linux program that asks for Nix's own loader, and it starts only on NixOS. go run ./tools/elfloader build/linux-amd64 checks a build.

The website is in site/, built with Zola, and the guides in docs/ are its /docs/ pages. go run ./tools/sitedocs && zola --root site serve previews it. Releases are built in the Nix shell and published by GoReleaser (.goreleaser.yaml).

docs/architecture explains how the parts fit together.

Layout

The app is the root package, with the packages of internal/ under it. The packages outside internal/ are for anyone to import, and documented on pkg.go.dev.

*.go                 the app and its windows: the pages, the player bar, the
                     mini player, the tray, media keys, deep links
fonts/               the typefaces the windows draw with
internal/app         the services the windows call, and the desktop integration
internal/player      the queue, played by the audio engine or on Spotify's devices
internal/audio       MixMusic's audio engine, and the system's audio output
internal/plugins     plugins, each in a JavaScript engine of its own
internal/youtube     YouTube Music's catalog, and your account there
internal/spotify     the Spotify Web API, its sign-in and Spotify Connect
internal/stream      audio streams, from YouTube or yt-dlp, opened for the engine
internal/match       Spotify tracks matched to their YouTube Music recordings
internal/romaji      Japanese lyrics in romaji, kanji read by kagome
internal/library     liked and disliked songs, mixes, history and stats
internal/lastfm      scrobbling to Last.fm
internal/discord     what plays, on your Discord profile
internal/diag        the log, without secrets, and the reports of crashes
internal/addons      themes and plugins, and the community registry
builtin/themes       the themes MixMusic ships with
public/              the page of Spotify's player, on Windows
sdk/                 the types of the plugin API
community/           community themes and plugins, and their registry

The packages you can import:

opus/                an Opus decoder in pure Go, a port of libopus's
aac/                 an AAC-LC decoder in pure Go
ac3/                 an AC-3 and E-AC-3 decoder in pure Go, written from ATSC A/52
webm/                the audio of WebM files: packets, times and seeking
mp4/                 the audio of MP4 files: packets, times and seeking
resample/            sample rate conversion, with Kaiser-windowed sincs
lyrics/              synced lyrics from Unison and LRCLIB, and translations
resources/           MixMusic's logo, for code that draws it

Community

Anyone can install community themes and plugins from the marketplace, the store icon in the sidebar, and you can add yours.

Make a theme

A theme is a theme.json file that sets colors, fonts and corners, which show in the layout the user chose. docs/themes.md lists every token and shows a complete theme. To try yours, put its folder in the themes folder (Settings › Appearance › open themes folder) and choose it in Settings › Appearance.

Make a plugin

A plugin is a small module, written in TypeScript or JavaScript, that adds pages, commands, track actions and widgets. docs/plugins.md documents the API, with its types for your editor. The community's sleep timer and spectrum are working examples.

Share it

  1. Fork this repository.
  2. Add one folder: community/themes/<id>/ for a theme, or community/plugins/<id>/ for a plugin, with its plugin.json and its index.ts.
  3. Run bun run build:plugins, go run ./tools/registry and go run ./tools/registry -check.
  4. Open a pull request.

Once it is merged, CI publishes it to the registry branch, and it shows up in everyone's marketplace. community/README.md has the details.

Privacy

MixMusic has no account, server, analytics or telemetry of its own. It talks to:

  • YouTube and Google: YouTube Music's catalog, its streams and how loud each track is, asked for while signed out, and the artwork; some streams through yt-dlp. Signed in, your library there, and, unless you turn it off in Settings › Accounts, the tracks you play, which join your YouTube Music history.
  • Spotify, once you sign in: your library, your Spotify Connect devices, and Spotify's player, loaded from sdk.scdn.co, when Spotify plays in MixMusic.
  • Unison: the video ID of the track that plays, or, without one, its title, artists, album and length, to find its lyrics. Only while you turn on translate, or romanize, beside the lyrics, the lyrics of the track that plays, with its video ID, which Unison has Google translate.
  • LRCLIB: the title, artists, album and length of the track that plays, to find its lyrics.
  • GitHub: a check for a new version at start and every few hours, which you can turn off in Settings › About; the community registry when you open the marketplace; the downloads of yt-dlp; and, the first time you turn on romaji beside Japanese lyrics, the dictionary of the readings of kanji (11.7 MB). Romaji is made on your computer: the lyrics aren't sent.
  • Last.fm, once you connect it: what you play.
  • Discord, unless you turn it off: what plays, sent to the Discord app on your computer, which shows it on your profile.

What it keeps on your computer:

  • Your settings and library (liked and disliked songs, mixes, history and recent searches), in the folder Settings › About names.
  • The tracks you played, in the cache, as much as you allow in Settings › Playback, and how loud YouTube measured them.
  • The covers you saw, up to 256 MB.
  • The translations of lyrics you turned on, by track and language, and the dictionary romaji reads kanji with, once you turned it on.
  • Your sign-ins, the YouTube Music session included, in the system's keyring. On Windows, when the Credential Manager can't keep one, it goes in a file encrypted for your Windows account; on Linux without a keyring, in files only your user can read.
  • The log, without your sign-ins.

The library's history page clears what you played, Settings › Playback clears the cache and the covers, and signing out of a service deletes its sign-in.

On Windows, the visualizer hears the audio of Spotify playing on this computer, in MixMusic or in the Spotify app, through Windows' process loopback, which hears only that app. It analyzes the audio in memory and never records or sends it.

Credits

MixMusic is built on these projects:

  • MyGo, the desktop framework MixMusic is built with. MixMusic uses MyGo's native UI: MyGo draws every window itself, in Go, without a webview, from the pages and the player bar to the mini player. Its command line packages the app, with its installers and the signed updates it updates itself from.
  • Go, the language of the app, with purego, which calls the system's libraries without cgo, and golang.org/x/image and golang.org/x/text.
  • Sobek, the JavaScript engine each plugin runs in.
  • Nix, which pins the tools releases are built with, and builds MixMusic for Linux from source.
  • GoReleaser, which publishes the releases, and its nFPM, which makes the RPM packages.
  • Bun, which runs the build, and TypeScript, which compiles the plugins and checks the plugin SDK's types.
  • Zola, which builds the website.
  • NSIS, which makes the Windows installers, and appimagetool, the AppImages.
  • yt-dlp, which finds the audio of the tracks MixMusic can't find itself.
  • Unison, the open, crowdsourced database of lyrics, under the ODbL, and LRCLIB, the open database of synced lyrics.
  • kagome, the Japanese morphological analyser that reads the kanji of lyrics for their romaji, with the IPA dictionary of kagome-dict, made from mecab-ipadic, which MixMusic downloads the first time romaji is turned on.
  • libopus, whose decoder the Opus decoder is a port of, and SharpJaad, the C# port of JAAD the AAC decoder derives from.
  • FFmpeg, which the decoders' tests compare with.
  • Selawik, Quicksand, Roboto Flex and Archivo, the typefaces of the windows.
  • Material Color Utilities, whose HCT color science the Material themes' colors are a port of.
  • Kevin MacLeod, whose music, under CC BY 4.0, plays on the website.

Contributing

Fixes, features, themes, plugins and bug reports are all welcome.

  • Report a problem from Settings › About › report a problem. It opens a new GitHub issue with your version, system, theme and plugins filled in. Or open an issue yourself.
  • Send a change as a pull request. CONTRIBUTING.md explains the checks to run, the commit style, and the changelog entry that a change people will notice needs.
  • Share a theme or a plugin: see Community.

CONTRIBUTORS.md thanks the people whose code, ideas and reports shaped MixMusic.

License

MixMusic is dual-licensed: use it under the MIT license or the GNU General Public License, version 3, whichever you prefer. Contributions are accepted under both. The typefaces in fonts are under the SIL Open Font License: Selawik's, Quicksand's, Roboto Flex's and Archivo's. The Opus decoder is a port of libopus, under its BSD license, the AAC decoder derives from SharpJaad, under its MIT license, and the HCT color science is a port of Material Color Utilities, under its Apache license.

MixMusic is not affiliated with, endorsed by or sponsored by Spotify or Google. It plays what these services offer their users, through the services' own interfaces; use it as their terms allow. Spotify and YouTube Music are trademarks of their owners.

Documentation

Overview

Command mixmusic is a desktop music player that brings Spotify and YouTube Music together in one customizable interface.

Package native draws MixMusic's native interface, a beta beside the web one: windows MyGo draws itself with its ui package, without a webview. They show what the web interface shows, from the same services, and play through the queue in Go (internal/player).

Directories

Path Synopsis
Package aac decodes AAC-LC audio (ISO/IEC 14496-3), such as the AAC YouTube serves in MP4 (itag 140): a pure Go decoder derived from SharpJaad, the C# port of JAAD, under the MIT license of LICENSE.sharpjaad.
Package aac decodes AAC-LC audio (ISO/IEC 14496-3), such as the AAC YouTube serves in MP4 (itag 140): a pure Go decoder derived from SharpJaad, the C# port of JAAD, under the MIT license of LICENSE.sharpjaad.
Package ac3 decodes AC-3 and E-AC-3 audio, of ATSC A/52 and its Annex E, such as the 5.1 surround YouTube serves in MP4 (formats 380 and 328): a pure Go decoder written from the published standards, ATSC A/52:2012 and ETSI TS 102 366 V1.4.1.
Package ac3 decodes AC-3 and E-AC-3 audio, of ATSC A/52 and its Annex E, such as the 5.1 surround YouTube serves in MP4 (formats 380 and 328): a pure Go decoder written from the published standards, ATSC A/52:2012 and ETSI TS 102 366 V1.4.1.
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files.
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files.
internal
addons
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves.
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves.
app
Package app wires MixMusic together: the services its windows call, the player, and its place on the desktop: windows, the tray, media keys and notifications.
Package app wires MixMusic together: the services its windows call, the player, and its place on the desktop: windows, the tray, media keys and notifications.
artwork
Package artwork downloads artwork, keeps it on disk, and picks its color, which themes use as the accent of what plays.
Package artwork downloads artwork, keeps it on disk, and picks its color, which themes use as the accent of what plays.
audio
Package audio is MixMusic's own audio engine: it plays the audio YouTube serves, Opus in WebM files and AAC-LC in MP4 ones, and the AAC-LC of the HLS packed audio of its live streams, on two decks, so that one track can fade into the next, each loud track turned down to an even loudness and each at its speed, at its own pitch, through the preamp, equalizer, levelling and analyser of the web player MixMusic had, whose Web Audio nodes it reproduces.
Package audio is MixMusic's own audio engine: it plays the audio YouTube serves, Opus in WebM files and AAC-LC in MP4 ones, and the AAC-LC of the HLS packed audio of its live streams, on two decks, so that one track can fade into the next, each loud track turned down to an even loudness and each at its speed, at its own pitch, through the preamp, equalizer, levelling and analyser of the web player MixMusic had, whose Web Audio nodes it reproduces.
audio/output
Package output plays the native engine's audio on the system's default output device, as float32 stereo at 48 kHz, or 5.1 where the device has it, which the system converts to the device's own format, following the default device when the user changes it: through WASAPI on Windows, an Audio Queue on macOS, and PulseAudio, which PipeWire serves as well, or else ALSA on Linux.
Package output plays the native engine's audio on the system's default output device, as float32 stereo at 48 kHz, or 5.1 where the device has it, which the system converts to the device's own format, following the default device when the user changes it: through WASAPI on Windows, an Audio Queue on macOS, and PulseAudio, which PipeWire serves as well, or else ALSA on Linux.
cast
Package cast plays on cast devices: Chromecasts, Google Home and Nest speakers, and TVs with Chromecast built in.
Package cast plays on cast devices: Chromecasts, Google Home and Nest speakers, and TVs with Chromecast built in.
cast/casttest
Package casttest has a fake cast device for tests: a TLS server on the loopback address that speaks the Cast v2 protocol as a device does, with a default media receiver, and keeps the messages it gets; and an mDNS responder that answers for it.
Package casttest has a fake cast device for tests: a TLS server on the loopback address that speaks the Cast v2 protocol as a device does, with a default media receiver, and keeps the messages it gets; and an mDNS responder that answers for it.
colorfile
Package colorfile reads the colours of a file that a tool makes of the wallpaper, for MixMusic to wear over the theme's: pywal's colors.json, matugen's JSON, and MixMusic's own tokens, as its matugen template and a theme.json write them.
Package colorfile reads the colours of a file that a tool makes of the wallpaper, for MixMusic to wear over the theme's: pywal's colors.json, matugen's JSON, and MixMusic's own tokens, as its matugen template and a theme.json write them.
diag
Package diag keeps what helps tell what went wrong: a log file of what MixMusic reports, without the secrets it may hold, and the report Go writes when MixMusic crashes, which the next start offers to send.
Package diag keeps what helps tell what went wrong: a log file of what MixMusic reports, without the secrets it may hold, and the report Go writes when MixMusic crashes, which the next start offers to send.
discord
Package discord shows what MixMusic plays on the user's Discord profile, as Rich Presence.
Package discord shows what MixMusic plays on the user's Discord profile, as Rich Presence.
downloads
Package downloads keeps the tracks the user chooses to play without the network, apart from the offline cache, which keeps what played lately and drops it as it fills: a folder of their audio and covers, with an index of what it holds.
Package downloads keeps the tracks the user chooses to play without the network, apart from the offline cache, which keeps what played lately and drops it as it fills: a folder of their audio and covers, with an index of what it holds.
hct
Package hct is Material's colour science: CAM16, the colour appearance model, and HCT, its hue and chroma with L*'s tone, in which Material makes tonal palettes and the colour roles of a scheme from one seed colour.
Package hct is Material's colour science: CAM16, the colour appearance model, and HCT, its hue and chroma with L*'s tone, in which Material makes tonal palettes and the colour roles of a scheme from one seed colour.
keypad
Package keypad hands a window Ctrl and the keypad's + on Windows and Linux, which MyGo gives its windows as no key, as it has none for it (#251): Ctrl and the keypad's − reach them as Ctrl and −, which zoom out, while Ctrl and the keypad's + couldn't zoom in.
Package keypad hands a window Ctrl and the keypad's + on Windows and Linux, which MyGo gives its windows as no key, as it has none for it (#251): Ctrl and the keypad's − reach them as Ctrl and −, which zoom out, while Ctrl and the keypad's + couldn't zoom in.
lastfm
Package lastfm scrobbles what MixMusic plays to Last.fm.
Package lastfm scrobbles what MixMusic plays to Last.fm.
library
Package library keeps what the user collects in MixMusic itself, across services: liked and disliked tracks, playlists that mix tracks of every service, the history of what they played, their recent searches, the podcasts they follow and where they left their episodes.
Package library keeps what the user collects in MixMusic itself, across services: liked and disliked tracks, playlists that mix tracks of every service, the history of what they played, their recent searches, the podcasts they follow and where they left their episodes.
match
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium.
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium.
media
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from.
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from.
nowplaying
Package nowplaying shows what MixMusic's own audio engine plays in the system's media controls, and passes on what they ask: macOS's Now Playing, which Control Center, the media keys and headphones reach, an MPRIS player on Linux, which desktops show and pass their media keys to, and Windows' media flyout, which the volume keys and Quick Settings show.
Package nowplaying shows what MixMusic's own audio engine plays in the system's media controls, and passes on what they ask: macOS's Now Playing, which Control Center, the media keys and headphones reach, an MPRIS player on Linux, which desktops show and pass their media keys to, and Windows' media flyout, which the volume keys and Quick Settings show.
online
Package online tells whether the network answers: whether YouTube or Spotify do, as a check over HTTPS tells, or as audio arriving shows.
Package online tells whether the network answers: whether YouTube or Spotify do, as a check over HTTPS tells, or as audio arriving shows.
player
Package player plays MixMusic's queue: one queue of tracks of every service, played by MixMusic's own audio engine, or on a Spotify device, a Spotify Connect device or MixMusic itself, as each track needs.
Package player plays MixMusic's queue: one queue of tracks of every service, played by MixMusic's own audio engine, or on a Spotify device, a Spotify Connect device or MixMusic itself, as each track needs.
player/playertest
Package playertest holds doubles of the player's interfaces that do nothing, for tests, as net/http/httptest holds HTTP's: Services, Stream and Device.
Package playertest holds doubles of the player's interfaces that do nothing, for tests, as net/http/httptest holds HTTP's: Services, Stream and Device.
plugins
Package plugins runs MixMusic's plugins: each in a JavaScript runtime of its own (sobek, an ECMAScript engine in Go), on a goroutine of its own, with the API of docs/plugins.md.
Package plugins runs MixMusic's plugins: each in a JavaScript runtime of its own (sobek, an ECMAScript engine in Go), on a goroutine of its own, with the API of docs/plugins.md.
portal
Package portal asks the desktop's XDG portals for what MixMusic can't do by itself inside a Flatpak's sandbox: to keep running without a window, and to start when the user logs in, which the Background portal decides.
Package portal asks the desktop's XDG portals for what MixMusic can't do by itself inside a Flatpak's sandbox: to keep running without a window, and to start when the user logs in, which the Background portal decides.
proc
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows.
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows.
romaji
Package romaji writes Japanese in Latin letters, as Hepburn romaji: kana by a table, and kanji by the readings the morphological analyser kagome finds in the IPA dictionary, which MixMusic downloads the first time romaji is turned on (Dictionary).
Package romaji writes Japanese in Latin letters, as Hepburn romaji: kana by a table, and kanji by the readings the morphological analyser kagome finds in the IPA dictionary, which MixMusic downloads the first time romaji is turned on (Dictionary).
romanize
Package romanize writes lines of lyrics in Latin letters on the computer, script by script, each by the official or the most used standard of its language, as it reads for singing along:
Package romanize writes lines of lyrics in Latin letters on the computer, script by script, each by the official or the most used standard of its language, as it reads for singing along:
settings
Package settings defines the user's preferences and their defaults.
Package settings defines the user's preferences and their defaults.
spotify
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices.
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices.
store
Package store keeps values in JSON files.
Package store keeps values in JSON files.
stream
Package stream finds the audio streams of YouTube videos, through YouTube's player API as YouTube's visionOS app, else with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek.
Package stream finds the audio streams of YouTube videos, through YouTube's player API as YouTube's visionOS app, else with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek.
sysproxy
Package sysproxy picks the proxy of MixMusic's requests: the one the environment names, as Go's own clients do, and on Windows, failing that, the one set in Windows' settings, which browsers, WebView2 and yt-dlp use too.
Package sysproxy picks the proxy of MixMusic's requests: the one the environment names, as Go's own clients do, and on Windows, failing that, the one set in Windows' settings, which browsers, WebView2 and yt-dlp use too.
taskbar
Package taskbar puts the player's buttons on the thumbnail of a window's taskbar button, which Windows shows while the pointer rests on the button: previous, play or pause, and next, as music players have them there.
Package taskbar puts the player's buttons on the thumbnail of a window's taskbar button, which Windows shows while the pointer rests on the button: previous, play or pause, and next, as music players have them there.
tools
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams YouTube's player API won't give MixMusic itself, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends.
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams YouTube's player API won't give MixMusic itself, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends.
volume
Package volume is the curve of MixMusic's volume: what a position of the slider, from 0 to 1, sounds like, and how settings.json keeps it.
Package volume is the curve of MixMusic's volume: what a position of the slider, from 0 to 1, sounds like, and how settings.json keeps it.
youtube
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios.
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios.
Package lyrics finds the lyrics of tracks on Unison and LRCLIB, open databases of lyrics synchronized to the music, and reads the TTML and LRC formats they come in.
Package lyrics finds the lyrics of tracks on Unison and LRCLIB, open databases of lyrics synchronized to the music, and reads the TTML and LRC formats they come in.
Package mp4 reads the audio of MP4 files, of the ISO base media file format (ISO/IEC 14496-12 and 14496-14), such as the AAC audio YouTube serves (itags 139 and 140), and its 5.1 surround in AC-3 and E-AC-3 (380 and 328): the packets of their first audio track, with their times, and seeking by their sample tables or segment indexes.
Package mp4 reads the audio of MP4 files, of the ISO base media file format (ISO/IEC 14496-12 and 14496-14), such as the AAC audio YouTube serves (itags 139 and 140), and its 5.1 surround in AC-3 and E-AC-3 (380 and 328): the packets of their first audio track, with their times, and seeking by their sample tables or segment indexes.
Package opus decodes Opus audio (RFC 6716 and RFC 8251): a pure Go port of the decoder of libopus 1.6.1, float build, under the BSD license of LICENSE.libopus.
Package opus decodes Opus audio (RFC 6716 and RFC 8251): a pure Go port of the decoder of libopus 1.6.1, float build, under the BSD license of LICENSE.libopus.
internal/celt
Package celt is the CELT decoder of Opus (RFC 6716, section 4.3), the codec of music and of the high band of hybrid frames: a port of libopus 1.6.1's float build, under the BSD license of opus/LICENSE.libopus.
Package celt is the CELT decoder of Opus (RFC 6716, section 4.3), the codec of music and of the high band of hybrid frames: a port of libopus 1.6.1's float build, under the BSD license of opus/LICENSE.libopus.
internal/opustest
Package opustest checks decoders against the Opus test vectors of RFC 8251: their files, and the quality metric of libopus's opus_compare, which decides whether a decoder conforms.
Package opustest checks decoders against the Opus test vectors of RFC 8251: their files, and the quality metric of libopus's opus_compare, which decides whether a decoder conforms.
internal/rangedec
Package rangedec is the range decoder of Opus (RFC 6716, section 4.1), which SILK and CELT read their symbols with: a port of entdec.c and entcode.c of libopus.
Package rangedec is the range decoder of Opus (RFC 6716, section 4.1), which SILK and CELT read their symbols with: a port of entdec.c and entcode.c of libopus.
internal/silk
Package silk is the SILK decoder of Opus (RFC 6716, section 4.2): a port of the SILK decoder of libopus 1.6.1 as its default float build compiles it (no deep PLC, OSCE, DRED or QEXT), under the BSD license of opus/LICENSE.libopus.
Package silk is the SILK decoder of Opus (RFC 6716, section 4.2): a port of the SILK decoder of libopus 1.6.1 as its default float build compiles it (no deep PLC, OSCE, DRED or QEXT), under the BSD license of opus/LICENSE.libopus.
Package resample converts the sample rate of audio, as MixMusic's audio engine, which plays everything at 48 kHz, converts the 44.1 kHz of YouTube's AAC and the other rates AAC has.
Package resample converts the sample rate of audio, as MixMusic's audio engine, which plays everything at 48 kHz, converts the 44.1 kHz of YouTube's AAC and the other rates AAC has.
Package resources holds MixMusic's brand files for the code that draws them: the mark of its logo, the pink rings with a play button.
Package resources holds MixMusic's brand files for the code that draws them: the mark of its logo, the pink rings with a play button.
tools
cask command
Command cask writes the Homebrew cask of a release, Casks/mixmusic.rb of the tap fzn0x/homebrew-tap, from packaging/homebrew/mixmusic.rb.tmpl: with the version, the SHA-256 of the release's disk image, and, until the app is notarized, caveats that tell how to allow its first launch.
Command cask writes the Homebrew cask of a release, Casks/mixmusic.rb of the tap fzn0x/homebrew-tap, from packaging/homebrew/mixmusic.rb.tmpl: with the version, the SHA-256 of the release's disk image, and, until the app is notarized, caveats that tell how to allow its first launch.
changelog command
Command changelog folds the changelog's fragments into CHANGELOG.md.
Command changelog folds the changelog's fragments into CHANGELOG.md.
elfloader command
Command elfloader checks that MixMusic's Linux builds ask for the system's own loader, at the path every distribution has it, so that they start outside NixOS too (#166).
Command elfloader checks that MixMusic's Linux builds ask for the system's own loader, at the path every distribution has it, so that they start outside NixOS too (#166).
metainfo command
Command metainfo writes the Flatpak's AppStream metadata, which software centers show: packaging/flatpak/io.github.fzn0x.mixmusic.metainfo.xml, with the releases of CHANGELOG.md in place of its <releases/>, each with its date, its summary (the first paragraph of its section) and a link to its page.
Command metainfo writes the Flatpak's AppStream metadata, which software centers show: packaging/flatpak/io.github.fzn0x.mixmusic.metainfo.xml, with the releases of CHANGELOG.md in place of its <releases/>, each with its date, its summary (the first paragraph of its section) and a link to its page.
overlap command
Command overlap tells whether a pull request merges with each of the other open ones.
Command overlap tells whether a pull request merges with each of the other open ones.
pinyindata command
Command pinyindata makes internal/romanize/pinyin.bin, the readings in Hanyu Pinyin that romanize reads Chinese by, from data of permissive licences only:
Command pinyindata makes internal/romanize/pinyin.bin, the readings in Hanyu Pinyin that romanize reads Chinese by, from data of permissive licences only:
registry command
Command registry builds the index of the community's themes and plugins that MixMusic's marketplace reads, community/registry-2.json, of community/themes and community/plugins, and checks every add-on on the way.
Command registry builds the index of the community's themes and plugins that MixMusic's marketplace reads, community/registry-2.json, of community/themes and community/plugins, and checks every add-on on the way.
sitedocs command
Command sitedocs makes the website's docs pages from docs/*.md, which stay their only source: the README and GitHub link to them, and the site is built from them.
Command sitedocs makes the website's docs pages from docs/*.md, which stay their only source: the README and GitHub link to them, and the site is built from them.
Package webm reads the audio of WebM and Matroska files, such as the Opus audio YouTube serves (itags 249, 250 and 251): the packets of their first audio track, with their times, and seeking by their Cues.
Package webm reads the audio of WebM and Matroska files, such as the Opus audio YouTube serves (itags 249, 250 and 251): the packets of their first audio track, with their times, and seeking by their Cues.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL