explaingit

moontechlab/lunatv

8,578TypeScriptAudience · generalComplexity · 3/5LicenseSetup · moderate

TLDR

A self-hosted web app you run on your own server that searches across multiple video streaming APIs at once and plays them back in a single interface. No subscription required, you bring your own video source URLs.

Mindmap

mindmap
  root((repo))
    What It Does
      Aggregates video APIs
      Plays back streams
      Tracks watch history
      Skips embedded ads
    Tech Stack
      Next.js 14
      TypeScript
      Docker
      HLS.js
    Setup
      Docker Compose
      Zeabur one-click
      Redis or Kvrocks
    Audience
      Home streamers
      Self-hosters
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Set up a personal video dashboard that searches multiple video APIs without switching between streaming sites

USE CASE 2

Deploy a shared household streaming hub that syncs watch history and continue-watching across devices

USE CASE 3

Run a self-hosted interface that attempts to automatically skip ads embedded in video streams

USE CASE 4

Install it as a home-screen PWA on mobile for a Netflix-like experience using your own API sources

Tech stack

TypeScriptNext.jsTailwind CSSDockerHLS.jsArtPlayerRedis

Getting it running

Difficulty · moderate Time to first run · 30min

Requires Docker and a storage backend (Redis, Kvrocks, or Upstash), video source APIs must be supplied manually after deploy.

Free to use and share for non-commercial purposes only, any derivative works must credit the author and carry the same license.

In plain English

MoonTV (also called LunaTV in the repository) is a self-hosted video streaming aggregator you can run on your own server. It is built with Next.js 14, TypeScript, and Tailwind CSS, and deployed via Docker. The idea is to give you a single interface that searches across multiple third-party video source APIs at once and plays back what they return, rather than relying on any one streaming service. After you deploy it, the application starts as an empty shell. It has no built-in video sources. You supply those yourself by writing a JSON configuration file in the admin panel that lists the APIs of video sites you want to aggregate. The app uses a standard format called Apple CMS V10, which many Chinese video indexing sites support, so compatible source URLs can be added in the config. You can also define custom content categories and set how long API responses are cached. Playback uses ArtPlayer combined with HLS.js for adaptive streaming. The app supports favorites, watch history, and a continue-watching feature. Progress syncs across devices and is stored in a database you choose: Kvrocks, Redis, or Upstash. There is also an experimental feature that attempts to automatically skip advertisements embedded in video streams. The interface is responsive: on desktop it shows a sidebar, on mobile it switches to a bottom navigation bar. It supports PWA installation, meaning users on mobile can add it to their home screen and get a native-app-like experience with offline caching. Deployment is Docker-only. You can run it with a simple docker-compose file pairing the app container with a storage container. A one-click deploy option on the Zeabur cloud platform is also available. The project is licensed under CC BY-NC-SA, which prohibits commercial use and requires attribution and the same license on any derivative projects.

Copy-paste prompts

Prompt 1
Write a docker-compose.yml to deploy MoonTV with a Redis storage container on a VPS, exposing it on port 3000
Prompt 2
Show me how to write a JSON config for MoonTV's admin panel that adds two Apple CMS V10 compatible video source API URLs
Prompt 3
How do I configure MoonTV to use Upstash instead of Redis for storage, and what environment variables do I need to set?
Prompt 4
Walk me through enabling the ad-skip feature in MoonTV and explain its current limitations
Prompt 5
How do I add MoonTV to my Android phone's home screen as a PWA and make sure watch progress syncs across my devices?
Open on GitHub → Explain another repo

← moontechlab on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.