R2D2 voor webOS

R2D2 biedt een lokaal startscherm, een private remote-browser en een push-to-talk spraakassistent voor webOS-televisies. Een Linux-compute-host draait Chromium en de spraakmodellen; de televisie dient als display, draait de applicaties en verzorgt de afstandsbediening.

Disclaimer

Waarschuwing

De tv-componenten draaien als root en wijzigen vendor-systeemservices op één specifieke firmwarebuild. Dit wordt niet ondersteund, kan uw garantie ongeldig maken en kan ervoor zorgen dat de tv onbruikbaar is tot er een herstart of fabrieksreset wordt uitgevoerd. Gebruik dit op eigen risico.

De keyfilter-patch, Home/idle-routing en native spraakvastlegging vervangen of koppelen vendor-services. Een fout kan de afstandsbediening, de Home-functie of de spraakfunctie uitschakelen totdat de tv is hersteld.

Firmware SHA-256 pins, code-offsets, symboolnamen en patch-ankers zijn gericht op één referentiebuild. Leid deze zelf af voor uw eigen firmware; forceer nooit een niet-overeenkomstige pin.

De software wordt geleverd "as is", zonder garantie; zie LICENSE.md.

Dit is een onafhankelijk project. Het is niet gelieerd aan, onderschreven door of gesponsord door LG Electronics, Lucasfilm Ltd., The Walt Disney Company of enige streamingdienst. Product- en karakternamen zijn handelsmerken van hun respectievelijke eigenaren.

Status

Er is een referentie-implementatie op één tv/firmware waarbij Home, de browser en remote-spraakcommando's volledig werken. Andere combinaties van tv's, firmware, afstandsbedieningen en hosts zijn niet gevalideerd. Deze repository biedt broncode en offline tests, geen universele root-, firmware- of host-installer.

Architectuur: Hoe het samenwerkt

  • Compute-host (spark/ in paden): Een aarch64 Linux-machine. Deze rendert een gesandboxte Chromium-sessie in een private display- en audiosessie en streamt deze via het LAN naar de tv. Daarnaast draait het de lokale spraakherkenning, intentiemodellen en een gesloten opdrachtregister.
  • TV (tv/, voice/tv/): De Home-applicatie en de browser-viewer, die input van de afstandsbediening terugstuurt naar de host. Een root-capture-eigenaar onderschept de spraaktoets van de afstandsbediening en stuurt begrensd audio naar de host via mutual TLS.
  • Contentbescherming (protection/): Vastgelegde filterregels die in elk wegwerpbaar browserprofiel worden geladen.

Model-inferentie vindt uitsluitend plaats op de host. Opgevraagde websites, zoekopdrachten, streaming-apps en optionele weersinformatie maken nog steeds contact met hun respectievelijke providers; zie SECURITY.md.

Vereisten

  • Build-machine: Python 3.10+ en Node.js 20+.
  • Compute-host:
  • aarch64 Linux met een non-root service-account (UID 1000).
  • Chromium snap met ingeschakelde sandbox.
  • Xvfb voor een private X-display.
  • PipeWire, WirePlumber en GStreamer-plugins voor het WebRTC-pad.
  • FFmpeg met hardware HEVC-codering voor de MSE- en AirPlay-paden.
  • Een CUDA-compatibele GPU en Python 3.12 voor de vastgelegde lokale modellen (ongeveer 10 GB aan weights).
  • TV: Een webOS-tv met systeemtoegang (root) en een geautoriseerde methode om pakketten te installeren. Native capture vereist daarnaast een toolchain en headers die exact overeenkomen met de firmwarebuild.
  • Netwerk: De tv en host moeten zich op hetzelfde LAN bevinden. Let op: een nominale linksnelheid garandeert geen afspeelkwaliteit; meet ook de doorvoer en jitter.

Lokaal bouwen

  1. Kopieer de configuratie:

``bash cp config/example.json config.local.json `` Bewerk dit genegeerde bestand voor uw eigen apparaten.

  1. Start het bouwproces:

``bash python3 tools/build.py --config config.local.json --output dist/local --include-tests `` De output bevat een onondertekend Home-pakket, gerenderde host-services, TV-service-bronnen en een bestandsmanifest. Het bouwen installeert geen software en maakt geen contact met een apparaat. De output-directory moet nieuw zijn.

  1. Om de browser-shortcut in te schakelen, maakt u een private capability-key aan en voegt u deze toe aan de build:

``bash umask 077 python3 -c 'import secrets; print(secrets.token_hex(32), end="")' > browser.local.key python3 tools/build.py --config config.local.json --browser-key-file browser.local.key --output dist/local-browser --include-tests ``

Opmerkingen:

  • Merklogo's worden niet meegeleverd. Home toont teksttegels, tenzij u --home-logos-file gebruikt met een private JSON-object dat app-ID's koppelt aan data:URI-logo's waar u recht op heeft. Houd dit bestand en builds die hiermee zijn gemaakt privé.
  • Houd de gerenderde output privé: deze bevat implementatie-adressen en mogelijk de browser-capability.

Testen

Voer de volgende tests uit:

python3 -B -m unittest discover -s tests
node tests/test_protection_proof.js
node tests/test_home_core.js
python3 tools/privacy_check.py

Voor UI-tests wordt Playwright's Chromium gebruikt:

npm ci --ignore-scripts
npx --no-install playwright install chromium
npm run test:home
npm run test:browser

De volledige offline controles staan in de CI-workflow. Offline controles garanderen geen fysieke videocadans, microfoonkwaliteit of compatibiliteit met andere firmwarebuilds.

De host implementeren

Stel een volledige gerenderde spark/ tree op als een versiebeheerde directory die eigendom is van het service-account. Voer vervolgens de preflight-check uit voordat de session manager wordt ingeschakeld:

python3 -B "$RENDERED_SPARK/runtime/trial.py" --run --preflight-only

Hierbij verwijst $RENDERED_SPARK naar de opgestelde directory.

De preflight-check controleert de sandbox, display/audio, contentbescherming, DNS en cleanup. Het installeert geen pakketten en verifieert geen tv-weergave. Er is geen algemene host-installer; de installatie van afhankelijkheden en service-supervisie is onderdeel van het host-beheer.

De runtime bewaart de capability-key en optionele spraakconfiguratie onder $HOME/.local/share/baaz-browser/ (de naam baaz-browser is een legacy-naam voor compatibiliteit). Houd deze bestanden op mode 0600 in private directories. Voor resident voice zijn daarnaast vastgelegde model-snapshots, TLS-credentials en lokaal gekoppelde tv-besturing nodig.

Installatie op de TV

  1. Installeer het Home-pakket via uw webOS-pakketworkflow en test dit eerst als een gewone applicatie.
  2. Het wijzigen van Home- en idle-routes is een aparte stap: de offline Home-planner produceert kandidaten en rollback-payloads op basis van de vastgelegde status van uw firmware.
  3. Spraakvastlegging volgt het local-capture activation contract. De publieke builder verkrijgt geen toegang tot het apparaat, patched geen systeembestanden en activeert geen services.

Bewaar originele bestanden en een herstelpad buiten elk proces dat door een UI-herstart wordt beëindigd. Controleer vervolgens de afstandsbedieningen, bestaande apps, browser-weergave, opeenvolgende spraaktoets-indrukken, standby/resume en het opnieuw inschakelen van de stroom.

Bronmap (Source Map)

PadDoel
tv/home/Templates voor de Home-applicatie
tv/integration/Offline Home- en idle-return-planner
spark/Browser, mediatransport en session manager
voice/TV-capture, lokale modellen en gevalideerde commando-uitvoering
protection/Content-blocking regels en reproduceerbare extensie-builder
tools/Private build-, pakket- en privacy-tools

Houd apparaatconfiguraties, sleutels, firmware-images en runtime-data buiten versiebeheer. Beveiligingsgrenzen en rapportage zijn beschreven in SECURITY.md.

Licentie

De projectcode is MIT-gelicenseerd (LICENSE.md). De browser-extensie, filter-tooling en data, en twee runtime-adapters zijn GPL-3.0-of-later; THIRDPARTYNOTICES.md bevat een lijst van deze componenten en de upstream-toeschrijvingen.