<%- include("partials/layout-top", { title, pageWidth: "wide", pageId: "stream-testing", extraStyles: ["/stream-testing.css"] }) %>
<%- include("partials/page-header", { eyebrow: "Admin-only preview", pageTitle: "Stream testing", description: "Inspect the real OBS output through Lumi without publishing it to a normal streaming destination." }) %>
Never use this while publicly live.

Companion refuses to redirect an active stream. The test uses an expiring destination and restores the exact saved OBS service when it ends.

Managed runtime

MediaMTX

Checking

Lumi checks the private media router without downloading anything.

Secure production ingest

RTMPS certificate automation

"><%= streamTestDns.configured ? "DNS ready" : "HTTP challenge" %>
<% if (streamTestDns.configured) { %>

Lumi uses encrypted <%= streamTestDns.providerLabel %> credentials to create and remove short-lived DNS challenges. Certificate issuance and renewal do not depend on the HTTPS reverse proxy.

<% } else { %>
Using the public WebUI challenge path

If OpenResty, Nginx Proxy Manager, or another HTTPS proxy reserves /.well-known/acme-challenge/, configure DNS automation here. Lumi will then issue RTMPS certificates without proxy changes or certificate file paths.

<% } %>
Create API credentials
<% if (streamTestDns.configured) { %>
<% } %>

Credentials are encrypted with this Lumi installation's secret and are never returned to the browser or written to logs.

Private receiver

Live output

Idle
Start Stream testing from Lumi Companion on the streaming computer.
Recovery trail

Timeline

    Advanced receiver detailsMediaMTX health, ingest safety, and allowlisted metrics
    <%- include("partials/layout-bottom", { extraScripts: ["/admin/stream-testing/hls.js", "/stream-testing.js"] }) %>