Metadata-Version: 2.4
Name: jellytoast
Version: 0.1.4
Summary: A desktop music player for Jellyfin and Navidrome servers — bit-perfect mpv playback (Linux + Windows).
Author-email: august <augustvontrips@gmail.com>
License: GPL-2.0-or-later
Project-URL: Homepage, https://github.com/wolfgangwarehaus/jellytoast
Project-URL: Repository, https://github.com/wolfgangwarehaus/jellytoast
Project-URL: Issues, https://github.com/wolfgangwarehaus/jellytoast/issues
Project-URL: Changelog, https://github.com/wolfgangwarehaus/jellytoast/blob/main/docs/CHANGELOG.md
Keywords: jellyfin,navidrome,subsonic,media,music,mpv,linux,windows,kde
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: X11 Applications :: Qt
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Multimedia :: Sound/Audio :: Players
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: COPYING
Requires-Dist: PySide6<7.0,>=6.6.0
Requires-Dist: python-mpv>=1.0.5
Requires-Dist: pychromecast<16,>=14.0.0
Requires-Dist: zeroconf>=0.149.12
Requires-Dist: ifaddr>=0.1.7
Requires-Dist: dbus-next>=0.2.3; sys_platform == "linux"
Requires-Dist: jeepney>=0.6; sys_platform == "linux"
Requires-Dist: pyatv<1.0,>=0.17; sys_platform != "win32"
Requires-Dist: python-xlib>=0.30; sys_platform == "linux"
Requires-Dist: requests>=2.32.4
Requires-Dist: keyring>=23.0
Requires-Dist: cryptography>=43.0.1
Requires-Dist: numpy>=1.24
Requires-Dist: async-upnp-client<1.0,>=0.47.0
Requires-Dist: aiohttp>=3.14.0
Requires-Dist: soco<1,>=0.31
Requires-Dist: snapcast>=2.3.8
Requires-Dist: winrt-runtime>=2.0; sys_platform == "win32"
Requires-Dist: winrt-Windows.ApplicationModel>=2.0; sys_platform == "win32"
Requires-Dist: winrt-Windows.Media>=2.0; sys_platform == "win32"
Requires-Dist: winrt-Windows.Media.Interop>=2.0; sys_platform == "win32"
Requires-Dist: winrt-Windows.Storage.Streams>=2.0; sys_platform == "win32"
Requires-Dist: winrt-Windows.Foundation>=2.0; sys_platform == "win32"
Requires-Dist: windows-toasts>=1.1; sys_platform == "win32"
Requires-Dist: comtypes>=1.2; sys_platform == "win32"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.0; extra == "dev"
Requires-Dist: pytest-randomly>=3.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: ruff>=0.4; extra == "dev"
Requires-Dist: pre-commit>=3.0; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: types-requests; extra == "dev"
Requires-Dist: pip-audit>=2.7; extra == "dev"
Provides-Extra: windows
Provides-Extra: macos
Requires-Dist: pyobjc-core>=10.0; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-Cocoa>=10.0; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-MediaPlayer>=10.0; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-UserNotifications>=10.0; sys_platform == "darwin" and extra == "macos"
Requires-Dist: pyobjc-framework-ServiceManagement>=10.0; sys_platform == "darwin" and extra == "macos"
Dynamic: license-file

<h1 align="center">jellytoast</h1>

<p align="center">
  A desktop music player for <a href="https://jellyfin.org/">Jellyfin</a> and
  <a href="https://www.navidrome.org/">Navidrome</a> servers —<br>
  bit-perfect playback, casting, mini-player, and offline downloads.
</p>

<p align="center">
  <a href="https://github.com/wolfgangwarehaus/jellytoast/actions/workflows/ci.yml"><img src="https://github.com/wolfgangwarehaus/jellytoast/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-GPL--2.0--or--later-blue" alt="License"></a>
</p>

<!-- hero screenshot: docs/screenshots/hero.png (Library view, Frosted dark) -->
<!-- <p align="center"><img src="docs/screenshots/hero.png" width="800" alt="jellytoast — library view"></p> -->

## Features

- **Desktop app for your self-hosted music** — supports Jellyfin and Navidrome, with multiple libraries.
- **Bit-perfect audio** — FLAC / ALAC / OPUS / DSD playback via [mpv](https://mpv.io/).
- **Cast anywhere** — send music to Chromecast, AirPlay 2, Sonos, DLNA, or Snapcast. A built-in local relay can forward the stream for trickier setups, like Tailscale connections or fully offline playback.
- **Offline mode** — cache albums, playlists, or your whole library for offline playback.
- **Floating mini player** — compact and album-art views.
- **Desktop features** — media keys, a tray icon, optional notifications, and a start-at-login option.
- **Frosted-glass look** — real background blur on KDE and Windows, light and dark themes, and your own accent color.
- **And more** — synced lyrics, an audio visualizer, smart playlists, smart shuffle, a sleep timer, ListenBrainz scrobbling, tag editing (Jellyfin), and encrypted login storage.

## Install

### Linux

- **Ubuntu / Debian / Mint** (22.04+ / 12+) — download the `.deb` from [Releases](https://github.com/wolfgangwarehaus/jellytoast/releases/latest), then `sudo apt install ./jellytoast_*_amd64.deb`
- **AppImage** (any distro, nothing to install) — download the `.AppImage` from [Releases](https://github.com/wolfgangwarehaus/jellytoast/releases/latest), `chmod +x` it, and run.
- **AUR** (Arch Linux) — coming soon.

### macOS (Apple Silicon)

- **[Download the `.dmg`](https://github.com/wolfgangwarehaus/jellytoast/releases/latest)** — a Developer-ID-signed, **notarized** app (Gatekeeper-clean, no right-click-to-open dance). Open it and drag jellytoast to Applications. *(Apple Silicon / arm64; a universal build with Intel support is planned.)*
- **Mac App Store** — coming soon.

### Windows 10/11 (x64)

- **[Microsoft Store](https://apps.microsoft.com/detail/9PNLTPXGHN79)** — one click, auto-updating, no SmartScreen warning.
- **winget** — `winget install wolfgangwarehaus.jellytoast`
- **Installer or portable zip** from [Releases](https://github.com/wolfgangwarehaus/jellytoast/releases/latest) — the direct download is unsigned, so SmartScreen warns on first run; click **More info → Run anyway** (verify the SHA256 against `SHA256SUMS`).

### Any OS

- **PyPI:** `pipx install jellytoast`

**From source** (Python 3.11+, Qt 6, libmpv):

```bash
git clone https://github.com/wolfgangwarehaus/jellytoast.git
cd jellytoast
pip install -e .
jellytoast            # or: python3 -m jellytoast
```

Want to contribute? [`CONTRIBUTING.md`](.github/CONTRIBUTING.md) has the
dev setup, the architecture, and the conventions this codebase follows.

## Documentation

| Doc | What it is |
| --- | --- |
| [`docs/user_guide.md`](docs/user_guide.md) | Shortcuts, mini player, tray, casting, settings, themes & blur, troubleshooting |
| [`CONTRIBUTING.md`](.github/CONTRIBUTING.md) | Dev setup, architecture & the conventions this codebase follows |
| [`docs/SPEC.md`](docs/SPEC.md) | What the app actually does today |
| [`docs/decisions.md`](docs/decisions.md) | Architecture decision log (why, not just what) |
| [`docs/TODO.md`](docs/TODO.md) | The backlog (P0–P4) |
| [`SECURITY.md`](.github/SECURITY.md) | How to report a vulnerability |
| [`CHANGELOG.md`](docs/CHANGELOG.md) | Dated history of what shipped |

## License

GPL-2.0-or-later. See [`LICENSE`](LICENSE).

## Support

Want to leave a tip? [Ko-fi ☕](https://ko-fi.com/wolfgangwarehaus)
