⚠️ 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 Jellyfin HTPC client for 10-foot TV interfaces, built with Qt 6/QML and mpv/libmpv.
Bloom connects to a Jellyfin server and provides a TV-friendly interface for browsing and playing media. 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 Jellyfin
- 10-Foot Keyboard navigation
- On-screen playback controls
- MDBList ratings
- Seerr integration
- Auto HDR and Refresh Rate switching
Not yet working or incomplete:
- Search (barebones implementation exists)
- Playlists
- Filtering library/search
- Gamepad support
- 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.
This is mildly outdated already, by default linux will use the embedded player but it is quite experimental and untested so you may want to use external.
- Linux embedded libmpv playback (
linux-libmpv-opengl) is currently less tested and not fully supported across all Wayland compositor/GPU combinations. - Recommended stable Linux path today:
BLOOM_PLAYER_BACKEND=external-mpv-ipc
Examples:
# Stable path (recommended on Linux currently)
BLOOM_PLAYER_BACKEND=external-mpv-ipc nix run
# Embedded Linux validation 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. Playback architecture and embedded mpv design were inspired by Plezy.