v0.4.1
v0.4.1 — the buttons answer
This release is for the presses that went nowhere. Four transport keys on the remote were bound to numbers this television does not send, so Fast-forward and Rewind did nothing at all. Every control but a card activated on the key-down with no sign it had been pressed. And any sung line of subtitle drew its music note as an empty box. None of the three was visible from inside the code; all three were found by looking at a television.
What's new
- The remote's transport keys work. Fast-forward and Rewind seek, Play/Pause toggles, Exit closes the app. None of them did anything before, and the reason is worth stating because it is the kind of mistake that hides for a year: they were bound to the wrong numbering system. LG's televisions report two different sets of key codes — the web keyCodes a browser app sees, and the native scancodes a native app sees — and four of this app's constants had been taken from the first while everything that actually worked came from the second.
- Every control answers a press. The dip-and-ring the design system specifies — the control sinks under your thumb, rings as you release, and acts a beat later so the ring is on screen — was implemented and reachable from exactly one place, so every other button acted on the key-down with no feedback at all. Seven rows have it now: the Home and detail hero rows, the player's transport row, the Info card's actions, the exit alert's two answers, the profiles footer and the onboarding pill — on the pointer as well as the keyboard. The detail page's season strip gained the control face it was specified to have. One consequence worth knowing: the exit alert no longer quits on the key-down, so the sheet stays up through the whole animation, which is right for the one press in the app that ends the process.
- The player says what the transport is doing. A small mark beside the elapsed clock: a pause bar while paused, a rewind or fast-forward mark while you are travelling, and a play mark for about two seconds after you resume. Nothing at all while it is simply playing — it reports state, it is not a row of buttons — and the direction is read from where the playhead is going rather than from which key you pressed, so a chapter jump gets it too.
- The television confirms Dolby Vision. v0.4.0 declared it for the first time and deliberately would not claim the set acted on it. It acts on it: on the 2019 set, a Profile 5 film moves the panel into its Dolby Vision picture mode and a Profile 8 film does the same, while a Profile 7 film — the dual-layer kind this pipeline cannot feed — is refused for direct play and the panel lands on HDR10 instead, which is exactly what refusing it is supposed to produce. Three files, three states the television reports for itself. This is one television; whether yours does the same is worth telling us.
Fixed
- A sung line of subtitle showed two empty boxes instead of music notes. Neither the shipped font nor any font on the television contains the music-note characters subtitle files use to mark singing, so every song lyric in every library rendered them as the "missing glyph" box. The four characters are now drawn into the font the app ships.
- The splash screen was very nearly black, which is what a television looks like when it has not started. Its black point is lifted to the app's own background colour, so it also stops stepping brighter the moment the interface appears.
- The app declared it needed 60 MB and peaks at about 150. webOS substitutes 120 MB when an app declares nothing, so the old figure asked the television for less room than saying nothing would have. It declares 160 now.
Compatibility
- Plays video, verified by watching it — 2019 LG sets. One television: an LG 49SM9000PLA, which reports platform release 4.10.2 (LG markets this generation as webOS 4.5). A 21-case suite runs on that set against a live Plex Media Server before every release.
- Plays video, reported by someone else — one 2021 set. mariotaku of webosbrew ran v0.2.1 on an LG 65UP7560AUD (platform release 6.5.2) on 2026-08-11 and got a picture: issue #22. Six of eight attempts played. That is one firmware, one set, one report, and it remains the only time video has been seen on anything but the developer's own television.
- Starts, and nothing further is known — every other firmware from webOS 4.0 up. The loader resolves this binary's libraries and symbols cleanly against all nine firmware images webosbrew has at 4.0 or newer, webOS 4.4.2 through 11.2.0. That grades startup and says nothing at all about whether video plays.
- Does not start — webOS 3.9.2 and older. Symbols the app needs are missing there, so the process is killed before anything appears.
If your set is in the middle two groups, tell us what happened. It working is as useful a report as it failing.
Help test this release
If your remote has Fast-forward, Rewind or Play/Pause keys, tell us whether they work. This release binds them for the first time, to codes read out of the television's own key table rather than guessed — but LG's documentation says the Magic Remote has no transport keys at all, so the only remotes that can answer are the ones this project does not own. Press them during playback and say what happened. Open an issue. It working is as useful a report as it failing.
If a friend has shared a library with you, try it. Unchanged from v0.4.0 and still true: a share reached at a public address, one that requires an encrypted connection, one behind Plex's relay, and an account with several shares at once are all paths nobody here can reproduce.
Known issues
- Text outside the Latin, Greek and Cyrillic ranges the shipped font covers — Chinese, Japanese, Korean, Arabic, Hebrew, Thai — draws as empty boxes, in titles and subtitles alike. The music notes fixed in this release were one instance of this; the general case needs a second font and is not done.
- Plex Relay, servers that require secure connections, and servers reached by hostname or IPv6 — the app speaks plain HTTP to a numeric address and has no name resolver, so none of those can be dialled at all.
- The app still asserts 10-bit decoding without asking, because the television's codec table has no column for bit depth. Codec and resolution are read from the set; this one claim is not.
- Dolby Vision Profile 7's enhancement layer cannot be fed by this pipeline and is refused; those files play as HDR10. Whether a television other than the 2019 set tested here enters its Dolby Vision mode on this app's declaration is unconfirmed.
- On webOS 5 and newer, seeking reloads the stream instead of moving within it. It works and it is slower, and nobody has yet watched it happen on hardware.
Installing
Download com.beb.plxnative_0.4.1_arm.ipk and install it with the Homebrew Channel or dev-manager-desktop. You do not need a rooted TV.
Nothing in this distribution chain is signed, so this sha256 is what tells you the file you have is the file published here:
4eef7d9fbb29e3b31b8180df0df5f07a92eb3c788fda93226681b70eddc79ad0 com.beb.plxnative_0.4.1_arm.ipk
Installing and checking a download covers the other assets, how to check the hash on each platform, and the Developer Mode expiry that uninstalls your apps. This package bundles FFmpeg under LGPL-2.1-or-later and its complete corresponding source is attached to this release. Exactly what was built, verified and shipped is in the technical audit for v0.4.1.