Skip to content

Repository files navigation

Bloom

⚠️ 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.

What it does

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

Requirements

  • Qt 6 (Core, Gui, Quick, Network)
  • CMake 3.16+
  • C++23 compiler
  • mpv (in PATH or configured)
  • libsecret (Linux) for credential storage

Installation

Windows

Download the latest release from the Releases page. Windows release artifacts include libmpv runtime DLLs in the package.

Building

Using Nix (supported)

nix build
nix run
nix flake check

Portable Linux release artifacts:

nix run .#package-linux -- --output dist
nix run .#package-flatpak -- --output dist

See docs/build.md for development shells, packaging, dependency policy, compatibility targets, and Windows instructions.

Windows local build note (libmpv)

For local Windows builds, provide a libmpv SDK via one of:

  • MPV_ROOT
  • MPV_DIR
  • LIBMPV_ROOT

The SDK must include:

  • headers (include/mpv/client.h)
  • import library (*.lib)
  • runtime DLL (libmpv-2.dll or mpv-2.dll)

Windows CI and scripts/build.ps1 are pinned to mpv-dev-x86_64-20260610-git-304426c.7z from shinchiro/mpv-winbuild-cmake.

Known Issues

Linux

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

  • Windows hi-dpi scaling causes issues.

Configuration

Config file location:

  • Linux: ~/.config/Bloom/app.json
  • Windows: %APPDATA%/Bloom/app.json

Controls

  • Arrow keys: Navigate
  • Enter: Select/Play
  • Escape/Backspace: Go back
  • Ctrl+Q: Quit
  • F11: Toggle fullscreen

Project Structure

See AGENTS.md for architecture details.

License

See LICENSE. Third-party license and attribution details are in THIRD_PARTY_NOTICES.md.

Acknowledgments

Built with Qt, mpv, for Jellyfin and Silo servers. Playback architecture and embedded mpv design were inspired by Plezy.

About

A Jellyfin HTPC client for 10-foot TV interfaces, built with Qt 6/QML and mpv.

Resources

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages