Stoatworks Labs

WebLinked

A URL in, SDI and NDI out

Releasedv0.6.0ApplicationC++
WebLinked — A URL in, SDI and NDI out
The control page, rendering github.com to NDI at 1080p50.

What it does

Point WebLinked at a scoreboard, a lower third, a countdown clock, a dashboard or a whole HTML playback page and it becomes a source your vision mixer can cut to. It renders the page offscreen through Chromium at a broadcast raster and rate, then sends it to DeckLink and AJA over SDI and to the network as NDI and OMT — every output taking the same frame.

The engine clocks the browser one frame at a time rather than letting it paint on its own timer, so 50 ticks a second really is 50 paints. Small on purpose: one binary, no service to install, no framework in the page — the operator window is the same control page the HTTP server serves, which is why there is no GUI toolkit anywhere in the project.

  • SDI out to Blackmagic DeckLink and AJA, including separate key and fill
  • NDI and OMT out on the network, with alpha carried correctly — Chromium composites premultiplied and every destination expects straight, so it is un-premultiplied on the way out
  • Frame-accurate external pacing rather than free-running browser paint
  • Several sources in one process: each is a whole pipeline of its own and they share nothing, so one hung page or one missing card leaves the rest on air. HTTP and OSC address a feed by name; omit the name and you get the first, so anything that drove one source still works
  • An interactive preview: click, scroll and type into the live page to dismiss a cookie banner or sign in, on a machine whose browser you cannot otherwise reach
  • A settings page — outputs added, edited and started from the browser, saved to a file the next launch reads back
  • Diagnostics without a shell: the live log with the level changeable while the fault is happening, and a bundle that downloads as a file rather than naming a path
  • Driven from the command line, over HTTP, or over OSC from Companion or a show-control system
  • A tray launcher for a machine where it should come up at login

Where it stands

Released as v0.6.1, with installers for macOS, Windows and Linux plus an optional tray launcher. WebLinked has no window of its own: it is a render host and a control server, and the control page it serves is the whole UI - open it in any browser, or let the tray launcher start it and open it for you. NDI is verified end to end against a real receiver, alpha included. SDI is no longer an assumption either: measured against a real DeckLink Duo 2, with colour confirmed by a loopback capture against an independent BT.709 reference, a two-minute soak holding its buffer at 6 frames with zero dropped ticks, and key + fill measured to carry straight alpha rather than premultiplied - the bug that was real on NDI is absent on SDI. Not everything: the key channel itself, audio over SDI and genlock over hours are still unmeasured, and AJA and OMT compile against their SDKs and have never met hardware or a receiver. Several sources run as tabs, each a whole pipeline with its own browser, clock, raster and outputs, so one hung page cannot touch the others, and two instances can run side by side. Downloads bundle the NDI runtime, so NDI works on a machine that never installed the SDK; the hosted builders have no DeckLink or AJA SDK, so SDI out needs a local build. docs/04-verification.md gives the numbers and the method rather than a promise.

Watch it running

WebLinked video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead