selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
mediastorm logo

Self-host mediastorm

v1.5.0

Self-hosted streaming platform for movies, TV, and live TV

ReleaseOpen SourceMIT
Docker ComposeCompose file & guide
docker compose up -d
Updated4 months ago
LanguageGo
Setup difficultyModerate
MobileNative app
Stars
143
Ports
7777 (Main web UI (admin, account, watch)), 8096 (Jellyfin Bridge (optional)), 7359 (Jellyfin UDP discovery (optional, requires host networking))
Requires
PostgreSQL
Docker
godver3/mediastorm:latest
mediastorm screenshot 1

What is mediastorm?

A self-hosted streaming server for movies, television shows, and live TV channels. It aggregates content from Usenet, debrid providers, personal media libraries (including Plex and Jellyfin), and IPTV sources such as M3U playlists, HDHomeRun tuners, and Xtream Codes. The platform offers native applications for Apple and Google ecosystems, plus a browser-based player. Users get per-profile watch histories with PIN protection and kids modes, offline downloads on mobile, subtitle fetching from OpenSubtitles and SubDL, casting via Google Cast or DLNA, shared viewing rooms, and encrypted remote access through Iroh without port forwarding. An optional Jellyfin bridge lets standard Jellyfin clients connect. The backend runs in Docker Compose with PostgreSQL and is configured through a web admin panel. AI-powered recommendations can use providers like OpenAI, Anthropic, or a local Ollama instance. The codebase is MIT licensed.

Should you self-host mediastorm?

mediastorm scores 45/100 on selfhost.directory (how scoring works) and ranks #44 of 54 in Media Streaming. It has 143 GitHub stars.

It shipped 19 stable releases in the past year. The latest, androidtv-native-latest, came out on 27 October 2026. New versions land roughly every 2 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is Invidious (81/100, 25 800 stars). It scores higher overall, so compare the two before you pick. See mediastorm vs Invidious side by side.

Features

  • AI Recommendations
  • Casting
  • Jellyfin Bridge
  • Live TV and DVR
  • Multi-profile watch history
  • Offline Downloads
  • On-demand streaming
  • Personal media libraries
  • Remote access via Iroh
  • Subtitles
  • Trakt/Simkl/MDBList/Letterboxd sync
  • Watch Together

mediastorm README

How to install mediastorm

Install mediastorm with Docker Compose

Environment variables
POSTGRES_PASSWORD, TZ, PUID, PGID
  1. Download docker-compose.yml and create a .env file beside it:
POSTGRES_PASSWORD=replace-with-a-long-random-password
TZ=America/Edmonton
# Optional on Linux: run the container as the owner of the cache directory.
PUID=1000
PGID=1000
  1. Edit the cache volume in docker-compose.yml:
volumes:
  - /path/to/your/cache:/root/cache

If PUID and PGID are set, the selected user must already have read and write access to the cache folder. The image does not change ownership automatically. On Linux, you can prepare it with:

sudo chown -R "$(id -u):$(id -g)" /path/to/your/cache
  1. Start the backend and PostgreSQL:
docker compose up -d
  1. Open http://localhost:7777/admin and sign in with the initial credentials admin / admin. You must choose a replacement password before the first authenticated session is created.

  2. Complete the first-run configuration:

    1. Add your TMDB API key under Settings → Metadata.
    2. Configure at least one content path: Usenet, debrid, a media library, or Live TV.
    3. Use the admin connection tests to verify the configured services.
    4. Sign into a native app or open http://localhost:7777/watch.

Requires Docker Compose, persistent storage for PostgreSQL and cache directory, TMDB API key, and at least one content source

How to configure mediastorm

  • DATABASE_URLpostgres://mediastorm:${POSTGRES_PASSWORD:-mediastorm}@postgres:5432/mediastorm?sslmode=disablePostgreSQL connection string

    PostgreSQL connection string

  • PGID0Group ID to run the container as (optional, Linux)

    Group ID to run the container as (optional, Linux)

  • POSTGRES_PASSWORDPostgreSQL password for the mediastorm database user

    PostgreSQL password for the mediastorm database user

  • PUID0User ID to run the container as (optional, Linux)

    User ID to run the container as (optional, Linux)

  • TZUTCTimezone for the container

    Timezone for the container

mediastorm releases & version history

FAQ

Forgotten account password

Run docker compose exec mediastorm ./mediastorm recover-account -master -generate for the primary account, or replace -master with -username <name> for a sub-account.

Search returns no playable results

Add TMDB and configure a complete content path, then run the connection tests in the admin panel.

Database errors

Verify POSTGRES_PASSWORD is consistent between PostgreSQL and DATABASE_URL, then check that the PostgreSQL health check passes.

Permission errors

Confirm the container user selected by PUID/PGID can write to the mounted cache directory.

Backend does not become healthy

Run docker compose ps, then inspect docker compose logs mediastorm and docker compose logs postgres.

More in Media Streaming

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…