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、黑胶唱片或磁带上旋转,既可以播放本地音乐文件,也可以通过 Cider 客户端控制 Apple Music 播放。
怎么安装并运行 Spun?目前还没有打包好的安装程序:你要在 CachyOS 或 Arch Linux 上用 CMake 和 Ninja 从源码构建 Spun,然后从应用菜单或用 ./scripts/run.sh 启动它。
构建之前需要装好什么?你需要 C++20 编译器、CMake 3.22+、Ninja、pkg-config、Python 3、Qt 6.8+(含 Quick Controls、Multimedia、SVG 和开发文件)以及 TagLib 2.0+ 开发文件;3D 播放器视图需要 Qt Quick 3D,但它是可选的。
它在任何 Linux 桌面上表现都一样吗?Spun 是在带 Hyprland 和 Noctalia 的 CachyOS 上开发的,因此在其他发行版和合成器上,主题、颜色跟随和桌面集成可能会有差异。
它在任何 Linux 发行版上都能运行吗?Spun 面向 Linux,为 CachyOS 和 Arch Linux 提供一流的安装说明;其他发行版需要用同一套工具链手动构建。
我的 Apple Music 密码或 Cider 令牌存得安全吗?Spun 从不索要你的 Apple Music 密码;它只在本地保存一个 Cider API 令牌,文件权限仅限所有者,位置在 ~/.config/spun/。
Spun 是开源的吗?不是——它是源码可见的 PolyForm Noncommercial 1.0.0 许可,这不是 OSI 认证的开源许可证;个人及其他非商业使用免费。
CD、黑胶和磁带三种模式有什么区别?它们共用同一套播放控制,但外观和行为不同:CD 会旋转,可选 500 RPM 设置;黑胶有一条可拖动的唱臂,可选噼啪/嘶嘶声效果;磁带显示转动的带轮,可选走带音效。
3D 播放器多给了什么?启用 Qt Quick 3D 后,会得到建模出来的唱片、带轮、盒壳和唱臂部件,带金属质感表面,光照还会随 Noctalia 当前壁纸的配色染色;它需要 qt6-quick3d,可以用 -DSPUNENABLE3D=OFF 禁用。
我完全可以不用 Cider 来用 Spun 吗?可以——本地模式直接播放你自己的文件或文件夹,不复制也不修改它们;只有 Apple Music 的播放和浏览才需要 Cider。
Spun 连上 Cider 的浏览器之后,我能做什么?你可以搜索 Apple Music、浏览资料库、探索艺人的全部专辑、播放电台和歌曲电台、收藏喜欢的项目,并管理带已保存快照和书签的播放队列,不过不支持写入 Apple Music 播放列表。
Size
5.3 MB
Stars
446
Updated
CommitSep 16
Age
1mo
Commits · 90 Days