Kino: a Stremio client I can keep extending

My own Stremio client with an interface built for a TV remote, native playback, and features I've always wanted, starting with skip intro.

published

length2 min read

The official Stremio apps work fine, and I still use them. But whenever I wanted them to do something they didn't do, I got stuck. I wanted intros to skip automatically. I wanted an interface that actually works well with a TV remote. I wanted playback to behave the way I watch things. You can't add any of that from outside the app. So I built Kino, a Stremio client I own, and now I can add whatever I want.

Same core, new interface

Kino runs on the actual Stremio Core, the same library the official apps use. So add-ons, catalogs, your library, and watch progress all work the same as they do everywhere else. Everything you see on screen is new, though.

On macOS it's a native Qt app. The screens are built with web tech, but playback is handled by libmpv with VideoToolbox hardware decoding. Media keys and Now Playing work, and the screen only stays awake while a video is playing. Subtitles, whether they're embedded or come from an add-on, have controls for delay, size, and position.

On the TV it's a native Kotlin and Compose app running on an NVIDIA Shield, so moving around with the remote works the way it should. Near the end of an episode it shows Up Next, and it waits until your progress is saved before it loads sources for the next episode.

Keeping Core updates from breaking things

Everything that comes out of the Core goes through a validating adapter before any screen sees it, so the screens only get navigation requests and playback fields. Those adapters are tested against a pinned version of the Core using committed fixtures. If a Core update changes the shape of the data, a test fails on my machine instead of a screen breaking on the TV.

Skip intro

This is the feature that started the whole thing. Kino finds intro markers, either embedded in the file or from the community, shows them on the timeline, and skips them when you press a button or automatically, with an undo. I'd wanted this in a Stremio client for years, and I couldn't add it to one that wasn't mine.

Development started on macOS. Android TV is next, then Windows and Linux. For now, the macOS build is ad-hoc signed and only runs on Apple silicon.