Windows · Blackmagic DeckLink · Chromium

A live webpage,
out of an SDI port.

web2sdi renders any page — graphics, a scoreboard, a clock, a playing video with its sound — and plays it out as broadcast SDI through a DeckLink card. The same trick as a browser source and a DeckLink output in OBS, without the rest of OBS: a box that boots, goes on air, and takes its orders from a web page.

Get started Screenshots Source

Verified on a DeckLink Duo 2 at 1080p59.94: 601 frames in 10 seconds, none late, none dropped.

What it looks like

What you get

  • The card keeps time

    SDI's clock is the master, as it is in OBS. A page that renders slower than the wire repeats its last frame; one that renders faster drops the spares. The output never starves.

  • Sound, in sync

    --audio embeds the page's audio in the SDI signal at 48kHz, scheduled on the video timeline. Measured on a loopback cable: −0.03ms mean offset.

  • See what is going out

    The control page streams a live preview of the rendered page. Switch on Interact to click and type into it — log in, dismiss a banner, pick from a dropdown — without a monitor on the box.

  • Drive the video

    When the page has a <video>, the control page grows a transport: seek, skip ten seconds, play, pause, mute and rate.

  • Change it live

    A new URL, render size or frame rate applies without touching the wire. Mode, device and audio rebuild the card, and the page says so before you commit.

  • An appliance, not an app

    Tray icon, one copy at a time, settings saved to disk, and an optional startup shortcut so a power cut ends with the box back on air.

  • One installer

    An NSIS installer carries Chromium and everything else. The only prerequisite is Blackmagic's Desktop Video driver, and it warns you if that is missing.

  • Built from Linux

    Zig cross-compiles the Windows build and packages the installer — no Visual Studio, no Windows CI, no Docker.

How it works

The Chromium Embedded Framework renders the page offscreen and hands over every frame it paints. Those land in a small buffer that only ever keeps the newest one. Once per output frame, the DeckLink card's completion callback takes whatever is newest, converts it to YUV if the mode calls for it, and schedules it.

Chromium offscreen, BGRA + audio Frame buffer newest frame wins DeckLink SDI clock is master Control page any browser, :8787 pull JPEG preview URL, input, video ── frames, every tick ── control and preview slow page: last frame repeats fast page: extra frames drop

That split is the whole design: the browser renders as fast as it can, the card plays out exactly as fast as SDI demands, and neither waits for the other.

More on the pipeline

Run it

Install Blackmagic Desktop Video, run the installer, and start web2sdi from the Start Menu. The tray icon opens the control page. From a terminal:

With the UI One-off
web2sdi.exe
web2sdi.exe --lan --port 8787
dltest.exe --probe
web2sdi.exe --url https://example.com --device 0 --audio

Then open http://127.0.0.1:8787. With --lan anyone on the network can reach it — and so change what goes to air.

Chromium's stock builds carry no H.264 or AAC. An .mp4 renders as a black frame and says nothing; use WebM (VP8/VP9 with Opus/Vorbis) for video you play locally.

Every option