Open-source project
MoonTechLab/Selene-TV avatar
MoonTechLab/Selene-TV

Selene-TV brings the MoonTV experience to Android TV with a remote-first redesign

以 MoonTV v100 版本 / Helios 为后端的 Android TV 客户端,针对遥控器设备优化

835 stars118 forksUnknownLicense varies

At a glance

What is it?
A Kotlin and Compose for TV client for MoonTV and Helios backends, with dual ExoPlayer and mpv playback, aggregated danmaku, and a phone QR remote built in.
Who is it for?
Selene-TV is a focused piece of work: a Leanback client that treats the D-pad as the only input that matters, pairs two playback engines so weak sources have a fallback, aggregates danmaku from six platforms through an OpenGL renderer, and turns your phone into a remote over local HTTP. The disclaimers are clear about where responsibility sits.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 91 days ago.
What is it written in?
GitHub does not report a main language for this repository.

Answers come from the project's GitHub data, last synced on September 21, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Selene-TV is

Selene-TV is an Android TV (Leanback) client built by MoonTechLab for its MoonTV and Helios backend services. The description it gives itself is precise: it keeps the original experience intact while restructuring the interface for large screens and remote control operation. It connects to a MoonTV or Helios backend you already run, and also supports a lighter local usage mode for people who do not want the full backend setup.

The stack is modern Android: Kotlin 2.2, Jetpack Compose for TV with Material3, ExoPlayer from Media3 paired with mpv as a second playback kernel, and an embedded Ktor server that powers the phone remote feature. Minimum requirement is Android 6.0 (API 23), with targetSdk 36. There is no touch or mouse support at all; the app is D-pad only, which is a deliberate scope decision rather than an omission.

Designed around a remote control

TV apps fail most often on navigation, and this is where Selene-TV puts its effort. The README lists D-pad native navigation as a core feature: focus is clear, scrolling is smooth, and nothing assumes you can tap or hover. The design baseline is 1080p with dp sizes applied consistently, and it auto-adapts to 4K panels.

The visual language is a dark, content-first layout with glassmorphism and soft focus animations. The detail page is the centerpiece: an Apple TV-style fullscreen hero that pulls stills and logos from TMDB, with automatic fallback when artwork is missing. Playback extras include one-tap skip for intro and outro segments (covering mostly Western series and anime), playback speed from 0.5x to 2.0x, and aspect ratio switching.

The dual player kernel

Selene-TV ships two playback engines and lets them cover each other. ExoPlayer from Media3 handles HLS and MP4 natively with adaptive bitrate, while mpv is available as an alternative kernel for difficult sources. The README describes the pairing bluntly: automatic format detection, and tricky sources that would stutter on one engine can play smoothly on the other. Switching is on demand, per playback session.

Release notes show this path is actively maintained. Version 1.4.5 moved mpv hardware decoding from a copy-back mode to passthrough (zero copy) with automatic fallback on unsupported devices. Version 1.4.6 deepened the forward buffer for live streams and enabled automatic reconnection after stream breaks, aimed at long 4K live playback sessions. That is the kind of unglamorous work that decides whether a TV app stays installed.

Danmaku, aggregated

The danmaku system is one of the differentiating features. The app automatically matches the current episode and aggregates comments from bilibili, Tencent Video, iQiyi, Youku, Mango TV, and LeTV, then selects the source with the most comments by default. Rendering goes through akdanmaku, an OpenGL-based engine, which matters because overlaying thousands of comments on a 4K stream is exactly where naive Android view hierarchies fall apart.

Inside the player you can switch danmaku sources, and adjust display area, opacity, speed, font size, and density. Three modes cover most preferences: off, manual, and automatic. Alongside danmaku, the app aggregates metadata from Douban, Bangumi, and TMDB for covers, ratings, stills, and sequel information, with a two-layer memory plus disk cache for Douban data and images.

Your phone becomes the remote

Typing a search query with arrow buttons is misery, so Selene-TV embeds a Ktor (Netty) HTTP server and generates a QR code you scan with your phone. After scanning, the phone acts as both remote control and input method for the TV. The qrcode-kotlin library generates the code, and the whole loop runs locally on your network.

The rest of the feature set follows the same practical streak: multi-source aggregated search for locating content quickly, a speed-test mode that concurrently tests each playback source and re-ranks by quality plus latency, categories for movies, series, anime, variety, and live TV, a Bangumi-style weekly anime schedule, continue-watching with resume points, and long-press card management for favorites. Live channels are grouped into CCTV, satellite, regional, and sports categories.

Installing and updating

Distribution is via GitHub Releases as architecture-specific APKs. The arm64-v8a build covers mainstream Android TV devices and boxes; the armeabi-v7a build exists for older 32-bit hardware. When unsure, the README says to prefer arm64-v8a. You can install with adb install or sideload through a file manager.

Updates are handled in-app: the app checks for new versions at startup and downloads and installs them without leaving the app. Two networking details are worth noting for self-hosters. OkHttp is configured to trust self-signed certificates, and the app tolerates plain HTTP, both common in self-hosted backend setups. Coil handles image loading and caching, including handling for Douban anti-hotlinking, and the README documents that configuration lives in the settings screen alongside data source options and cache clearing.

The fine print

The README carries a five-point disclaimer that deserves to be quoted rather than summarized. The project is for learning and communication only and offers no commercial service. Content comes from third-party platforms and the developers take no responsibility for its legality, accuracy, completeness, or availability. Copyright in all video content belongs to its original owners and users are asked to support official releases. Users bear any direct or indirect losses from using the app, and local laws apply.

Read those terms as a user agreement written by people who know exactly what gray zone aggregation clients occupy. If you run Selene-TV against your own MoonTV or Helios backend with sources you are entitled to use, the disclaimer is a formality. If you point it at anything else, the responsibility lands entirely on you, which is precisely what the document says.

Editorial conclusion

Selene-TV is a focused piece of work: a Leanback client that treats the D-pad as the only input that matters, pairs two playback engines so weak sources have a fallback, aggregates danmaku from six platforms through an OpenGL renderer, and turns your phone into a remote over local HTTP. The disclaimers are clear about where responsibility sits. For anyone already running a MoonTV or Helios backend who wants it on the big screen, it is the client that project was missing.

Frequently asked questions

Does Selene-TV work without a MoonTV or Helios backend?

It is designed as a client for MoonTV or Helios backends, but the README notes it also supports a lightweight local usage mode. For the full experience, including login, aggregated sources, and continue-watching sync, you point it at a backend address and sign in on first launch.

Which APK should I download for my TV box?

Prefer the arm64-v8a APK; it covers mainstream Android TV devices and boxes. The armeabi-v7a build is for older 32-bit ARM hardware. If you are unsure, arm64-v8a is the safe default, and the app requires Android 6.0 or newer.

How does the phone remote feature work?

The app embeds a Ktor HTTP server on the TV and shows a QR code in settings. Scanning it with your phone turns the phone into a remote control and input method, which is how most people handle search on a D-pad-only interface. Everything runs on your local network.

Official sources

  1. Issues
  2. MoonTechLab/Selene-TV on GitHub
  3. README
  4. Releases
Community notes

Community notes