mediastorm#
mediastorm is a self-hosted streaming server and client ecosystem for Debrid, torrent, and Usenet sources. DUMB installs its server, browser client, subtitle helpers, Deno runtime, and Iroh companion from mediastorm's official OCI image, then runs it as an optional PostgreSQL-backed service.
What DUMB manages#
- mediastorm listens on port
7777. - The embedded service UI opens the administrative interface at
/admin. - The browser player is available at
/watch. - DUMB automatically enables its managed PostgreSQL service and creates the
mediastormdatabase. - Account, watch-history, and playback data live in PostgreSQL. Settings and application cache persist under
/mediastorm, which maps to DUMB's persistent/data/mediastormservice directory. - DUMB downloads the correct
linux/amd64orlinux/arm64mediastorm OCI runtime on first install and stores it under/mediastorm/runtime. - OCI manifests and layers are SHA-256 verified, only mediastorm's allowlisted runtime paths are extracted, and release selections must match the image's internal version before DUMB activates them.
- mediastorm supports DUMB's manual and scheduled update checks. Branch installs are not supported because upstream's complete runtime is published as an OCI image rather than a reproducible GitHub source release.
- mediastorm can follow
latestor be pinned to a published OCI release tag, commit-specific OCI tag, or immutable OCI digest.
| Service | Default port | Embedded entry | Persistent state |
|---|---|---|---|
| mediastorm | 7777 | /admin |
PostgreSQL plus /mediastorm |
Configuration in dumb_config.json#
"mediastorm": {
"enabled": false,
"process_name": "mediastorm",
"repo_owner": "godver3",
"repo_name": "mediastorm",
"release_version_enabled": false,
"release_version": "latest",
"suppress_logging": false,
"log_level": "INFO",
"port": 7777,
"auto_update": false,
"auto_update_interval": 24,
"auto_update_start_time": "04:00",
"config_dir": "/mediastorm",
"log_file": "/log/mediastorm.log",
"wait_for_tcp": [
{
"name": "PostgreSQL",
"host": "127.0.0.1",
"port": 5432,
"timeout": 2
}
],
"command": [
"/mediastorm/runtime/mediastorm",
"--port",
"7777"
],
"env": {
"STRMR_CONFIG": "/mediastorm/settings.json",
"STRMR_WEB_APP_DIR": "/mediastorm/runtime/web",
"MEDIASTORM_IROH_DIRECT_DIR": "/mediastorm/runtime/iroh",
"DATABASE_URL": "",
"PATH": "/mediastorm/runtime/python-venv/bin:/mediastorm/runtime/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LIBGL_ALWAYS_SOFTWARE": "1",
"VK_ICD_FILENAMES": "/usr/share/vulkan/icd.d/lavapipe_icd.json"
}
}
DUMB fills DATABASE_URL from the managed PostgreSQL credentials during setup. Do not copy the generated credential-bearing value into documentation, screenshots, or support logs. The installer always uses the fixed official godver3/mediastorm repository and does not accept an arbitrary registry URL from service configuration.
Version selection#
Leave release_version_enabled set to false to follow godver3/mediastorm:latest. To install and retain a specific build, set it to true and choose one of these release_version forms:
| Selection | Example | Behavior |
|---|---|---|
| OCI release tag | 1.5.0 |
Installs the published mediastorm release tag and accepts its dated internal version. |
| GitHub release | v1.5.0-20260711 |
Resolves the matching dated or semantic OCI release tag and requires the exact internal version. |
| Full commit tag | 2e4fdf5f08146795d455604ec16233050b43465a |
Installs the OCI tag published for that full upstream commit. Use a digest when registry-level immutability is required. |
| OCI digest | sha256:<64 lowercase hex characters> |
Installs the exact immutable image manifest. |
DUMB writes the selected value to /mediastorm/runtime/install-selector.txt, the resolved upstream tag to oci-reference.txt, and the verified manifest digest to image-digest.txt. On restart, it compares the selected value with the installed marker and reinstalls only when the selection changes.
Pinned releases, commits, and digests disable automatic updates through DUMB's standard pin behavior. Disable the pin to return to latest, or change release_version to perform an intentional upgrade or rollback. Branch names and arbitrary image tags are rejected.
Initial setup#
First login credentials
- Username:
admin - Password: generated uniquely by mediastorm on first start
DUMB displays the generated password in a warning on the mediastorm service page while
/data/mediastorm/cache/initial_admin_password.txt exists. Reveal or copy it there, sign in,
and change the password immediately. mediastorm deletes the bootstrap credential file after
the password changes, and the DUMB warning then disappears automatically.
Some upstream builds use the compatibility filename initial_admin_password without the
.txt suffix. DUMB recognizes either filename.
- Select mediastorm under Optional Services during onboarding, or enable it from its DUMB service configuration.
- Start mediastorm. On first install, DUMB downloads and verifies the architecture-specific OCI layers, builds the local Python subtitle-helper environment, starts PostgreSQL, and waits for it before launching the service. The initial download is several hundred MiB.
- Open the mediastorm embedded UI. It starts at
/admin. - Sign in as
adminwith the generated password shown on the DUMB service page, then change the password under Admin UI → Accounts → Change Password. - Add TMDB and TVDB API keys in mediastorm's admin settings. Media discovery will be incomplete until both are configured.
- Configure the Debrid, torrent, or Usenet providers you intend to use.
- Open
/watchfor the browser client, or point a supported mediastorm mobile/TV client at the reachable DUMB host and mediastorm port.
Secure the administrative interface
The generated bootstrap password is a sensitive credential, and /admin controls providers and users. Do not copy it into logs, screenshots, or support bundles. Change it before exposing mediastorm beyond a trusted network. Prefer a VPN or a carefully tested authenticated reverse-proxy route; never publish the raw port before completing first-login setup.
Backups and updates#
Back up both parts of mediastorm state:
- the DUMB-managed PostgreSQL
mediastormdatabase; and - the persistent
/mediastormdirectory, especiallysettings.jsonand cached application state./mediastorm/runtimecan be excluded when your backup process supports exclusions because DUMB can reinstall it.
Before first-login setup is complete, backups of the cache may contain
initial_admin_password.txt (or the extensionless compatibility filename). Treat that backup as
credential-bearing data. The live bootstrap file is removed by mediastorm after the admin password
changes.
When following latest, use Check for updates and Install update on the mediastorm service page for one-time updates, or enable auto_update for scheduled checks. DUMB compares /mediastorm/runtime/version.txt with the latest GitHub release, downloads the official OCI runtime into a staging directory, verifies it, and atomically replaces the old runtime only after validation succeeds. A pin blocks normal update installation until you change/disable the pin or explicitly approve the frontend's override action. Before a major upgrade or rollback, preserve a matching database and settings/cache backup because application migrations can make rollback depend on restoring both together.
Database Health Monitoring can observe the mediastorm PostgreSQL database in Standard or Enhanced read-only mode when monitoring is explicitly enabled for the service.
Embedded UI and direct access#
mediastorm uses root-relative routes for /admin, /watch, accounts, sharing, and /api/*. The DUMB Frontend keeps those requests attached to the active mediastorm iframe so they do not collide with DUMB's own routes.
For troubleshooting, direct access is http://<host>:7777 when you publish that port. DUMB's embedded UI does not require the port to be published separately.
Troubleshooting#
- Service waits or exits at startup: Check PostgreSQL status first, then inspect the mediastorm service log. DUMB creates the database and connection URL during setup.
- First-login password is not shown: Confirm mediastorm has completed its first start, then refresh the service page. If the password was already changed, the bootstrap file and DUMB warning are expected to be gone. Otherwise verify that
/data/mediastorm/cache/initial_admin_password.txtexists and is readable by the DUMB container. - Install fails during an OCI layer download: Confirm the DUMB container can reach Docker Hub and has enough free space for the compressed image plus the staged runtime. Retrying the start repeats the verified install.
- OCI version mismatch: Upstream's
latestimage does not yet match its latest GitHub release. DUMB preserves the existing runtime and refuses to activate the mismatched image; retry after upstream finishes publishing. - Pinned version cannot be resolved: Confirm the value is a published mediastorm release tag, full 40-character commit tag, or complete
sha256:digest. Short commit hashes and branch names are intentionally rejected. - Discovery is empty or metadata is missing: Verify both TMDB and TVDB keys in
/admin. - An embedded link opens the DUMB page instead: Refresh the mediastorm service page to renew iframe context, then retry. Report the exact mediastorm path that escaped the iframe.
- A client cannot connect: Use an address reachable from that device, confirm port
7777is exposed or reverse proxied, and do not use127.0.0.1from another device. - Remote invitation fails: Check the mediastorm log for Iroh errors and confirm outbound networking is available from the DUMB container.