Het startscherm van een moderne tv is eigenlijk een etalage. Er is ruimte voor aanbevolen apps, gesponsorde tegels en een rij met "populair nu", en ergens daartussen staan de drie dingen die je echt gebruikt. Mijn LG OLED is daarin geen uitzondering.
Omdat de tv al geroot was, kon ik verder kijken dan de instellingen. De vraag werd: kan ik dat hele startscherm vervangen door iets van mezelf? Het antwoord bleek ja, en het werd een van de leukste projecten van de afgelopen tijd.
Niet zo technisch? Klik hier voor de simpele uitleg
Dit is de korte versie in gewone taal.
1. Een eigen app als startscherm
Ik heb een app gemaakt die er uitziet als een rustig startscherm. Als de tv aangaat, verschijnt die app in plaats van het menu van LG.
2. Alles wat ik thuis al heb, komt samen
Series die ik half heb gekeken, films uit mijn eigen verzameling, radio, teletekst en of de zonnepanelen de tv op dat moment gratis laten draaien: het staat allemaal op één scherm.
3. De telefoon als afstandsbediening
Met een QR-code koppel je je telefoon. Dan kun je typen, apps openen, een foto op de tv zetten of een slaaptimer instellen.
TL;DR: Mijn startscherm is een webapp voor webOS 5 die draait als gewone tv-app. Een klein script op de tv opent hem bij het aanzetten, en de Home-knop van de afstandsbediening is omgezet naar deze app. Hij haalt Verder kijken en filmtips uit Plex, vraagt films aan via Seerr, speelt officiële livestreams van tv en radio en toont NOS Teletekst. Een kleine server op de tv maakt van de telefoon een afstandsbediening met prikbord, schermtijd en slaaptimer. Alles is gebouwd samen met Claude, in een paar intensieve sessies.
Waarom een eigen startscherm
Ik gebruik de tv voor een handvol dingen: Plex, YouTube, NPO, af en toe de Switch of de Xbox, en sinds kort weer radio. Reclame kreeg ik eerlijk gezegd niet eens te zien; die vangt AdGuard in mijn netwerk al af. Maar puur de mogelijkheid stoorde me. Het LG-menu is gebouwd om mij dingen te laten zien die ik niet zocht, en dat is precies het gevoel dat ik niet wil hebben als ik op de bank ga zitten.
Wat ik wilde, was eigenlijk heel simpel: een rustig scherm met de tijd, wat ik aan het kijken ben en mijn apps. Strak, modern, een beetje in de stijl van Apple. En omdat ik thuis al Plex, Seerr en Home Assistant draai, lag het voor de hand om die er ook in te verwerken.
Hoe het op de tv draait
De tv is een LG OLED uit 2020 met webOS 5. Door de root kan ik via SSH bij het systeem en apps installeren die niet uit de LG-winkel komen. De firmware zelf heb ik niet aangeraakt; alles staat in de mappen die daar voor bedoeld zijn en is weer te verwijderen.
Het startscherm is een webapp: HTML, CSS en JavaScript, verpakt als installatiepakket voor webOS. Dat klinkt simpel, maar de browser in deze tv is een Chromium uit 2018. Veel moderne CSS werkt daar niet, en de processor is niet bepaald snel. De eerste versie haperde zichtbaar zodra er iets bewoog. Uiteindelijk animeert alles alleen nog met transform en opacity, zonder live vervaging of schaduwen die meebewegen. Toen liep het soepel.
Om de app ook echt het startscherm te maken, zijn er twee dingen nodig:
| Onderdeel | Wat het doet |
|---|---|
| Opstartscript | Opent de app bij het aanzetten van de tv, behalve als een console de tv zelf heeft aangezet |
| LG Input Hook | Zet de Home-knop om naar mijn app; de nutteloze Netflix-knop opent nu het oude LG-menu |
Dat opstartscript was lastiger dan het klinkt. De tv gaat bij het aanzetten terug naar de laatste ingang. Was dat de Switch, dan bleef je op een zwart HDMI-scherm hangen. Het script kijkt nu of het apparaat op die ingang echt aan staat. Zo niet, dan verschijnt het startscherm. Zet de Switch de tv zelf aan, dan blijft hij gewoon op de Switch staan.
Wat er op het scherm staat
Bovenaan staan de klok, de datum en een groet. Daaronder komt de rij Verder kijken, rechtstreeks uit Plex. Eén klik op een kaart start de aflevering meteen in de Plex-app, zonder eerst door menu's te moeten. Dat laatste was nog een puzzel: de Plex-app negeerde de opdracht als hij al openstond, dus Home sluit hem eerst netjes af.
De achtergrond kan een kleurverloop zijn, een natuurfoto of een bioscoopmodus met beelden uit mijn eigen filmbibliotheek. Rechtsboven staat dan een filmtip die je direct kunt starten. Er zit een kindfilter op: overdag geen horror of films voor 16+, 's avonds na zessen mag alles.
Onder het dock staan de HDMI-apparaten met hun eigen naam (dus "Nintendo Switch 2" in plaats van "HDMI 1"), een AirPlay-knop en het tandwiel voor de instellingen. Verder zit er onder andere in:
- Live: officiële, gratis streams van Nederlandse, regionale en internationale zenders, en zo'n 36 radiozenders. Bij een paar zenders kun je de studiocamera aanzetten.
- Aanvragen: zoeken en films of series aanvragen via Seerr, met tabbladen als Populair, Binnenkort en Familie. Het tabblad Voor jou kijkt naar wat ik onlangs in Plex keek en zoekt daar vergelijkbare titels bij.
- Energie: een klein "gratis" in beeld als de zonnepanelen en de thuisaccu het verbruik dekken. Bewust niet meer dan dat; ik hoef niet te weten wat het hele huis op dat moment verbruikt.
- Teletekst: gewoon NOS Teletekst, ook via de TEXT-knop van de afstandsbediening.
Teletekst is een mooi voorbeeld van hoe zo'n project gaat. De NOS levert de pagina's netjes als data, maar de bekende blokjesgrafiek bestaat uit speciale tekens die de tv simpelweg niet kan tonen. De eerste versie was een scherm vol lege vakjes. Nu tekent de app elk blokje zelf met CSS, in een vast raster van 40 bij 25 tekens. Het ziet er weer uit zoals teletekst er hoort uit te zien.
De telefoon als tweede scherm
Op de tv draait ook een kleine Node.js-server. Scan je de QR-code in de instellingen, dan wordt je telefoon een afstandsbediening: vegen om te navigeren, tikken voor OK en volume regelen. Zodra er op de tv een tekstveld openstaat, trilt de telefoon en kun je gewoon typen. Wie ooit een wachtwoord met de pijltjestoetsen heeft ingevoerd, snapt waarom dat fijn is.
Daar kwam van alles bij. Met TV-momenten zet je in één tik een screenshot van de tv op de NAS. Via het prikbord zet je een berichtje of foto op het startscherm ("ben om 18:00 thuis"), en vanaf de iPhone kun je een foto, link of YouTube-filmpje direct naar de tv delen. Onder Tijd staan schermtijd voor kinder-tv en games, en een slaaptimer die het volume de laatste minuten langzaam laat zakken voordat de tv uitgaat. En Jouw jaar in Plex maakt van een jaar kijken een kort verhaal, in de stijl van Spotify Wrapped.
Wat niet lukte
Het project begon eigenlijk ergens anders. Ik wilde dat mijn lampen meekleuren met het beeld, via HyperHDR en Home Assistant. Het lukte om het beeld af te tappen en kleuren naar de lampen te sturen, maar de Zigbee-lampen kregen elke paar milliseconden een nieuwe opdracht. Het resultaat was een flikkerende woonkamer. Na een avond bijstellen heb ik de lampen eruit gehaald; ik werd er gek van. Dat probeer ik later opnieuw, met minder updates per seconde.
Ook niet alles wat technisch kan, heb ik gedaan. Ik heb bijvoorbeeld bewust alleen officiële, gratis streams gebruikt, ook al was er genoeg te vinden in de grijze hoek. En de tuner gebruik ik niet, dus die zit niet in het startscherm.
Bouwen met AI
Dit hele project heb ik samen met Claude gebouwd, in een paar lange sessies. Ik bracht de wensen, de smaak en vooral veel feedback: "dit hapert", "die kalender is dubbel", "de iconen zijn niet in balans", "het menu oogt rommelig". Claude schreef de code, installeerde nieuwe versies op de tv en maakte zelf screenshots van het scherm om te controleren of het klopte.
Wat me opviel, is hoeveel er in kleine dingen zit. Een tegel die over een menu heen bleef hangen, een toetsenbord dat ongevraagd openklapte, een groene schakelaar die net niet bij de rest paste. Geen enkele daarvan is moeilijk, maar samen bepalen ze of iets voelt als een product of als een experiment. Dat bijschaven, en het steeds terugkijken op de echte tv, maakte het verschil.
Het mooiste vind ik misschien wel dat de tv nu gewoon van mij voelt. Ik zet hem aan, zie wat ik aan het kijken was en kies. Geen etalage meer.
Vragen over de opzet, de root of hoe je zoiets zelf aanpakt? Laat het me weten via het contactformulier.