A single-screen control panel for IRL streaming that runs on the router in your backpack — now with SRTLA modem bonding. Bond every SIM and Wi-Fi uplink into one rock-solid stream, switch scenes on your encoder, watch your bitrate and signal, drop weather / GPS / clock overlays onto the broadcast — all from one page you pull up on your phone mid-stream. No laptop, no cloud service, keeps working on cellular.
SSH into your router, or use the terminal in LuCI, and paste this:
wget -qO- https://streamhelpers.com/irl-dashboard/install.sh | sh
It installs PHP, downloads the dashboard, adds a location /streaming/ block to your router's existing nginx server, and — on the Mudi 7 — installs the SRTLA bonding sender. Then open:
http://YOUR-ROUTER-IP/streaming/
It runs on the port your router already serves its admin UI on, so there is no second port to bind and nothing to conflict with. The installer backs up your nginx config before touching it and restores it automatically if the change is rejected or nginx fails to come back up.
The first visit lands on the Settings screen. Fill in what you use, press Save. Done.
No SSH and no text editor after that one install command — the whole setup works from a phone, which is where you want it mid-stream.
Rather read the script before piping it to a shell? Reasonable:
wget -O /tmp/install.sh https://streamhelpers.com/irl-dashboard/install.sh
less /tmp/install.sh
sh /tmp/install.sh
/overlay, and the router online so opkg can fetch PHP.Every part of this stack was picked for a reason, and almost all of it is optional. Here is the honest version, including what you give up by dropping each one.
srtla_rec. Leave the Restreamer settings blank and that tab disappears.None of these are required, and that is rather the point: the value is not any one of them, it is all of them on one screen. Your bitrate, your modems, your camera, your chat, your location, your weather and your publishing are normally seven separate apps on a phone you cannot look at while you are walking and talking. Here they are one page, on the router in your backpack, that keeps working on cellular with no cloud service in the middle. Turn on the parts you use and ignore the rest — every tab you leave unconfigured simply is not there.
The Bonding tab turns every modem, tethered phone and Wi-Fi uplink into one resilient stream. It's automatic: plug an uplink in and it joins the bond; unplug it, or lose service, and it drops out — no menus, no per-link fiddling. When one link stutters the others carry it, so your stream rides through dead spots that would drop a single modem.
Director Mini (SRT) → router (srtla_send, bonds all uplinks) → internet → srtla_rec → Restreamer → YouTube / Twitch / KickPhones can join the bond too. The Bonding tab supports Moblink — install the Moblink app on any spare Android phone, join it to the rig's WiFi, and it relays its cellular data into the bond as another link. Turn it on in the Bonding tab, set a pairing password, and the app should find the router automatically; the tab lists the phones currently connected. It is the cheapest way to add carrier diversity — a friend's phone on a different network becomes an extra uplink for as long as they are standing near you, with no extra hardware to buy.
The bonded stream must be put back together on a machine with a public address — the receiver. We ship it as a Docker package you run on any always-on box (home server / NAS / VPS):
srtla_rec + datarhei Restreamer, one docker compose up. Guide · docker-compose.yml · receiver.tar.gzPoint the Bonding tab's Receiver host / Receiver port at that box, add the Director Mini as an SRT Caller to the router, and press Start bonding. The tab shows every uplink, live throughput, and a timestamped connection log.
Everything is configured in the browser — the gear icon in the tab bar, or /settings.php directly.
Every setting is optional. Leave one blank and the dashboard hides that tab rather than showing you something broken. Set your router IP, press Save, then add the rest as you go.
Settings are stored as plain JSON in /etc/irl-dashboard/settings.json — deliberately outside the web root, so they can never be served over HTTP. Nothing typed into the form can become executable code. Each field carries a note on where to get that credential.
| Setting | What it turns on |
|---|---|
| Router IP | Router connection health, venue Wi-Fi repeater controls, and Network / Modem diagnostics |
| SRTLA receiver host + port | Modem bonding target (Bonding tab) |
| Director Mini IP (+ user/pass) | Magewell Director Mini tab — live Program preview, scenes, GFX, streams, screen brightness (Auto-scan finds it on your LAN) |
| Restreamer API address, user, password | Publishing destinations, their health, and live ingest statistics |
| Restreamer web UI URL | Button to open the full Restreamer configuration when advanced changes are needed |
| Premium multi-platform chat | Native timestamped Chat tab with optional viewer avatars, separate connection settings, protected browser-source chat overlay, and host-triggered Highlight overlay |
| Chat page URL | Optional embedded chat page |
| WeatherAPI key + location | Weather readout and overlay (free key from weatherapi.com) |
| GPS sending | GPS tab, live map + track, distance/estimated-step counter, and GPS stream overlay |
| YouTube API key + channel ID | YouTube live lookup |
| X username + bearer token | X post engagement |
| DJI camera | DJI tab — pair over BLE, choose stream quality and stabilization, then send to an RTMP destination or run directly through the Mudi and bonded SRTLA with no external encoder |
| Remote producers | Router tab — copy a private Tailscale dashboard link for approved remote operators |
| Quick links / confirm-first buttons | Your buttons on the Links tab (with optional "are you sure?" for webhooks) |
The GPS, Weather, Lightning, Clock, Premium Chat, and Chat Highlight pages build transparent overlay URLs with live previews and Copy buttons. Add each one on the Director Mini under Produce → GFX → Add (paste the URL), and it renders full-frame so you can size, position and fade it with the DM's own controls. The Highlight overlay is its own layer: select a Chat message to send it there, then style its title, time on screen, avatar, text, colors, border, and background independently.
Re-run the same install command. It replaces the app files and the bonding binaries, and never overwrites your settings.
Keep the operational guides with the release: documentation index · Chat operations · overlay reference · architecture and security · deployment and recovery · release history.
sed -i '/# >>> irl-dashboard >>>/,/# <<< irl-dashboard <<</d' /etc/nginx/conf.d/gl.conf
rm -rf /www/streaming /etc/irl-dashboard
rm -f /etc/sudoers.d/irl-dashboard /etc/sysctl.d/99-srtla.conf
rm -f /usr/bin/srtla_send /usr/bin/srtla-bond.sh
crontab -l 2>/dev/null | grep -v irl-dashboard | grep -v srtla-bond | grep -v /www/streaming | crontab -
/etc/init.d/nginx restart
Or restore the backup the installer made on its first run: cp /etc/nginx/conf.d/gl.conf.irl-dashboard.orig /etc/nginx/conf.d/gl.conf
settings.json holds your API keys in plain text on the router; it lives outside the
web root at mode 600, owned by the web user.
gl_modem, ubus,
dmesg, srtla-bond.sh), in /etc/sudoers.d/irl-dashboard — never a
blanket rule. That is what makes the Modem, Network and Bonding tabs work. Delete that file to revoke
it; the rest of the dashboard carries on fine.
The Modem controls are GL.iNet-specific: they use /usr/bin/gl_modem, so on other OpenWRT hardware the dashboard can still run but those controls are unavailable. The Magewell Director Mini API is beta and Magewell can change it in a firmware update.
README.md · docs · install.txt · install.sh · irl-dashboard.tar.gz · receiver
It's free and stays free. Donations help cover hosting and build time — but to be clear, a donation is a voluntary gift, not a purchase. It buys no support, no warranty and no priority, and it's non-refundable. Only give what you're happy to give away.
Donate via Stripe