goosemusic 1.1.2

A music player with YouTube search, local playback, and OS media controls
goosemusic-1.1.2 is not a library.

GooseOb's Music Player

A YouTube/SoundCloud search music player with local playback, downloads, and OS media controls, built with iced.

Features

  • Search — YouTube Music (Songs / Videos / Artists / Albums / Playlists) via ytmusicapi with yt-dlp fallback, plus SoundCloud search. Drill into artists, albums, and playlists.
  • Streaming & caching — Stream audio via yt-dlp with fully native decoding, cached to disk for instant replay.
  • Downloads — Download tracks to MP3 via yt-dlp, with a Downloads view and on-row indicators.
  • Local music & playlists — Add local files (MP3, FLAC, WAV, OGG, M4A, AAC, OPUS, WMA) and create, rename, delete, and organize playlists.
  • Library — Save albums, artists, and playlists; browse them from the sidebar.
  • Artist pages — Header with stats plus Most popular, Albums, Playlists, and Fans-also-like sections, each with its own provider picker.
  • Radio — Song radio and artist radio from search results.
  • Queue — Queue panel with Up Next and Recently Played tabs.
  • Drag & drop — Drag tracks between views, into the queue, onto playlists (reorder or turn a card into a local playlist), and into the Library.
  • Lyrics — Free, no-key LRCLib lyrics with synced lines that seek on click; cached per track.
  • Media controls — OS media keys / MPRIS (Linux) / SMTC (Windows) / Now Playing (macOS) via souvlaki.
  • More — Search history, volume normalization, navigation history, session restore, right-click context menu, dark theme.
  • Localization — 12 languages: English, Polski, Español, Português (Brasil), 简体中文, العربية, Беларуская, Français, Deutsch, 日本語, Русский, हिन्दी.

Installation

Quick install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/GooseOb/music_plr/master/scripts/install.sh | bash

Detects your platform, downloads the latest release, and installs everything. On Linux it also sets up the desktop entry and icon.

Manual install

Download from GitHub releases or compile from source:

cargo install goosemusic

Linux desktop integration

The release tarball includes a .desktop file and icon. After extracting:

cp goosemusic ~/.local/bin/
cp goosemusic.desktop ~/.local/share/applications/
cp icons/logo.svg ~/.local/share/icons/goosemusic.svg

macOS

Extract the .app.tar.gz and drag Goosemusic.app to your Applications folder. On first open, right-click → Open if macOS blocks it (unsigned app).

Supported languages

Language Code
English en
Polski (Polish) pl
Español (Spanish) es
Português (Brasil) pt_br
简体中文 (Chinese, Simplified) zh_cn
العربية (Arabic) ar
Беларуская (Belarusian) be
Français (French) fr
Deutsch (German) de
日本語 (Japanese) ja
Русский (Russian) ru
हिन्दी (Hindi) hi

Pick a language from the in-app Settings view. To add one, copy src/i18n/en.rs to a new module, translate the strings, and append one entry to the languages! macro in src/i18n/mod.rs — the Language enum and picker are generated from that list.

Install & run

Prerequisites

  • Rust (stable, edition 2021)
  • yt-dlp — YouTube audio streaming and downloads
  • Python 3 + ytmusicapi — YouTube Music search (optional; falls back to yt-dlp)
  • D-Bus session bus (Linux) — for MPRIS
  • Network access — lyrics fetch live from LRCLib (no key)
cargo build
cargo run

Keyboard shortcuts

Key Action
Space Toggle play/pause
Esc Close in-list search → close search history → clear selection → return to Search
Delete Delete selected tracks (playlist view only)
/ Move focus between queue panel and track list
/ Move through the focused list (auto-scrolls)
Ctrl+F In-list fuzzy search over the hovered track list
Enter Play the focused (or hovered) track
Ctrl+C / Ctrl+V Copy / paste selected tracks
Ctrl+A Select all tracks in the focused list

Configuration

Config lives at ~/.config/goosemusic/config.json and is also editable live from the in-app Settings view.

Field Description Default
download_dir Download directory ~/Music/goosemusic
cache_max_size_mb Max stream cache size (MB) 1024
max_search_history_stored Search history entries kept on disk 100
max_search_history_visible Entries shown in the dropdown 10
max_recently_played Tracks kept in Recently Played 50
volume_normalization Consistent loudness across tracks false

Persistent data goes to ~/.local/share/goosemusic (playlists, library, downloads, search history); regenerable caches (session, streamed audio, thumbnails, lyrics) go to ~/.cache/goosemusic.

Technical notes

State — All state lives in one MusicPlayer; view() is a pure function of &MusicPlayer. Background work (search, download, thumbnails) returns via an mpsc channel drained by a 250ms tick. Stores implement a JsonStore trait and degrade to defaults on failure.

Audio — A dedicated output thread runs the rodio sink. yt-dlp streams AAC-in-M4A into a still-growing cache file; a custom SymphoniaStreamingSource over a non-seekable GrowingMediaSource decodes sequentially so playback starts within a few KB. Cached/downloaded/local files use the same source in seekable mode. Per-track normalization gain is computed once (symphonia) and applied on replay.

License

MIT