Skip to content

Casting and Remote Control

vicrodh edited this page Jul 24, 2026 · 3 revisions

Casting and Remote Control

QBZ can send audio to a Chromecast or a DLNA renderer, act as a Qobuz Connect target you drive from the official Qobuz apps, and — through the headless Headless Daemon — expose an HTTP control plane and MPRIS for building your own remotes.

Casting

Click the Cast icon in the Now Playing bar to open the device picker. It has two tabs — Chromecast and DLNA — and both networks are scanned automatically while the picker is open. Pick a device to hand playback off to it; the Now Playing bar keeps driving transport (play/pause/next/prev, volume, and seek) while casting.

Chromecast

Stream audio from QBZ to any Chromecast-compatible device.

  • Devices are discovered automatically on your local network (mDNS)
  • Open the Cast picker, choose your Chromecast, and playback transfers to it

Cast device picker

DLNA / UPnP

Stream to DLNA/UPnP renderers — network receivers, streamers, and speakers.

  • DLNA renderers appear under the DLNA tab of the same picker
  • QBZ serves the audio itself (it acts as the media server) and streams the bytes to the renderer
  • DSD and hi-res PCM are served to capable DLNA renderers (#646), including native-DSD MIME conventions for strict, high-end renderers (e.g. HQPlayer). Playback self-heals with a fresh Play after a track ends naturally

DLNA targets are media renderers (things that play audio). QBZ is not casting to a media server — it is the server, feeding the renderer.

Truthful Cast Quality (#638)

QBZ never lies about what a cast device is actually receiving.

  • Delivered-quality badge — the Now Playing quality badge shows the quality the device is really getting, and when it's lower than the source it names why (device cap, the per-device quality cap you set, or the source). A downgrade arrow appears on the badge, with a tooltip contrasting the source's catalog maximum against the measured output.
  • Measured, not assumed — QBZ probes the stream's STREAMINFO, so a FLAC serve is never mislabeled as MP3 even when it exceeds a cap.
  • Honors your streaming quality — casting follows your streaming quality preference (in Audio Configuration) instead of always forcing the maximum; the prefetch runs at the cast-effective tier while casting.
  • Per-renderer quality cap — each device in the Cast picker has a quality-cap row. Set a cap for a streamer that struggles with HiFi or high sample rates, and QBZ clamps cast requests to it. The cap is remembered per device (stored locally on that machine).

Delivered-quality badge while casting

Qobuz Connect

QBZ can act as a Qobuz Connect receiver — it shows up inside the official Qobuz apps (phone, desktop, web) as a castable device, the way a hardware streamer would. Cast to it from the Qobuz app and it plays on the machine running QBZ.

  • Desktop QBZ exposes a Connect endpoint you can target from the Qobuz apps.
  • The headless Headless Daemon (qbzd) does the same with no window open — its single biggest feature. A Raspberry Pi wired to your DAC becomes a Qobuz Connect target you control entirely from your phone. See Build a Streaming Box for the full walkthrough.

Remote Control via the Headless Daemon

The way to drive QBZ programmatically over your LAN is the Headless Daemon (qbzd), which runs a small HTTP control plane.

  • Plain HTTP on port 8182, bound to 0.0.0.0 by default so any machine on your LAN can reach it
  • Origin shield, always on — requests carrying a browser Origin header are rejected, so a random web page can't drive the port (an <img> tag sends no Origin, so artwork URLs still work)
  • Optional bearer token — set [server] token in qbzd.toml and every route except /api/ping requires Authorization: Bearer <token>
  • Full transport, queue editing, search, browse, live events (SSE), and current-artwork endpoints — enough to build a Plasma widget, a bar applet, a web dashboard, or a home-automation rule

The desktop app itself does not run an HTTP remote-control server. Use qbzd for HTTP control, or MPRIS (below) for desktop-native remotes.

See Headless Daemon API for the endpoints, JSON shapes, and worked examples.

MPRIS Media Controls

Both desktop QBZ and the daemon publish org.mpris.MediaPlayer2 on the session bus, so you can control playback without any custom client:

  • Hardware media keys — play, pause, next, previous
  • Desktop media widgets — GNOME/KDE media controls, plasmoids, and lock-screen controls
  • Track metadata and artwork are pushed to the widget as they change

On the desktop this is enabled automatically. On the daemon it's on by default wherever a session bus exists (toggle via the setup TUI's playback.mpris, or the QBZD_MPRIS override). See Integrations for more on MPRIS.

Clone this wiki locally