claude-news
newsHacker News·23 Oct 2026·animalhot

Show HN: Making a smart TV dumb and then smart

Rebuilding a webOS smart TV with a local home screen.

Depth 2/5Score 2.17

Extract

Demo: https://anubhavmalhotra.com/vibing/r2d2-webos/r2d2-demo.mp4 Read the story behind the project: R2D2 for webOS. A local home screen, private remote browser, and push-to-talk voice assistant for webOS TVs. A Linux compute host runs Chromium and the voice models; the TV provides the display, applications, and remote control. Disclaimer WarningThe TV components run as root and modify vendor system services on one specific firmware build. This is unsupported, may void your warranty, and can leave the TV unusable until a reboot or a factory reset. Use it at your own risk. The keyfilter patch, Home/idle routing, and native voice capture replace or hook vendor services. A mistake can disable the remote, Home, or voice until the TV is restored. Firmware SHA-256 pins, code offsets, symbol names, and patch anchors target one reference build. Re-derive them for your own firmware; never force a mismatched pin. The software is provided as is, without warranty; see LICENSE.md. This is an independent project. It is not affiliated with, endorsed by, or sponsored by LG Electronics, Lucasfilm Ltd., The Walt Disney Company, or any streaming service. Product and character names are trademarks of their respective owners. Status Reference deployment on one TV/firmware: Home, the browser, and remote voice commands work end to end there. Other TV, firmware, remote, and host combinations are unvalidated. This repository provides source and offline tests, not a universal root, firmware, or host installer. How it fits together Compute host (spark/ in paths): an aarch64 Linux machine. It renders a sandboxed Chromium session in a private display and audio session and streams it to the TV over the LAN. It also runs the local speech recognition and intent models and a closed command registry. TV (tv/, voice/tv/): the Home application and the browser viewer, which sends remote input back to the host. A root capture owner takes the remote's voice key and sends bounded audio to the host over mutual TLS. Content protection (protection/): pinned filter rules loaded into each disposable browser profile. Model inference stays on the host. Requested websites, searches, streaming apps, and optional weather still contact their providers; see SECURITY.md. Requirements Build machine: Python 3.10+ and Node.js 20+. Compute host: aarch64 Linux with a non-root service account (UID 1000); the Chromium snap with its sandbox enabled; Xvfb for a private X display; PipeWire, WirePlumber, and the …