Spun README

The project's README from github.com/yappologistic/Spun. As one markdown file: README.md.

Spun

A CD, vinyl and cassette music player for Linux.

Spun in vinyl mode with a gold tonearm and the Cider queue alongside it

Support Spun on Buy Me a Coffee
Optional support for Spun's development.

Install · Get started · Features · Help · License

Play local music or control Apple Music through Cider. Spun puts your album artwork on a spinning CD, vinyl record or cassette, with an interface inspired by Material Design 3. Optional 3D players add physical depth and lighting that follows Noctalia's wallpaper palette.

Source-available · PolyForm Noncommercial 1.0.0. Personal and other permitted noncommercial use is free. This is not an OSI-approved open-source license. Read the license details.

Install on CachyOS or Arch Linux

Spun builds from source; there is no packaged installer yet. Open a terminal and run:

sudo pacman -S --needed base-devel git cmake ninja python qt6-base qt6-declarative qt6-multimedia qt6-svg taglib

git clone https://github.com/yappologistic/Spun.git
cd Spun
./scripts/build.sh -DBUILD_TESTING=OFF
./scripts/install-launcher.sh

For 3D players, also install qt6-quick3d and run the build command again. Spun includes 3D when that dependency is available. To build without it, add -DSPUN_ENABLE_3D=OFF to the build command.

Open Spun from your application menu, or run ./scripts/run.sh from its folder. The launcher points to that folder. If you move it, run ./scripts/install-launcher.sh again.

Building on another Linux distribution

You need a C++20 compiler, CMake 3.22+, Ninja, pkg-config, Python 3, Qt 6.8+ with Quick Controls, Multimedia, SVG and development files, and TagLib 2.0+ development files. Qt Quick 3D is optional. Package names differ between distributions. Spun is developed on CachyOS with Hyprland and Noctalia; desktop integration can vary elsewhere.

Start listening

Local music: choose Local, then + to add tracks, or drop files and folders onto Spun. More → Add music folder includes artist and album subfolders. Imports show progress, skip songs already in the queue and can be cancelled without adding a partial import. Directory symlinks inside the folder are not followed. Your music files are not copied or modified. More → Play demo plays the included original soundcheck.

Apple Music through Cider: open Cider, sign in there, then choose Cider in Spun. Cider handles authentication and streaming and must remain running. Apple Music playback requires the appropriate access through Cider.

For search, browsing and the full queue:

  1. Enable Cider's local API.
  2. Open Spun's Queue and choose Connect to Cider.
  3. Approve Spun in Cider. Spun remembers the connection.

For older Cider versions, choose Use an app token instead. Create one in Cider's Settings → Connectivity → Manage External Application Access, allow playback, queue, library and audio access, then paste it into Spun.

Spun connects to the local API on port 10767. Basic playback controls use Linux's media-player interface, so working playback alone does not confirm API access. Available actions depend on your Cider version and permissions.

Inside the player

CD, vinyl and cassette

Choose a medium in More → Preferences. All three share playback controls, album details, lyrics and Mini mode.

Browse through Cider

Use the top-left search button to browse songs, albums, playlists and artists without leaving Spun.

Queue and listening tools

Cider changes refresh the visible queue and relevant details. Temporary connection failures preserve browsing results and offer reconnection when needed. Batch operations stop and report partial progress when Cider cannot confirm a change; uncertain playback actions are not retried automatically.

Preferences and desktop integration

Choose your font, interface size, background blur, animations and media appearance in More → Preferences. Spun follows Noctalia's colors and reduced-motion setting when available. Reduced motion also skips loading sequences and perspective tilt.

Spun's desktop media entry follows the selected Local or Cider source, including artwork, playback state, volume and seeking. Cider may also expose its own entry. Hyprland integration depends on the compositor's supported interfaces.

Audio settings contains crossfade and, where supported by Cider, Automix and listening modes. Audio quality in the current song's menu shows what Cider reports and labels device output separately.

Fonts

Spun uses your system font by default. Choose any installed family in Preferences → Font. Fonts are not bundled or downloaded automatically.

For the intended appearance, we recommend Google Sans Flex. Install the TTF with your desktop's font installer, reopen Spun and select it in Preferences. The font has its own SIL Open Font License.

Keyboard shortcuts
Action Shortcut
Play / pause Space
Previous / next track Ctrl + Left / Right
Seek backward / forward Left / Right
Add files / folder Ctrl + O / Ctrl + Shift + O
Queue Ctrl + L
Cider browser Ctrl + B
Search the current panel Ctrl + F
Quick jump Ctrl + K
Select browser / upcoming queue tracks Ctrl + A (track list focused)
Toggle focused browser track Space (track list focused)
Select tracks / range Ctrl-click / Shift-click
Mini mode Ctrl + M
Flip medium / switch lyrics F / Y
Mute M
Keyboard help F1
Back / dismiss Escape
Quit Ctrl + Q

Update or remove

To update, open a terminal in your Spun folder:

git pull --ff-only
./scripts/build.sh -DBUILD_TESTING=OFF

To remove the application-menu entry:

rm "${XDG_DATA_HOME:-$HOME/.local/share}/applications/spun.desktop"

You can then delete the Spun source folder. Your music stays where it was. Preferences remain in ~/.config/spun/ unless you remove them separately.

Troubleshooting and privacy

Spun does not ask for your Apple Music password. Its Cider token is stored with owner-only file permissions in ~/.config/spun/cider-connection.json. Preferences and local listening data also stay in ~/.config/spun/. Artwork and music metadata may be fetched during playback and browsing. Do not include tokens, private configuration, listening history or personal logs in issue reports.

Development

Build, test and benchmark

Build the diagnostic companion and run the registered tests:

./scripts/build.sh -DBUILD_TESTING=ON
ctest --test-dir build --output-on-failure

Tests use temporary preferences and synthetic local API fixtures. Audio checks need a working user audio session, and API fixtures need permission to listen on loopback. Desktop-control tests use a private D-Bus session. Diagnostics are separate from the normal player.

For focused artwork, lighting, geometry and media checks:

./scripts/test-3d.sh

The default uses offscreen CPU rendering through Mesa and requires an available X display for its OpenGL context. It does not create visible windows. It checks rendered artwork and palette changes without exercising the full native window lifecycle.

For the complete 3D interaction and Cider-fixture suites, run SPUN_TEST_RENDERER=native ./scripts/test-3d.sh in a separate Wayland or X11 test session. This includes projected seeking, tonearm gestures, lid transitions, scaling and mode combinations. Set SPUN_TEST_SCREEN to the dedicated output name and SPUN_TEST_OUTPUT to a local capture directory. Missing 3D rendering fails the checks instead of silently skipping them.

For large imports, run QT_QPA_PLATFORM=offscreen QT_QPA_PLATFORMTHEME= ./build/spun-import-test --stress. This creates 20,000 temporary sparse WAV files representing 625 GiB of audio without allocating that much disk space, then removes them.

--inspect-cider and --inspect-library inspect a live Cider connection without changing playback. The opt-in --verify-cider-writes changes playback, queue and audio settings and leaves song radio playing after restoring its temporary edits. Use a privately paired test profile with --config /path/to/test/settings.ini; never share its connection file or captured library data.

Run python3 scripts/benchmark.py --output /tmp/spun-performance for isolated performance comparisons. Offscreen results are not whole-desktop GPU measurements. python3 scripts/make-demo.py regenerates the original soundcheck after building and additionally requires FFmpeg.

Before submitting substantial code contributions, open an issue to discuss scope and contributor licensing. A patch does not transfer its copyright; future commercial distribution needs appropriate rights to contributed code and compliance with third-party licenses.

License

Spun's original code and assets use the PolyForm Noncommercial License 1.0.0, with required notices and third-party credits.

The license permits noncommercial use, specified personal uses, modification and redistribution under its terms. It also permits use by certain charitable, educational, public research, public safety, health, environmental and government institutions, regardless of funding. It is broader than personal use only. Uses outside its permissions require a separate license from the relevant rights holder. The full license controls.

The author may offer separate commercial terms for code they own in the future. No paid edition is offered here.

Material Symbols Rounded icons retain their Apache 2.0 license. Qt, TagLib and optional fonts retain their respective licenses. Spun is an independent project and is not endorsed by Google, Apple, Cider or Noctalia.

Spun (yappologistic/Spun)

Searching Database…

446 ·GitHub
Что это?Spun — это настольный музыкальный плеер для Linux, который показывает обложку вашего альбома, вращающуюся на CD, виниловой пластинке или кассете, и может проигрывать локальные музыкальные файлы или управлять воспроизведением Apple Music через клиент Cider.
Как установить и запустить Spun?Пакетного установщика пока нет: Spun собирается из исходников на CachyOS или Arch Linux с помощью CMake и Ninja, а запускается из меню приложений или через ./scripts/run.sh.
Что нужно установить перед сборкой?Нужны компилятор C++20, CMake 3.22+, Ninja, pkg-config, Python 3, Qt 6.8+ (с Quick Controls, Multimedia, SVG и файлами разработки) и файлы разработки TagLib 2.0+; Qt Quick 3D необязателен для 3D-вида плеера.
Будет ли он одинаково вести себя на любом Linux-десктопе?Spun разрабатывается на CachyOS с Hyprland и Noctalia, поэтому оформление, следование цветовой теме и интеграция с рабочим столом могут отличаться на других дистрибутивах и композиторах.
Он работает на любом дистрибутиве Linux?Spun ориентирован на Linux, с первоклассными инструкциями по установке для CachyOS и Arch Linux; на других дистрибутивах требуется ручная сборка той же цепочкой инструментов.
Мой пароль Apple Music или токен Cider хранятся в безопасности?Spun никогда не спрашивает ваш пароль Apple Music; он лишь хранит API-токен Cider локально с правами доступа только для владельца в ~/.config/spun/.
Spun — это открытый код?Нет — код доступен для просмотра под лицензией PolyForm Noncommercial 1.0.0, которая не является одобренной OSI лицензией открытого кода; личное и другое некоммерческое использование бесплатно.
В чём разница между режимами CD, винила и кассеты?У них одни и те же элементы управления воспроизведением, но выглядят и ведут себя они по-разному: CD вращается с опциональной настройкой 500 RPM, у винила есть перетаскиваемый тонарм с опциональными эффектами потрескивания/шипения, а кассета показывает крутящиеся катушки ленты с опциональными звуками механизма.
Что добавляют 3D-плееры?Включение Qt Quick 3D даёт смоделированные диски, катушки, коробки и части тонарма с металлическими поверхностями и освещением, окрашенным текущей палитрой обоев Noctalia; для этого нужен qt6-quick3d, а отключить можно с помощью -DSPUNENABLE3D=OFF.
Можно пользоваться Spun вообще без Cider?Да — режим Local проигрывает ваши собственные файлы или папки напрямую, не копируя и не изменяя их; Cider нужен только для воспроизведения и просмотра Apple Music.
Что я могу делать, когда Spun подключён к браузеру Cider?Можно искать в Apple Music, просматривать медиатеку, изучать дискографии артистов, слушать станции и радио песен, закреплять избранное и управлять очередью с сохранёнными снимками и закладками, однако запись в плейлисты Apple Music не поддерживается.
Size
5.3 MB
Stars
446
Updated
CommitSep 16
Age
1mo
Commits · 90 Days