StreamHelpers.com

IRL Dashboard

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.

Built for the new GL.iNet Mudi 7 (GL-E5800) — a quad-core ARM router with the horsepower to bond several 5G modems and run the whole dashboard at once. The dashboard itself runs on any OpenWRT / GL.iNet router; the bonding sender is built for the Mudi 7.

Install — one command

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

What you need

For the full experience, a GL.iNet Mudi 7 (GL-E5800). The dashboard runs on any router with OpenWRT; the SRTLA bonding sender is a native binary built for the Mudi 7's aarch64 CPU. On other routers the dashboard installs and runs — the Bonding tab simply shows the sender as not installed.
Your SIMs / modems and any Wi-Fi you want to bond. Plug them in — bonding auto-discovers every live uplink.
A receiver to reassemble the bonded stream (a small Docker package — see below).
About 8 MB free on /overlay, and the router online so opkg can fetch PHP.

Why these pieces?

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.

1 Why the Mudi 7? It is the only router of its kind that puts all of this in one tight package — multiple modems, the radios, the battery, and enough CPU to run the bond and the dashboard at the same time. The horsepower is not a nice-to-have; it is what this software needs. The dashboard itself runs on any OpenWRT router, but the bonding sender is a native binary built for the Mudi 7's aarch64 CPU.
2 Why a Director Mini? Because the Mudi 7 cannot do this part. It is built on a Qualcomm mobile-broadband platform, which has no video encoder in it at all — no hardware encode block, and not the kind of CPU that encodes 1080p in software while it is also bonding your modems. The Director Mini has a dedicated hardware encoder, so it composites your overlays and encodes for near-nothing in power.
You can skip it. The bond accepts any SRT Caller source — a phone app, OBS, a hardware encoder. That is direct mode. The catch is overlays: the weather, GPS, clock and chat overlays are web pages, so your encoder has to be able to load a URL as a video source (OBS can; most phone apps cannot) and be able to reach the router to fetch it — over your LAN, or something like Tailscale if it is not on the same network. No Director Mini IP in Settings simply hides that tab.
3 Why SRTLA? It is free, self-hosted, works well, and it just works. No account, no subscription, no third party in the middle of your stream.
You can skip it and let your encoder send straight out to wherever you stream. But then you are on one connection: bonding several modems into one resilient stream is SRTLA, so skipping it means giving up the thing this router was chosen for. The Bonding tab stays on screen and simply sits idle.
4 Why Restreamer? Same reasons — free, self-hosted, works really well, and your stream keys stay on your own box.
You can skip it and send the reassembled stream anywhere you like. Just remember something still has to republish it: the bond arrives as SRT, and YouTube, Twitch and Kick want RTMP, so you need some republisher at that end — Restreamer is simply one that is free and already packaged here with srtla_rec. Leave the Restreamer settings blank and that tab disappears.
5 Why a DJI camera? Because it is a camera you can actually control from the same screen you are already watching — pair it, set its quality and stabilization, and see whether it is really sending video, without picking up a second device mid-walk. On the Mudi 7 it can also run direct: straight through the router and out over the bonded link with no external encoder in the path at all.
Entirely optional, and off unless you turn it on in Settings — leave it off and the tab never appears. It needs a USB Bluetooth adapter on the router to do the pairing. Any other camera works fine; you just point it at the bond like any other SRT source and control it on the camera itself.
6 Why GPS? Because location is the one thing an IRL audience always asks about, and it drives more than a map: the live track, distance travelled, and the map, satellite, radar and speed overlays all come off the same fix. It also gives the weather and radar overlays somewhere to point without you typing a location.
Optional. It reads NMEA from a cheap USB GNSS receiver plugged into the router (that one is inexpensive and known to work). With nothing plugged in, the tab simply never gets a lock and the location overlays stay unused — nothing else is affected.

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.

Nothing here phones home. The bond, the receiver and the publishing all run on hardware you own. The only paid piece is Premium Chat, and the dashboard works fine without it.

Modem bonding SRTLA

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 / Kick

Phones 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):

Set up the receiversrtla_rec + datarhei Restreamer, one docker compose up. Guide · docker-compose.yml · receiver.tar.gz

Point 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.

Configure

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.

SettingWhat it turns on
Router IPRouter connection health, venue Wi-Fi repeater controls, and Network / Modem diagnostics
SRTLA receiver host + portModem 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, passwordPublishing destinations, their health, and live ingest statistics
Restreamer web UI URLButton to open the full Restreamer configuration when advanced changes are needed
Premium multi-platform chatNative timestamped Chat tab with optional viewer avatars, separate connection settings, protected browser-source chat overlay, and host-triggered Highlight overlay
Chat page URLOptional embedded chat page
WeatherAPI key + locationWeather readout and overlay (free key from weatherapi.com)
GPS sendingGPS tab, live map + track, distance/estimated-step counter, and GPS stream overlay
YouTube API key + channel IDYouTube live lookup
X username + bearer tokenX post engagement
DJI cameraDJI 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 producersRouter tab — copy a private Tailscale dashboard link for approved remote operators
Quick links / confirm-first buttonsYour buttons on the Links tab (with optional "are you sure?" for webhooks)
Premium Chat. The dashboard has a native, subscription-gated timestamped Chat tab, a separate settings page for provider connections, and protected browser-source Chat and Highlight overlays. Select any message to feature it in the separate Highlight layer with a custom title. StreamHelpers keeps account connections and provider credentials off the router.

The tabs

Stream Status — the guided start/stop screen. It checks the configured camera, Director Mini, bonding, and publishing path, explains what needs attention, and takes you to the right control.
Chat — router-native YouTube chat or Premium multi-platform chat. New messages alert the Chat icon while you work elsewhere; displayed history can be cleared without deleting the platform's actual chat. Premium Chat also provides Chat and Highlight browser-source overlays.
Router — a real-time network monitor with per-interface throughput and connection logging, cell scanning and band locking for picking a better tower at a crowded venue, plus venue Wi-Fi repeater controls for captive portals, camouflage, MAC mode, BSSID locking, TTL/HL, and MTU. Important repeater settings are surfaced as clear warnings instead of being buried in router administration pages.
Bonding — SRTLA modem bonding with automatic uplink discovery, live aggregate throughput, receive-buffer tuning, and a timestamped connection log.
Director Mini — a low-latency preview of the live Program feed (scene and GFX as they go out, playing right in the tab), plus connection and program-scene status, scene/GFX controls, stream targets, brightness, timer, and BRB or Security quick actions.
DJI Camera — camera connection and live-video status, sensible bitrate choices, and direct-camera streaming through the Mudi and bonded SRTLA path when no external encoder is needed.
Publishing — Restreamer destination controls with stable ordering, per-destination connection state, editable stream keys, start/stop controls, direct-video and full-configuration links, and live ingest CPU, memory, bandwidth, kbit/s, FPS, and uptime.
Position — USB GPS lock, live coordinates, map broadcast state, track, distance, estimated steps, and map, satellite, radar, or speed overlays for the broadcast.
Weather & Clock — current conditions, an hourly forecast strip, and time/date overlays you can style and add to the Director Mini.
Links — one-tap access to your platform dashboards and other streaming tools.

Stream overlays

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.

Updating

Re-run the same install command. It replaces the app files and the bonding binaries, and never overwrites your settings.

Documentation

Keep the operational guides with the release: documentation index · Chat operations · overlay reference · architecture and security · deployment and recovery · release history.

Uninstall

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

Keep the dashboard on your LAN or VPN. It can reboot your modem, restart your bond, and use the streaming credentials you configure, so do not port-forward it to the public internet. 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.
About the privileged tabs. Where present, the installer grants the web user passwordless sudo for specific binaries only (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.

Known gaps

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.

Files

README.md  ·  docs  ·  install.txt  ·  install.sh  ·  irl-dashboard.tar.gz  ·  receiver

Provided as-is, with no warranty and no support. This dashboard can reboot your modem, restart your bond and change your encoder mid-broadcast. There is no help desk and no obligation on anyone to answer a question or fix a bug. There is no public source repository and no issue tracker — this is a free download, not an open project taking contributions. You are responsible for securing your installation and for testing before you rely on it. See the disclaimer.
Free and as-is — no warranty and no support, donations included.
StreamHelpers.com  ·  tooling for multi-platform streamers
Another fine product of Blue Soup Enterprises