Screens

Six streaming services, two inputs and some windows on the world.

The home screen is a grid driven by the remote's arrow keys. The left six cells are for watching: Netflix, HBO Max, YouTube, Prime Video, Disney+ and DR TV. The four on the right open Ostromo's own screens. Under them sit the two HDMI inputs, and down the left side a telemetry column shows the clock, the current price per kWh and a small radar.

Every number on these screens is live. Nothing is made up for the look, except the labels that are there to sound like a 1979 spaceship.

The Ostromo home screen at 05:41. A header reads OSTROMO // MA-TH-OR 6200 with local and UTC time. On the left, a telemetry column with the clock, the price 1.90 kr/kWh, the cheapest window 21:00 to 00:00, 6 aircraft, and a round mini radar of Øresund. On the right, a grid of channels: Netflix, HBO Max, YouTube, Comms and Outposts on the first row, Prime, Disney+, DR TV, Teletext and Sentry on the second, then Apple TV on HDMI 1 and PlayStation 5 on HDMI 2. Netflix is selected, and a box at the bottom reads INQUIRY: NETFLIX.
Home. The box at the bottom says what is selected before you press OK.

The look

A picture tube that has been on since 1979.

Everything is drawn into a canvas and then run through a WebGL pass that does what an old monitor did by accident. Bright lines leave a short smear behind them, the phosphor glows a little unevenly, the glass curves at the edges, the colours split slightly at the corners and there are scanlines. I kept turning the bloom down until it was gone. The film screens are sharp and a bit crude, not hazy.

The boot card plots its frame on in a second or so and then types three lines: the current price, the HDMI ports and STAND BY. It reads OSTROMO, which is the Nostromo with a letter missing, and which gave the app its name; it started out as UnterFace. The other names from the films are bent the same way: the ship's computer becomes MA-TH-OR 6200 and the sentry gun an LD 567-C. The typing is one short blip per letter, and apart from the boot, the launch box and the sentry screen the app is silent.

The picture changes with the screen. Live TV, the webcams and the deep-sea video are shown clean in a window with nothing laid over them, because a feed from Mauna Kea run through fake scanlines looks like a mistake rather than a style.

Sentry

The most frivolous screen.

A motion tracker on the left and the readout of a remote sentry gun on the right, modelled on the pair in Aliens. Most of the time nothing is there. The tracker pings, the log says NO MOVEMENT, and you can top up the gun while it is quiet.

Now and then, only while you are watching, contacts show up at the edge of the tracker and start closing in. You have about a minute. Order ammunition, which takes a while to reach the depot. Send a loader out to the gun, which you can only do with the gun on SAFE. Then remember to arm it again. When they come into range it fires in bursts and the rounds count down; when the first magazine runs dry you switch to the second. If one gets through, all you see from where you sit is the feed dying: static, the picture folding into a line, a dot, black.

Not enough rounds. This run was sped up for the video; a real one takes a couple of minutes.

Limits

What LG does not let it do.

It is a guest on the TV

Ostromo is installed with LG's developer mode, not from the app store, and apps installed that way are kept away from most of the system. When you quit Netflix the TV goes back to LG's own home screen, not to Ostromo. I tried having Ostromo's background service notice that and bring itself back; the TV refuses to tell a developer app which app is in front. The way back is a long press on a number key, which webOS lets you assign to any app, or the optional watcher in the release: running on a computer that stays on, it connects the way LG's phone app does, which is allowed to see what is on screen, and switches back to Ostromo when LG's home appears.

The same wall means it cannot read the list of installed apps, so each tile has to know its app's ID in advance.

Under the hood

A web page and a small Node service, both on the TV.

webOS apps can be web pages, and this one is: plain JavaScript with no framework, drawing into a 2D canvas, with the CRT pass in WebGL. Most of the data sources do not answer a browser directly, so a Node service installed alongside the app fetches flights, prices, webcam stills and teletext pages and hands them over the TV's internal message bus.

The first version ran at 13 frames a second on the TV. Measuring on the set rather than guessing found the culprits: drawing letter spacing one character at a time, working out the day's price summary on every frame, and redrawing a full screen of text that changes once a second. With those fixed and the canvas drawn at half resolution it runs at about fifty.

Built with

webOS Canvas 2D WebGL2 Node Web Audio Vanilla JS Claude Code

Status

Version 0.9.2, a beta you can install.

Ostromo isn't in LG's app store. You install it with LG's free Developer Mode, which any LG webOS TV has, and a computer on the same Wi-Fi. The install guide walks through it, either by hand or by pasting a prompt into Claude Code and letting it do the setup. On first start it opens in SETUP for your own apps and inputs.

Developer Mode sessions run out after a while, so open LG's Developer Mode app now and then to extend yours. Pressing Home still goes to LG's own home screen; an optional watcher in the release, running on a computer that stays on, sends it back. Making Ostromo the TV's home screen for good would mean rooting the TV, which is up to you and not something I support.

It's tested on one TV, mine. If it misbehaves on yours, open an issue on GitHub and say which model. The code, the guide and new versions are in the repository on GitHub, under the MIT licence: it's shared as I made it for myself, so expect to tweak it. To hear about new versions, watch it, choose Custom and tick Releases.

The look owes everything to the screens in Alien (1979), Aliens (1986) and WarGames (1983). Ostromo is a fan's homage and has nothing to do with the people who made them.