-
Notifications
You must be signed in to change notification settings - Fork 0
yauiclient desktop
yauiclient is a lightweight playback client for NextPVR. The desktop build runs on Windows, Linux, and macOS and renders NextPVR's UI as live video, while handling video/audio playback locally through libmpv.
This page covers install/config locations, the JSON config file and profiles, libmpv tuning, platform differences, and remote control / keyboard support.
| Platform | Link |
|---|---|
| Windows | yaInstaller.exe |
| Windows | yaInstaller3.zip |
| Linux | Generic X11 |
| Linux | Generic X11 Legacy |
| Linux | Generic Wayland |
| macOS | (coming soon) |
All versions and release notes: Releases page
yauiclient stores all of its settings — login info, window/screen preferences, and playback tuning — in a small JSON file, separate from wherever the program itself is installed.
| Platform | Config folder |
|---|---|
| Windows | %APPDATA%\yauiclient\ |
| Linux | ~/.yauiclient/ |
| macOS | ~/.yauiclient/ |
The folder is created automatically the first time you run yauiclient, along with a default config file inside it. If you ever need to reset your settings, delete the file(s) in this folder and they'll be regenerated with defaults on next launch.
The Windows build is distributed with an NSIS installer; the install folder for the program itself (the .exe and its dependencies) is whatever you chose during setup. The config folder above is unrelated to that and is always per-Windows-user under
%APPDATA%.
yauiclient supports multiple independent configurations, called profiles. Each profile is just its own JSON file in the config folder above, named <profile>.json (the default profile is simply called yauiclient, giving yauiclient.json).
This is useful if you want to keep separate settings for, say, two different rooms/displays, or two different NextPVR servers, using the same yauiclient install. Each profile also gets its own matching libmpv settings file (see below) — <profile>.conf alongside <profile>.json.
You choose a profile with a command-line option when launching yauiclient — see Command-Line Options below.
Below are the options yauiclient reads from (and writes back to) the JSON config file:
| Option | Type | Meaning |
|---|---|---|
host |
string | NextPVR server address |
server_port |
number | NextPVR server port |
protocol |
string |
http or https
|
pin / hashed_pin
|
string | Login credential for the NextPVR server. Normally filled in automatically by yauiclient's built-in server discovery/login process — you shouldn't need to edit these by hand. |
sid |
string | Current session ID, managed automatically |
client_id |
string | A random ID generated once per install to identify this client to the server; don't need to set this manually |
resolution |
string, e.g. "1280x720"
|
Requested video/UI resolution from the server, and the fallback size used when running windowed |
fullscreen |
true/false | Start yauiclient in fullscreen or in a window |
monitor |
number | Which display to use for fullscreen on a multi-monitor system (0 = first monitor) |
deinterlace |
true/false | Turn on automatic deinterlacing in mpv by default |
shutdown |
true/false | What the remote's Power button does: true shuts down the whole PC, false just closes yauiclient |
thumbnail_throttle |
number (ms) | How quickly the scrub-thumbnail strip advances while you browse with Left/Right during playback |
thumbnail_fast_start |
number (ms) | How long you need to hold Left/Right before thumbnail browsing speeds up |
thumbnail_fast_step |
number | How many thumbnails are skipped per step once fast-browsing kicks in |
window |
object {x, y, w, h}
|
Saved windowed-mode position and size — only written to disk when you explicitly save your window placement with Alt+S; toggling or leaving fullscreen on its own does not save anything |
pathsubstitution.substitute |
list of {from, to}
|
Rewrites file paths the server sends (e.g. swapping a server-side recording path for a locally-mounted equivalent) |
If a setting is missing from the file, yauiclient just uses a sensible built-in default, and will write the full set of current values back out the next time it saves.
yauiclient takes a few options when launched from a shortcut, terminal, or script:
| Option | Effect |
|---|---|
-p <name> or --profile <name>
|
Launch with the named profile instead of the default |
-c or --console
|
Show a live console/terminal with log output, for troubleshooting |
-h or --help
|
Print usage and exit |
yauiclient --profile livingroom
This loads (or creates, on first run) livingroom.json — and its matching livingroom.conf for libmpv settings — instead of the default yauiclient.json. Give just the bare profile name, not a path or file extension. Leave the option off entirely to use the default profile.
By default yauiclient runs quietly: no console window pops up on Windows, and on Linux/macOS its normal console output is suppressed entirely. It always writes a log file to yauiclient.log in your config folder (one shared log file regardless of which profile you're running) — that's the first place to check if something's gone wrong.
For live output while troubleshooting, launch with -c / --console:
- On Windows, this opens a visible console window showing log output as it happens.
- On Linux/macOS, it switches stdout/stderr to unbuffered terminal output you can watch directly in your shell, and sets the program's text locale appropriately for displaying non-ASCII characters (skipped on the LibreELEC build, which doesn't need it).
Playback itself is handled by libmpv (the same engine behind the standalone mpv player), and yauiclient lets you drop in your own libmpv settings per profile.
If a file named <profile>.conf exists next to your <profile>.json (so yauiclient.conf for the default profile), yauiclient loads it at startup and applies whatever options are in it on top of its own built-in defaults (hardware decoding, audio channel handling, etc.). If the file doesn't exist, yauiclient just logs that it's using its defaults and carries on — nothing breaks.
This file uses the same plain option=value format as a normal mpv config file, so anything documented as an mpv option can go in it — for example, subtitle styling, audio filters, or fine-tuning hardware decode behaviour for your particular GPU. It's intended for advanced tweaks; most people will never need to create one.
The desktop build behaves the same way on every platform for the core experience — same UI rendering, same keyboard shortcuts, same playback engine — but a few things differ:
- Windows has the most complete remote-control support: it understands classic Windows Media Center IR receivers and remotes (both their dedicated "media keys" and raw button presses), and many third-party USB IR receivers that show up as standard multimedia keyboards. Alt+F4 closes the app cleanly, stopping any live TV in progress first.
- Linux has the same playback features and keyboard shortcuts as Windows, plus its own remote-control path: yauiclient can read an IR remote directly through the Linux kernel's built-in remote-control driver (handy with cheap USB IR receivers), or alternatively through a LIRC daemon if you already have one set up.
- macOS (currently tested on a Hackintosh build) behaves like the Linux build for everyday playback and keyboard control, but doesn't currently have a remote/IR-receiver layer of its own — keyboard control is fully supported, dedicated remote hardware is not.
- A separate LibreELEC Kodi add-on build also exists, aimed at always-on HTPC boxes; it's different enough (always fullscreen, takes over from Kodi, etc.) that it's documented on its own page rather than here.
On windowed platforms (Windows, Linux, and macOS — everywhere except the LibreELEC add-on, which is always fullscreen), pressing Alt+S writes your current window setup into your profile's config so it comes back the same way next launch:
- If you're currently windowed, it saves the exact x/y position and width/height of the window.
- If you're currently fullscreen, it instead saves the windowed size/position you'd return to if you left fullscreen, plus which monitor you're fullscreen on — so next launch goes fullscreen on the correct display.
yauiclient also tracks which monitor your window is on automatically in the background: if you drag the window over to a different display, it notices and updates that internally, so Alt+S always saves the monitor you're actually using, not just whichever one the app happened to start on.
This tracking depends on being able to ask the operating system exactly where the window is on screen — and the Wayland display protocol deliberately does not let applications query their own window position. That's an intentional sandboxing decision in Wayland, not a bug: compositors are free to place and move windows however they like without telling the application.
Because of that, when running under Wayland:
- Alt+S can still save your window's width/height, but the saved x/y position isn't meaningful.
- yauiclient can't detect that you've dragged the window to a different monitor, so the remembered monitor stays fixed at whatever it was when the window was created.
Fullscreen itself isn't affected — telling the window to go fullscreen on a specific monitor is something the app can still request directly under Wayland. It's only the after-the-fact "where did my window end up" tracking that Wayland blocks. If exact window placement on launch matters to you, running your Linux session under X11 instead of Wayland (most desktop environments offer this as a login option) avoids the limitation entirely.
yauiclient normalizes every input source — keyboard, IR remote, USB HID remote — down to one internal set of actions, so the same key behaves consistently no matter where it came from. The supported input sources are:
- Keyboard, always available, on every platform (see the key table below).
-
Linux kernel IR remotes (evdev) — yauiclient automatically finds the
/dev/inputdevice created by the kernel for an IR receiver (the same mechanismir-keytableuses) and reads remote button presses straight from it. If auto-detection doesn't find your receiver, a specific device path can be configured as an override. - LIRC — for setups that already run a LIRC daemon (Linux, LibreELEC, or WinLIRC on Windows), yauiclient can take its remote input from LIRC instead.
- Windows Media Center remotes — handled natively through Windows' own remote/media-key messages, including raw button presses from MCE-style IR receivers.
- USB HID multimedia remotes/keyboards — generic "consumer control" remotes (the kind that show up as a standard multimedia keyboard) are recognized for common buttons like play/pause/stop, volume, and channel up/down.
Long-press support for simple remotes: if your remote only has a directional pad, OK, and a few colour buttons (no dedicated skip/menu buttons), yauiclient adds extra functions to a 600ms long-press:
| Long-press | Action |
|---|---|
| Hold Up | Show the hidden menu bar |
| Hold Left | Skip back (large) |
| Hold Right | Skip forward (large) |
| Hold OK/Enter | Context-dependent action |
| Hold Blue | Toggle panscan (zoom to fill screen) |
Most keys are sent straight through to NextPVR's own keyboard shortcuts so the experience matches using NextPVR's web/desktop UI directly with a keyboard plugged into the server. A smaller set of keys are handled entirely inside yauiclient itself and never reach the NextPVR server at all — these exist for things that only make sense locally, like volume or window management.
| Key | What it does |
|---|---|
| Blue, long-press | Toggle panscan (zoom to fill screen) |
| Alt+F4 | Exit yauiclient |
| F11 or Alt+Enter | Toggle fullscreen / windowed |
| Alt+S | Save the current window position/size/monitor to your profile (see dedicated section below) |
| Alt+H | Show/hide the window's title bar |
On top of the colour-button equivalents above, these plain letter keys are wired directly to the player and only do anything while a video is actually playing. They're handy if you're at a keyboard rather than a remote, and like the colour buttons, they never reach NextPVR:
| Key | What it does |
|---|---|
| B | Volume up |
| V | Volume down |
| M | Mute |
| D | Toggle deinterlacing |
| G | Cycle subtitles |
| Y | Cycle audio track |
| I | Toggle the on-screen video stats overlay |
| A | Cycle aspect ratio |
| P | Toggle panscan (zoom to fill screen) |
D/G/Y/A/P duplicate what the Yellow/Red/Green/Blue/long-press-Blue remote buttons do during playback — they're just keyboard-friendly alternates to the same functions, so use whichever is convenient.
A handful of buttons serve double duty depending on context — sent to NextPVR while you're browsing menus, but handled directly by yauiclient (faster, no round-trip) while video is actually playing:
| Key | While browsing NextPVR | While video is playing |
|---|---|---|
| Red | Sent to NextPVR (Alt+R) | Cycle subtitles |
| Green | Sent to NextPVR (Alt+G) | Cycle audio track |
| Yellow | Sent to NextPVR (Alt+Y) | Toggle deinterlacing |
| Blue | Sent to NextPVR (Alt+B) | Cycle aspect ratio |
| Info | Sent to NextPVR (Ctrl+I, show info) | Toggle the on-screen stats overlay locally |
While the scrub-thumbnail strip is on screen (after pressing Left/Right during playback), Left/Right/Enter/Escape and the skip keys are all captured locally to navigate and select a thumbnail, rather than going to the server; pressing a number key closes the strip and continues on to NextPVR as normal.
Normally UI client uses http for file playback. If yauiclient can access a media file via the filesystem the filesystem wil be used. On localhost this will be automatic. On remote clients if recordings are created with a UNC or have matching drive letters, the file system will also be used. If they client aren't mapped the same, manual mapping is needed by adding a path substitution block to yauiclient.json. Here is an example from Linux to a Windows setup with SMB file sharing.
"pathsubstitution": {
"substitute": [
{
"from": "/media/recordings/",
"to": "K:/"
},
{
"from": "/home/martin/recordings/",
"to": "//172.16.105/recordings/"
}
]
},
All remaining keys — navigation (arrows, Page Up/Down, Home, Escape, Enter), playback transport (Play, Pause, Stop, Record, Rewind, Fast Forward, Skip), channel changing, audio/subtitle selection, teletext, PIP, and the number keys — are sent to NextPVR using the same Ctrl-based shortcuts as NextPVR's own keyboard control scheme, so yauiclient behaves consistently with the rest of the NextPVR ecosystem. For the full list of those shortcuts, see the NextPVR Keyboard Reference.