⚠️ WARNING: This is pre-alpha software under active development. It is NOT production ready. Expect bugs, breaking changes, and missing features. Use at your own risk.
This project is highly opinionated and may not suit everyone's needs, it is made specifically to solve the problems I had with other clients and doesn't really take into consideration what other people may want. For that reason, it's not something I plan on advertising anytime soon, if at all. But, if you happened to stumble across it and find it useful, feel free to let me know if you have any feedback or suggestions.
A media client for Jellyfin and Silo servers, built for 10-foot TV interfaces with Qt 6/QML and mpv/libmpv.
Bloom connects to a Jellyfin or Silo server and provides a TV-friendly interface for browsing and playing media. Native Silo support is experimental and has not been validated against a live Silo server. It uses mpv for video playback with vo=gpu-next for HDR support.
Current state:
- Trickplay
- Skip intro/outro (including TheIntroDB and IntroDB support)
- Sub and Audio selection UI with track selection memory
- Playback progress reporting to the connected server
- 10-Foot Keyboard navigation
- Configurable gamepad navigation (implemented; real-controller validation pending)
- Search across connected provider libraries
- On-screen playback controls
- MDBList ratings
- Seerr integration
- Auto HDR and Refresh Rate switching
Not yet working or incomplete:
- Playlists
- Many edge cases
- Qt 6 (Core, Gui, Quick, Network)
- CMake 3.16+
- C++23 compiler
- mpv (in PATH or configured)
- libsecret (Linux) for credential storage
Download the latest release from the Releases page.
Windows release artifacts include libmpv runtime DLLs in the package.
nix build
nix run
nix flake checkPortable Linux release artifacts:
nix run .#package-linux -- --output dist
nix run .#package-flatpak -- --output distSee docs/build.md for development shells, packaging, dependency policy, compatibility targets, and Windows instructions.
For local Windows builds, provide a libmpv SDK via one of:
MPV_ROOTMPV_DIRLIBMPV_ROOT
The SDK must include:
- headers (
include/mpv/client.h) - import library (
*.lib) - runtime DLL (
libmpv-2.dllormpv-2.dll)
Windows CI and scripts/build.ps1 are pinned to mpv-dev-x86_64-20260610-git-304426c.7z from shinchiro/mpv-winbuild-cmake.
Linux uses external-mpv-ipc automatically on Wayland; embedded libmpv playback (linux-libmpv-opengl) remains experimental and validation-only. Unsupported embedded runtime conditions fall back to external mpv IPC.
- Recommended stable Linux path:
BLOOM_PLAYER_BACKEND=external-mpv-ipc
Examples:
# Stable path (recommended on Linux currently)
BLOOM_PLAYER_BACKEND=external-mpv-ipc nix run
# Embedded Linux validation-only path (experimental)
BLOOM_PLAYER_BACKEND=linux-libmpv-opengl BLOOM_ENABLE_WAYLAND_LIBMPV=1 nix run- Windows hi-dpi scaling causes issues.
Config file location:
- Linux:
~/.config/Bloom/app.json - Windows:
%APPDATA%/Bloom/app.json
- Arrow keys: Navigate
- Enter: Select/Play
- Escape/Backspace: Go back
- Ctrl+Q: Quit
- F11: Toggle fullscreen
See AGENTS.md for architecture details.
See LICENSE. Third-party license and attribution details are in THIRD_PARTY_NOTICES.md.
Built with Qt, mpv, for Jellyfin and Silo servers. Playback architecture and embedded mpv design were inspired by Plezy.