docs(readme): qbzd and kiosk sections, drop diagram and star history
Promote the headless daemon to its own section with a screenshot and the wiki link, add a Kiosk Mode section for Raspberry screens and handheld consoles, remove the mermaid architecture diagram and the star-history chart. cc
This commit is contained in:
3 files changed
+32
-109
No files matched your search
@@ -196,18 +196,6 @@ Multi-device playback control using Qobuz's real-time streaming protocol. Consid
|
||||
- Server-authoritative queue sync across all devices
|
||||
- Bidirectional transport: play, pause, skip, seek, shuffle, repeat, volume
|
||||
|
||||
### Headless Daemon (qbzd)
|
||||
|
||||
Run QBZ without a screen: `qbzd` is a standalone ~25 MB binary (shipped inside the deb/rpm
|
||||
packages and as its own tarball) that turns any Linux box — a Raspberry Pi, a NAS, the
|
||||
living-room mini-PC — into a bit-perfect **Qobuz Connect endpoint** that appears in the
|
||||
official Qobuz apps like a hardware streamer.
|
||||
|
||||
- Daemon + full CLI + terminal setup wizard (TUI) in one binary
|
||||
- Browser-based login that works over SSH; one-file settings hand-off from desktop QBZ
|
||||
- HiFi wizard with copyable audio-stack config blocks (clipboard works over SSH)
|
||||
- Full manual: **[Headless Daemon (qbzd) — Wiki](https://github.com/vicrodh/qbz/wiki/Headless-Daemon)**
|
||||
|
||||
### Casting
|
||||
|
||||
- **Chromecast** and **DLNA/UPnP** discovery and streaming
|
||||
@@ -250,6 +238,38 @@ official Qobuz apps like a hardware streamer.
|
||||
- **7 languages:** English, Spanish, German, French, Portuguese, Russian, Japanese
|
||||
- **Offline mode** usable without ever logging into Qobuz, with fully offline playlists and automatic reconnection
|
||||
|
||||
## Headless Daemon (qbzd)
|
||||
|
||||
<p align="center">
|
||||
<img src="static/readme-qbzd.png" alt="qbzd — headless daemon CLI and TUI" width="760" />
|
||||
</p>
|
||||
|
||||
Run QBZ without a screen: `qbzd` is a standalone ~25 MB binary (shipped inside the deb/rpm
|
||||
packages and as its own tarball) that turns any Linux box — a Raspberry Pi, a NAS, the
|
||||
living-room mini-PC — into a bit-perfect **Qobuz Connect endpoint** that appears in the
|
||||
official Qobuz apps like a hardware streamer.
|
||||
|
||||
- Daemon + full CLI + terminal setup wizard (TUI) in one binary
|
||||
- Browser-based login that works over SSH; one-file settings hand-off from desktop QBZ
|
||||
- HiFi wizard with copyable audio-stack config blocks (clipboard works over SSH)
|
||||
- MPRIS out of the box, live JSON events (`qbzd watch`), service files for systemd/OpenRC/runit
|
||||
|
||||
Full manual: **[Headless Daemon (qbzd) — Wiki](https://github.com/vicrodh/qbz/wiki/Headless-Daemon)**
|
||||
|
||||
## Kiosk Mode
|
||||
|
||||
For Raspberry screens and handheld consoles.
|
||||
|
||||
<p align="center">
|
||||
<img src="static/readme-kiosk.jpeg" alt="QBZ Kiosk Mode on a handheld console" width="720" />
|
||||
</p>
|
||||
|
||||
A touch-first face for touchscreens and small panels: set `QBZ_PROFILE=kiosk` and QBZ boots
|
||||
a big-target shell with its own NavRail, touch scrolling, an on-screen keyboard, and a
|
||||
centerpiece Now Playing with cover↔lyrics toggle and queue/history tabs. Switch between
|
||||
Kiosk and Desktop live from the Now Playing layout menu; fullscreen is opt-in via
|
||||
`QBZ_KIOSK_FULLSCREEN=1`.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
As of 2.0, QBZ is a single native Rust process: the **Slint UI runs in-process** and talks to the same Rust core crates directly through callbacks and shared state — there is no browser engine, no webview, and no IPC bridge to serialize across (the old Tauri command-invoke boundary is gone entirely).
|
||||
@@ -455,93 +475,6 @@ If QBZ fails to start, try `QBZ_RENDERER=software qbz` first.
|
||||
User guides, audio configuration, integrations, and troubleshooting: **[QBZ Wiki](https://github.com/vicrodh/qbz/wiki)** (work in progress).
|
||||
|
||||
|
||||
## Diagram
|
||||
|
||||
As of 2.0 there is no webview and no IPC bridge: the Slint UI runs in the same process as the Rust core and calls it directly through callbacks/shared state.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
|
||||
subgraph group_ui["UI (Slint, in-process — no webview, no IPC)"]
|
||||
node_ui_views["qbz-ui<br/>Slint views (.slint)"]
|
||||
node_ui_bin["qbz binary<br/>entrypoint, window/renderer setup, wiring"]
|
||||
node_ui_remote["Qconnect Transport<br/>in-process client<br/>[qconnect_transport.rs]"]
|
||||
end
|
||||
|
||||
subgraph group_app["Application Layer (Rust, direct calls)"]
|
||||
node_app_audio["Audio Orchestration<br/>backend + device mgmt"]
|
||||
node_app_player["Player Orchestration<br/>playback engine"]
|
||||
node_app_library["Library Orchestration<br/>library service"]
|
||||
node_app_cache["Offline Cache<br/>local cache"]
|
||||
node_app_cast["Casting<br/>device handoff"]
|
||||
node_app_connect["Qconnect Service<br/>remote control bridge"]
|
||||
end
|
||||
|
||||
subgraph group_crates["Rust Core Crates"]
|
||||
node_rust_player["qbz-player<br/>playback core"]
|
||||
node_rust_audio["qbz-audio<br/>audio backend"]
|
||||
node_rust_cache["qbz-cache<br/>audio cache"]
|
||||
node_rust_qobuz["qbz-qobuz<br/>api client"]
|
||||
node_rust_library["qbz-library<br/>library index"]
|
||||
node_rust_cast["qbz-cast<br/>cast stack"]
|
||||
node_rust_connect["qconnect stack<br/>protocol stack"]
|
||||
node_rust_integrations["qbz-integrations<br/>external services"]
|
||||
end
|
||||
|
||||
subgraph group_packaging["Packaging"]
|
||||
node_packaging_ci["Packaging & CI<br/>release automation<br/>[workflows]"]
|
||||
end
|
||||
|
||||
node_ui_views -->|"callbacks / shared state"| node_ui_bin
|
||||
node_ui_remote -->|"bridges"| node_app_connect
|
||||
node_ui_bin -->|"drives, in-process"| node_app_player
|
||||
node_ui_bin -->|"queries, in-process"| node_app_library
|
||||
node_ui_bin -->|"controls, in-process"| node_app_audio
|
||||
node_ui_bin -->|"reads/writes, in-process"| node_app_cache
|
||||
node_ui_bin -->|"controls, in-process"| node_app_cast
|
||||
node_ui_bin -->|"syncs, in-process"| node_rust_integrations
|
||||
node_app_player -->|"uses"| node_rust_player
|
||||
node_app_audio -->|"uses"| node_rust_audio
|
||||
node_app_player -->|"prefetches"| node_rust_cache
|
||||
node_app_library -->|"indexes"| node_rust_library
|
||||
node_app_library -->|"enriches"| node_rust_qobuz
|
||||
node_app_cast -->|"delegates"| node_rust_cast
|
||||
node_app_connect -->|"implements"| node_rust_connect
|
||||
node_packaging_ci -.->|"builds"| node_ui_bin
|
||||
node_packaging_ci -.->|"bundles"| node_ui_views
|
||||
|
||||
click node_ui_views "https://github.com/vicrodh/qbz/tree/main/crates/qbz-ui"
|
||||
click node_ui_bin "https://github.com/vicrodh/qbz/tree/main/crates/qbz/src"
|
||||
click node_ui_remote "https://github.com/vicrodh/qbz/blob/main/crates/qbz/src/qconnect_transport.rs"
|
||||
click node_app_audio "https://github.com/vicrodh/qbz/tree/main/crates/qbz-audio/src"
|
||||
click node_app_player "https://github.com/vicrodh/qbz/tree/main/crates/qbz-player/src"
|
||||
click node_app_library "https://github.com/vicrodh/qbz/tree/main/crates/qbz-library/src"
|
||||
click node_app_cache "https://github.com/vicrodh/qbz/tree/main/crates/qbz-offline-cache/src"
|
||||
click node_app_cast "https://github.com/vicrodh/qbz/tree/main/crates/qbz-cast/src"
|
||||
click node_app_connect "https://github.com/vicrodh/qbz/blob/main/crates/qbz/src/qconnect_transport.rs"
|
||||
click node_rust_player "https://github.com/vicrodh/qbz/tree/main/crates/qbz-player/src"
|
||||
click node_rust_audio "https://github.com/vicrodh/qbz/tree/main/crates/qbz-audio/src"
|
||||
click node_rust_cache "https://github.com/vicrodh/qbz/tree/main/crates/qbz-cache/src"
|
||||
click node_rust_qobuz "https://github.com/vicrodh/qbz/tree/main/crates/qbz-qobuz/src"
|
||||
click node_rust_library "https://github.com/vicrodh/qbz/tree/main/crates/qbz-library/src"
|
||||
click node_rust_cast "https://github.com/vicrodh/qbz/tree/main/crates/qbz-cast/src"
|
||||
click node_rust_connect "https://github.com/vicrodh/qbz/tree/main/crates/qconnect-protocol/src"
|
||||
click node_rust_integrations "https://github.com/vicrodh/qbz/tree/main/crates/qbz-integrations/src"
|
||||
click node_packaging_ci "https://github.com/vicrodh/qbz/blob/main/.github/workflows"
|
||||
|
||||
classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
|
||||
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
|
||||
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
|
||||
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
|
||||
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
|
||||
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
|
||||
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
|
||||
class node_ui_views,node_ui_bin,node_ui_remote toneBlue
|
||||
class node_app_audio,node_app_player,node_app_library,node_app_cache,node_app_cast,node_app_connect toneAmber
|
||||
class node_rust_player,node_rust_audio,node_rust_cache,node_rust_qobuz,node_rust_library,node_rust_cast,node_rust_connect,node_rust_integrations toneMint
|
||||
class node_packaging_ci toneIndigo
|
||||
```
|
||||
|
||||
## Open Source
|
||||
|
||||
QBZ is MIT-licensed. No telemetry, no tracking, no hidden services. Built for Linux and macOS audio enthusiasts.
|
||||
@@ -564,13 +497,3 @@ Contributions welcome. Please read `CONTRIBUTING.md` before submitting issues or
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Fancy charts
|
||||
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=vicrodh/qbz&type=date&theme=dark&legend=top-left" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=vicrodh/qbz&type=date&legend=top-left" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=vicrodh/qbz&type=date&legend=top-left" />
|
||||
</picture>
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
Reference in new issue
Block a user