-
Media Server v0.4.0
StableLint & Test / test (push) Has been skippedLint & Test / linux-smoke (push) Has been skippedRelease / create-release (push) Successful in 3sRelease / build-windows (push) Successful in 1m9sRelease / build-linux (push) Successful in 1m10sRelease / build-macos (push) Has been cancelledreleased this
2026-05-28 17:27:37 +03:00 | 3 commits to master since this releasev0.4.0 (2026-05-28)
Two headline changes since v0.3.1: Media Server now ships first-class Linux and macOS builds (no more Windows-only), and the Windows app icon was redesigned with a proper multi-resolution ICO so the installer, Start Menu, desktop shortcut, Alt+Tab, and system tray all render sharp.
Features
- Linux support, production-ready. New
linuxextra (dbus-python,PyGObject,python-xlib) plus abuild-dist-linux.shthat emits a portable tarball and a systemd user unit. The unit setsDBUS_SESSION_BUS_ADDRESS,XDG_RUNTIME_DIR, andReadWritePathsfor~/.config/~/.cacheso MPRIS works and audit-log / thumbnail writes aren't blocked byProtectHome. The Linux MPRIS controller now connects to the session bus lazily — a missing or late bus no longer crashes lifespan startup, and the user is logged a one-line hint aboutloginctl enable-linger. (ddf4a6c) - macOS support. New
macosextra (pyobjc-framework-Cocoa,pyobjc-framework-Quartz), abuild-dist-macos.shscript, and a per-user LaunchAgent installer producingMediaServer-vX.Y-macos-{arm64,x86_64}.tar.gzartifacts. Spotify URL artwork is wired throughMediaController.get_album_art(). (ddf4a6c) - Cross-platform album artwork.
MediaController.get_album_art()is now abstract with Linux (mpris:artUrl,file://+http(s)://) and macOS (Spotify URL) implementations; the/api/media/artworkendpoint awaits the controller. (ddf4a6c) - Per-OS unavailable reasons on
/api/media/visualizer/statusso the Web UI can explain why the visualizer is off on Linux / macOS instead of just hiding it. (ddf4a6c) - Startup preflight on Linux warns when
DBUS_SESSION_BUS_ADDRESSorXDG_RUNTIME_DIRis unset and informs the user when running under Wayland disables the foreground-window probe — so silent loss of features is now diagnosable from the log. (ddf4a6c) - Redesigned app icon ("Beacon"). Replaces the generic Spotify-green circle with a refined squircle + deep-teal diagonal gradient (
#0B3D3B → #1A6B5E) + warm parchment play triangle (#F5F1E8) with a drop shadow, top sheen, and ghosted echo-chevrons that hint at broadcast/stream. (d798fed) - Multi-resolution Windows ICO.
icon.icogrew from a single 16×16 frame (208 B) to a 10-frame ICO (16/20/24/32/40/48/64/96/128/256 — ~37 KB) so Windows no longer upscales 16×16 into mush for the installer chrome, Start Menu, desktop shortcuts, Alt+Tab, and File Explorer tiles. (d798fed) - System tray uses the new icon.
tray.pynow picks a 64×64 frame from the multi-res ICO; the procedural fallback was reskinned to the same Beacon palette so a missing ICO no longer regresses the tray back to the old Spotify-green circle. (d798fed)
Bug Fixes
tray._confirmguarded againstctypes.windllon non-Windows so the new Linux / macOS builds don't crash when the tray prompts for confirmation. (ddf4a6c)config.example.yamldefaults are now cross-platform. Per-OS commented examples for the on/off scripts, andon_turn_offdefaults to a harmlessecho(the previous default silently failed everywhere but Windows). (ddf4a6c)
Development / Internal
Build & Packaging
scripts/generate-icon.py— SVG is the canonical source;resvg-pyrasterizes every ICO size; Pillow packs the multi-resolutionicon.ico. Re-run any time the SVG changes. (d798fed)- Dependency reorganization in
pyproject.toml—screen-brightness-controlandmonitorcontrolare cross-platform and moved to base deps; newlinuxandmacosoptional-deps groups withsys_platformmarkers.resvg-pyadded to[dev]for the icon-generation script. (ddf4a6c, d798fed) install_linux.sh— dropped the deadrequirements.txtpath; now installs viapip install ".[linux]"and pre-creates the writable state dirs. (ddf4a6c)- Templated
media-server.serviceupdated to match the new dist layout, with proper session-bus env vars and a writable state-dir grant. (ddf4a6c)
CI
- New
linux-smokejob in.gitea/workflows/test.yml— installs.[linux], boots the server underdbus-run-session, and asserts/api/health. Catches dependency-resolution and import-time regressions for the Linux dist path. (ddf4a6c) - Release workflow gains apt-deps step for the Linux build and a best-effort macOS build job that produces the per-arch macOS tarballs. (ddf4a6c)
Documentation
- README rewritten for the new extras — replaces the stale
pip install -r requirements.txtinstructions, adds a systemd-lingering note + troubleshooting section, and a macOS LaunchAgent section. (ddf4a6c)
All Commits
Hash Message Author d798fed feat(icon): redesign app icon as "Beacon" and ship multi-resolution ICO alexei.dolgolyov ddf4a6c feat: production-ready Linux & macOS support alexei.dolgolyov Downloads
Platform File Windows (installer) MediaServer-v0.4.0-setup.exeWindows (portable) MediaServer-v0.4.0-win-x64.zipLinux MediaServer-v0.4.0-linux-x64.tar.gzmacOS (Apple Silicon) MediaServer-v0.4.0-macos-arm64.tar.gzmacOS (Intel) MediaServer-v0.4.0-macos-x86_64.tar.gzDownloads
- Linux support, production-ready. New